// 用于创建通信节点和相关通信组件的函数。
bool create_transport()
{
// 使用 micro_ros_string_utilities_set 函数设置到 odom_msg.header.frame_id 中
odom_msg.header.frame_id = micro_ros_string_utilities_set(odom_msg.header.frame_id, "odom");
odom_msg.child_frame_id = micro_ros_string_utilities_set(odom_msg.child_frame_id, "base_link");
imu_msg.header.frame_id = micro_ros_string_utilities_set(imu_msg.header.frame_id, "imu");
const unsigned int timer_timeout = 50;
delay(500);
// 初始化内存分配器
allocator = rcl_get_default_allocator();
// 调用 rclc_support_init 函数初始化 ROS 2 运行时的支持库,传入 allocator
RCSOFTCHECK(rclc_support_init(&support, 0, NULL, &allocator));
/// 调用 rclc_node_init_default 函数初始化 ROS 2 节点,传入节点名称、命名空间和支持库
RCSOFTCHECK(rclc_node_init_default(&node, "cc_car", "", &support));
// 调用 rclc_publisher_init_best_effort 函数初始化 ROS 2 发布者,传入节点、消息类型和主题名称。
// 发布里程计
RCSOFTCHECK(rclc_publisher_init_best_effort(&odom_publisher, &node, ROSIDL_GET_MSG_TYPE_SUPPORT(nav_msgs, msg, Odometry), "odom"));
// 发布陀螺仪
RCSOFTCHECK(rclc_publisher_init_best_effort(&imu_publisher, &node, ROSIDL_GET_MSG_TYPE_SUPPORT(sensor_msgs, msg, Imu), "imu"));
// 调用 rclc_subscription_init_default 函数初始化 ROS 2 订阅者,传入节点、消息类型和主题名称。
RCSOFTCHECK(rclc_subscription_init_best_effort(&twist_subscriber, &node, ROSIDL_GET_MSG_TYPE_SUPPORT(geometry_msgs, msg, Twist), "cmd_vel"));
// 调用 rclc_timer_init_default 函数初始化 ROS 2 定时器,传入支持库、定时器周期和回调函数
RCSOFTCHECK(rclc_timer_init_default(&timer, &support, RCL_MS_TO_NS(timer_timeout), callback_sensor_publisher_timer_));
// 创建执行器
RCSOFTCHECK(rclc_executor_init(&executor, &support.context, 1, &allocator));
// 调用 rclc_executor_add_subscription 函数将订阅者添加到执行器中,传入执行器、订阅者、消息和回调函数。
RCSOFTCHECK(rclc_executor_add_subscription(&executor, &twist_subscriber, &twist_msg, &callback_twist_subscription_, ON_NEW_DATA));
// 调用 rclc_executor_add_timer 函数将定时器添加到执行器中,传入执行器和定时器。
RCSOFTCHECK(rclc_executor_add_timer(&executor, &timer));
return true;
rclc_executor_add_timer(&executor, &timer)创建失败,只能添加订阅者或定时器。