You're reading the documentation for a development version.
For the latest stable release version, please have a look at master.

在RT-Thread上运行Micro-ROS

Micro-ROS简介

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

microros_architecture

部署架构

本文通过预编译的microros静态库来部署Micro-ROS,静态库的编译请参考官方文档。我们提供了Cortex-a15的预编译库,可以在相应平台上进行部署。下图为部署架构图

graph TD subgraph RT-Thread 系统 RTThread[RT-Thread RTOS] Drivers[自定义驱动和 POSIX 层] LibMicroROS[libmicroros 库] Transport[自定义传输 - 串口 或 UDP] end subgraph 主机侧 Agent[Micro XRCE-DDS Agent] ROS2[ROS 2 网络和节点] end RTThread <--> Drivers Drivers <--> LibMicroROS LibMicroROS <--> Transport Transport <--> Agent <--> ROS2

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