鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    RCSOFTCHECK(rclc_executor_add_timer(&executor, &timer));创建失败!

    已定时 已固定 已锁定 已移动
    MicroROS
    ros2 humble小车 microros
    2
    2
    416
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 8
      862977146
      最后由 862977146 编辑

      // 用于创建通信节点和相关通信组件的函数。
      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)创建失败,只能添加订阅者或定时器。

      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小鱼小
        小鱼 技术大佬 @862977146
        最后由 编辑

        @862977146 在 RCSOFTCHECK(rclc_executor_add_timer(&executor, &timer));创建失败! 中说:

        RCSOFTCHECK(rclc_executor_init(&executor, &support.context, 1, &allocator));

        把1改成2或者更大的数据

        新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

        1 条回复 最后回复 回复 引用 0
        • 第一个帖子
          最后一个帖子
        皖ICP备16016415号-7
        Powered by NodeBB | 鱼香ROS