在RT-Thread上运行Micro-ROS
Micro-ROS简介
Micro-ROS(micro-ROS)是 ROS 2 的嵌入式版本,它的目标是将 ROS 2 的功能扩展到微控制器(MCU)上,使资源受限的设备能够成为 ROS 生态系统的一部分。下图为Micro-ROS架构图

部署架构
本文通过预编译的microros静态库来部署Micro-ROS,静态库的编译请参考官方文档。我们提供了Cortex-a15的预编译库,可以在相应平台上进行部署。下图为部署架构图
Micro-ROS部署
获取示例工程
在进行部署Micro-ROS之前,需要完成章节ARM 端 RT-Thread 模型部署中的相关内容,以便获取正确的开发环境。在开发环境配置完成之后,即可获取Micro-ROS支持包。使用终端或Code打开前面获取的rt_thread_arm目录,并执行以下命令,获取Micro-ROS支持包:
1cd bsp/x78ne/armhf
2git clone https://gitlink.org.cn/nudt_dsp/rt_thread_packages.git packages
配置示例工程
接下来可以开启Micro-ROS支持,在终端中输入:
1scons --menuconfig
进入配置界面后,使用下方向键移动到“Enable Micro-ROS package”按空格键勾选,然后输入按下S键保存到.config文件,接着按下Q键退出配置。
默认情况下开启Micro-ROS支持使用的是Cortex-A15软浮点的microros库,示例代码默认选中发布和订阅两个例子,传输模式使用UDP。
编译示例工程
使用以下命令清理工作区:
1scons -c
输入以下命令编译固件,完成后固件中会包含Micro-ROS相关例程。
1scons -j8
运行Micro-ROS
运行Agent
Micro-ROS需要借助运行在PC机上的Agent才能与ROS2进行通信,因此需要在一台计算机上安装ROS2并且运行micro_ros_agent。具体请参考Linux 上的第一个Micro-ROS应用程序。请根据官方文档安装好ROS2和Micro-ROS构建系统,并运行Agent。
示例工程使用的端口号为9999,请注意替换官方文档的8888。
1ros2 run micro_ros_agent micro_ros_agent udp4 --port 9999
运行成功应该会得到以下输出:
1ros2 run micro_ros_agent micro_ros_agent udp4 --port 9999
2[1747212288.580016] info | UDPv4AgentLinux.cpp | init | running... | port: 9999
3[1747212288.580758] info | Root.cpp | set_verbose_level | logger setup | verbose_level: 4
这表示Agent已经成功运行,正在监听Micro-ROS应用程序。
运行Micro-ROS应用程序
保证板卡与运行Agent的PC机网络互通的情况下,在板卡上运行int32发布程序,请注意替换IP地址为Agent运行的PC机地址。
1microros_pub_int32 192.168.23.39
正常情况下会得到下面的输出
1msh />microros_pub_int32 192.168.23.39
2Connect sucessful!
3[micro_ros] node created
4[micro_ros] publisher created
5[micro_ros] timer created
6[micro_ros] executor created
7[micro_ros] New thread mr_pubint32
正常情况下Agent会得到以下输出
1ros2 run micro_ros_agent micro_ros_agent udp4 --port 9999
2[1747039235.088131] info | UDPv4AgentLinux.cpp | init | running... | port: 9999
3[1747039235.088549] info | Root.cpp | set_verbose_level | logger setup | verbose_level: 4
4[1747039601.771389] info | Root.cpp | create_client | create | client_key: 0x7CD27FCA, session_id: 0x81
5[1747039601.771476] info | SessionManager.hpp | establish_session | session established | client_key: 0x7CD27FCA, address: 192.168.23.100:1984
6[1747039601.806474] info | ProxyClient.cpp | create_participant | participant created | client_key: 0x7CD27FCA, participant_id: 0x000(1)
7[1747039601.836333] info | ProxyClient.cpp | create_topic | topic created | client_key: 0x7CD27FCA, topic_id: 0x000(2), participant_id: 0x000(1)
8[1747039601.841523] info | ProxyClient.cpp | create_publisher | publisher created | client_key: 0x7CD27FCA, publisher_id: 0x000(3), participant_id: 0x000(1)
9[1747039601.851094] info | ProxyClient.cpp | create_datawriter | datawriter created | client_key: 0x7CD27FCA, datawriter_id: 0x000(5), publisher_id: 0x000(3)
至此,int32发布程序已成功运行,在Agent机器上面新开一个终端输入以下命令查看
请注意替换"/opt/ros/humble/setup.bash"为正确的ros2安装路径
1source /opt/ros/humble/setup.bash
2ros2 topic echo /micro_ros_rtt_node_publisher
将会得到以下输出
1data: 48
2---
3data: 49
4---
5data: 50
6---
7data: 51
8---
9data: 52
10---
11data: 53
12---
13data: 54
14---
15...
作者 @xhb xiahongbo@hngwg.com