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

    stm32f103vet6移植uart版本的agent,连接成后,但是agent无法受到话题数据

    已定时 已固定 已锁定 已移动 未解决
    综合问题
    microrosagent agent
    3
    7
    513
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 剑心剑
      剑心
      最后由 编辑

      81120d6b-17a1-4eba-8822-553afabfa3c6-image.png
      如图,我已经通过指令:ros2 run micro_ros_agent micro_ros_agent serial -b 115200 --dev /dev/ttyUSB0 连接上我的扳子,从info来看,扳子也回馈了将要上报的话题,这从第二个图片显示可以看到官方话题mx,已经出现了:
      ab8c7341-a091-4d5c-bd52-b7465eaf3bac-image.png
      可是,同样的代码中上报的data,无法topic echo出来,实在是太奇怪了:
      “
      msg.data = 0;

        for(;;)
        {
          rcl_ret_t ret = rcl_publish(&publisher, &msg, NULL);
          if (ret != RCL_RET_OK)
          {
            printf("Error publishing (line %d)\n", __LINE__);
          }
      
          msg.data++;
          osDelay(10);
        }
      

      ”

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

        你遇到的问题可能涉及到多个方面,包括微控制器(STM32F103VET6)上的Micro-ROS Agent配置、数据发布逻辑、以及ROS 2系统的整体配置。以下是一些可能的解决步骤和检查点:

        1. 检查UART连接:
          确保STM32F103VET6与PC之间的UART连接是正确的,并且波特率、数据位、停止位和奇偶校验位等参数与micro_ros_agent的配置相匹配。在你的命令中,你已经指定了波特率为115200,请确认MCU上的设置也相同。

        2. 检查ROS 2 Agent的日志:
          运行micro_ros_agent时,它会输出一些日志信息。请检查这些日志中是否有任何错误或警告,特别是与连接或数据处理相关的。

        3. 检查数据发布逻辑:
          你的发布逻辑看起来基本正确,但请确保rcl_publish函数被正确调用,并且没有因为资源限制(如内存不足)而失败。此外,请检查msg和publisher的初始化是否正确,确保它们在发布之前已经被正确配置。

        4. 查看ROS 2的订阅者:
          使用ros2 topic list查看所有当前活动的主题,确认你的主题(如mx)确实存在。然后,尝试使用ros2 topic echo /mx来订阅并查看发布的数据。如果这里看不到任何数据,可能是数据没有正确发送到ROS 2网络中。

        5. 检查Micro-ROS客户端的初始化:
          确保你的Micro-ROS客户端(即STM32F103VET6上的代码)已经正确初始化了所有必要的组件,包括节点、发布者和消息类型。初始化过程中可能包括设置节点名称、创建发布者和订阅者等。

        6. 检查RTOS的调度:
          由于你使用了osDelay(10);,请确保RTOS的调度器能够正常工作,并且没有因为资源争用或优先级问题而导致任务被阻塞。此外,检查osDelay的单位(通常是毫秒),确保它不会导致发布频率过低。

        7. 查看MCU的资源使用情况:
          如果MCU的资源(如CPU、内存)接近极限,可能会影响ROS 2节点的性能。使用调试工具(如J-Link、ST-Link等)来检查MCU的资源使用情况。

        8. 更新和同步软件库:
          确保你使用的Micro-ROS和ROS 2库是最新版本,并且彼此兼容。有时候,软件库中的bug或不兼容问题可能会导致意外的行为。

        9. 查看示例和文档:
          参考Micro-ROS的官方示例和文档,看看是否有类似的问题被提及,并了解如何解决它们。

        10. 社区和论坛:
          如果上述步骤都不能解决问题,考虑在Micro-ROS的GitHub仓库、ROS 2论坛或相关社区中寻求帮助。

        希望这些步骤能帮助你解决问题!如果还有其他具体的问题或错误消息,请提供更多信息以便进一步分析。


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

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

        1 条回复 最后回复 回复 引用 0
        • 剑心剑
          剑心
          最后由 编辑

          补充信息:ad0656f9-595e-4a92-9989-d6fe647c88fc-image.png
          node list 无法检测到上报的节点。

          1 条回复 最后回复 回复 引用 0
          • 剑心剑
            剑心
            最后由 编辑

            补充agent运行日志,似乎data在日志内显示为空:
            989b13bc-2955-4c67-a795-1dfc5f93ca3f-image.png
            以下是我的完整代码:

            void StartDefaultTask(void const * argument)
            {
              /* USER CODE BEGIN StartDefaultTask */
              /* Infinite loop */
            	// micro-ROS configuration
            
            
            	  rmw_uros_set_custom_transport(
            	    true,
            	    (void *) &huart3,
            	    cubemx_transport_open,
            	    cubemx_transport_close,
            	    cubemx_transport_write,
            	    cubemx_transport_read);
            
            	  rcl_allocator_t freeRTOS_allocator = rcutils_get_zero_initialized_allocator();
            	  freeRTOS_allocator.allocate = microros_allocate;
            	  freeRTOS_allocator.deallocate = microros_deallocate;
            	  freeRTOS_allocator.reallocate = microros_reallocate;
            	  freeRTOS_allocator.zero_allocate =  microros_zero_allocate;
            
            	  if (!rcutils_set_default_allocator(&freeRTOS_allocator)) {
            	      printf("Error on default allocators (line %d)\n", __LINE__);
            	  }
            
            	  // micro-ROS app
            
            	  rcl_publisher_t publisher;
            	  std_msgs__msg__Int32 msg;
            	  rclc_support_t support;
            	  rcl_allocator_t allocator;
            	  rcl_node_t node;
            
            	  allocator = rcl_get_default_allocator();
            
            	  //create init_options
            	  rclc_support_init(&support, 0, NULL, &allocator);
            
            	  // create node
            //	  rclc_node_init_default(&node, "zzz", "", &support);
            	  rclc_node_init_default(&node, "cubemx_node", "", &support);
            	  // create publisher
            	  rclc_publisher_init_default(
            	    &publisher,
            	    &node,
            	    ROSIDL_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Int32),
            	    "cubemx_publisher");
            
            	  msg.data = 0;
            
            	  for(;;)
            	  {
            	    rcl_ret_t ret = rcl_publish(&publisher, &msg, NULL);
            	    if (ret != RCL_RET_OK)
            	    {
            	      printf("Error publishing (line %d)\n", __LINE__);
            	    }
            
            	    msg.data++;
            	    osDelay(10);
            	  }
            
            
              /* USER CODE END StartDefaultTask */
            }
            
            1 条回复 最后回复 回复 引用 0
            • 小鱼小
              小鱼 技术大佬 @剑心
              最后由 编辑

              @剑心 这个发布频率太高了吧

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

              剑心剑 1 条回复 最后回复 回复 引用 0
              • 剑心剑
                剑心
                最后由 编辑

                总结:
                1.启动agent查看日志,并对照stm32的上发数据,可以知道串口能联通,数据也没问题:```
                ros2 run micro_ros_agent micro_ros_agent serial -b 115200 --dev /dev/ttyUSB0 -v6

                2.使用ros2 topic  list,可以看到话题/cubemx_publisher
                问题:
                1.ros2 topic echo /cubemx_publisher无法显示出可以在ros2 topic echo /cubemx_publisher已经看到了的32上报的数据
                2.使用ros2 node list无法显示已经启动的节点micro_ros_agent ,和32上上报数据的节点。
                1 条回复 最后回复 回复 引用 0
                • 剑心剑
                  剑心 @小鱼
                  最后由 编辑

                  @小鱼 已经调整为1秒一次了,目前问题没有解决

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