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

    利用micro-ros-agent通过serial运行,没有打印出来node

    已定时 已固定 已锁定 已移动
    ROS2机器人开发:从入门到实践
    micro-ros-agent 串口运行,没有发现node
    3
    3
    260
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • L
      lyd199406 年度VIP
      最后由 编辑

      背景(可选):

      ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyUSB0
      06a66b61-d574-4626-a844-0d897316a041-image.png
      4277d2fe-97e7-4464-b9c8-878e7b0e2161-image.png

      问题描述:

      利用micro-ros-agent通过serial运行,没有打印出来node

      具体细节和上下文:

      直接复制/home/leo/Documents/PlatformIO/Projects/fishbot_motion_control/.pio/libdeps/featheresp32/micro_ros_platformio/examples/micro-ros_publisher/src/Main.cpp的代码,没有报错,但是在打印出来node
      代码:
      #include <Arduino.h>
      #include <micro_ros_platformio.h>

      #include <rcl/rcl.h>
      #include <rclc/rclc.h>
      #include <rclc/executor.h>

      #include <std_msgs/msg/int32.h>

      #if !defined(MICRO_ROS_TRANSPORT_ARDUINO_SERIAL)
      #error This example is only avaliable for Arduino framework with serial transport.
      #endif

      rcl_publisher_t publisher;
      std_msgs__msg__Int32 msg;

      rclc_executor_t executor;
      rclc_support_t support;
      rcl_allocator_t allocator;
      rcl_node_t node;
      rcl_timer_t timer;

      #define RCCHECK(fn) { rcl_ret_t temp_rc = fn; if((temp_rc != RCL_RET_OK)){error_loop();}}
      #define RCSOFTCHECK(fn) { rcl_ret_t temp_rc = fn; if((temp_rc != RCL_RET_OK)){}}

      // Error handle loop
      void error_loop() {
      while(1) {
      delay(100);
      }
      }

      void timer_callback(rcl_timer_t * timer, int64_t last_call_time) {
      RCLC_UNUSED(last_call_time);
      if (timer != NULL) {
      RCSOFTCHECK(rcl_publish(&publisher, &msg, NULL));
      msg.data++;
      }
      }

      void setup() {
      // Configure serial transport
      Serial.begin(115200);
      set_microros_serial_transports(Serial);
      delay(2000);

      allocator = rcl_get_default_allocator();

      //create init_options
      RCCHECK(rclc_support_init(&support, 0, NULL, &allocator));

      // create node
      RCCHECK(rclc_node_init_default(&node, "micro_ros_platformio_node", "", &support));

      // create publisher
      RCCHECK(rclc_publisher_init_default(
      &publisher,
      &node,
      ROSIDL_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Int32),
      "micro_ros_platformio_node_publisher"));

      // create timer,
      const unsigned int timer_timeout = 1000;
      RCCHECK(rclc_timer_init_default(
      &timer,
      &support,
      RCL_MS_TO_NS(timer_timeout),
      timer_callback));

      // create executor
      RCCHECK(rclc_executor_init(&executor, &support.context, 1, &allocator));
      RCCHECK(rclc_executor_add_timer(&executor, &timer));

      msg.data = 0;
      }

      void loop() {
      delay(100);
      RCSOFTCHECK(rclc_executor_spin_some(&executor, RCL_MS_TO_NS(100)));
      }

      尝试过的解决方法:

      0cddda95-8731-4bca-92b3-caabdd930116-cd5da87901c9d567cd32d2591090fab9.jpg
      已经重新刷过硬件,设置设备类型是运动控制板,点击一键下载,显示写入成功

      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        从你提供的信息来看,你已经成功地将Micro-ROS代码部署到了ESP32开发板上,并且使用了micro_ros_agent通过串口进行通信。然而,你没有在micro_ros_agent的输出中看到任何关于节点的信息。这里有几个可能的原因和相应的解决步骤:

        1. 检查串口连接:

          • 确保你的ESP32开发板通过USB正确连接到电脑,并且/dev/ttyUSB0是正确的串口设备。
          • 你可以使用screen或minicom等工具来检查串口是否有数据输出。例如,使用screen /dev/ttyUSB0 115200来查看串口输出。
        2. 检查micro_ros_agent的日志级别:

          • micro_ros_agent默认可能不打印所有节点的信息。你可以尝试增加日志级别来看是否有更多输出。使用--verbose选项来运行micro_ros_agent,例如:
            ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyUSB0 --verbose
            
          • 这将提供更详细的输出,可能包括节点的创建和连接信息。
        3. 检查Micro-ROS客户端代码:

          • 确保你的Micro-ROS客户端代码(即ESP32上的代码)正确初始化了节点、发布者和定时器。
          • 你的代码看起来是正确的,但确认没有编译错误或警告,并且所有宏定义(如MICRO_ROS_TRANSPORT_ARDUINO_SERIAL)都已正确设置。
        4. 检查ROS 2网络:

          • 确保你的ROS 2主机(运行micro_ros_agent的机器)和ESP32开发板在同一个网络中(如果适用)。
          • 如果使用WiFi或其他网络连接方式,确保网络配置正确无误。
        5. 硬件和固件问题:

          • 尝试在不同的电脑上连接ESP32,看是否是电脑或USB端口的问题。
          • 尝试使用不同的USB线或USB转串口适配器。
        6. 代码调试:

          • 在ESP32代码中添加更多的调试输出,例如使用Serial.print来打印关键步骤的状态。
          • 这可以帮助你确认代码是否按预期执行到某个点。
        7. 检查ROS 2版本兼容性:

          • 确保你使用的micro_ros_agent和Micro-ROS客户端库的版本兼容。
          • 有时候,库或工具的更新可能会引入不兼容的更改。

        如果以上步骤都不能解决问题,你可能需要更深入地检查代码或寻求Micro-ROS社区的帮助。在GitHub或相关的论坛和社区中提问,通常可以得到来自开发者和用户的帮助。


        以上为生成回答,仅供参考~

        我是小伊,已接入ChatGpt,所有回复,仅供参考~

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

          @lyd199406 这两种方法是冲突的,你不能又用配置助手,又用pio

          是 Main.cpp 吗?大小写是不是错了

          代码和教程中的对比过了吗,有没有区别

          串口波特率调整一下试试

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

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