概述
microROS支持rtthread为2022开源之夏项目,最终实现在rtthread的工程下构建microROS静态库,现总结下code的使用方法。
测试环境
- ROS2 galactic humle;
- art-pi
code
https://github.com/wuhanstudio/micro_ros/tree/galactic-standalone-gcc-10
https://github.com/navy-to-haijun/micro_ros_setup/tree/rtthtrad-galactic
使用方法一
在rtthread的工程下构建microROS静态库。
1. 下载code
rtthread code
# 下载rtthread (对于其他单片机,使用rtthread仓库)
git clone https://github.com/RT-Thread-Studio/sdk-bsp-stm32h750-realthread-artpi.git
# 进入目标bsp
cd sdk-bsp-stm32h750-realthread-artpi/projects/art_pi_wifi/
# art- pi 需要
ln -s ../../libraries/ libraries
ln -s ../../rt-thread/ rt-thread
# 下载 microROS 编译脚本 demo
cd packages
git clone -b galactic-standalone-gcc-10 https://github.com/wuhanstudio/micro_ros.git
关于 microros 文件夹说明
.
├── examples # demo 文件夹
│ ├── micro_ros_addtwoints_server.c
│ ├── micro_ros_ping_pong.c
│ ├── micro_ros_pub_int32.c
│ ├── micro_ros_pub_sub_int32.c
│ ├── micro_ros_sub_int32.c
│ └── micro_ros_sub_twist.c
├── Kconfig # 实现 menuconfig 配置通信方式和使用demo
├── microros
│ ├── colcon.meta # microROS配置文件
│ ├── generate_microros_library.sh# 构建microROS静态库核心脚本
│ └── toolchain.cmake.in # 编译microROS预定义宏文件
├── microros_library.sh # 编译运行脚本
├── README.md
├── SConscript # 将microROS相关的code配置到rtthread中
└── transports # UDP serial 接口
├── micro_ros_rtt.h
├── rtt_serial_transports.c
└── rtt_udp_transport.c
其中microros_library.sh
脚本实现以下功能:
- 使rtthread支持cmake编译;
- 在
CMakeLists.txt
中加入自定义命令,使其能编译microROS - 调用
microros/generate_microros_library.sh
- 在
Kconfig
中sourcemicroros
中的Kconfig
2. 配置交叉编译链路径
在rtconfig.py
中配置交叉编译链路径:example
if CROSS_TOOL == 'gcc':
PLATFORM = 'gcc'
EXEC_PATH = r'/home/haijun/env_released_1.2.0/gcc-arm-none-eabi-10.3-2021.10/bin'
3. 编译microROS静态库
cd micro_ros/
./microros_library.sh
4. 自我配置UART和UDP驱动
UART:确保rt_device_write()
和 rt_device_read()
正常;
UDP:确保send()
和 recv()
正常;
5. 配置通信方式和使用脚本
scons --menuconfig
art-pi 使用虚拟串口
编译:scons
6. 运行
docker run -it --rm -v /dev:/dev --privileged --net=host microros/micro-ros-agent:galactic serial -D /dev/ttyACM1 -v6
# or
docker run -it --rm -v /dev:/dev --privileged --net=host microros/micro-ros-agent:galactic udp4 --port 9999 -v6
使用方法二
使用ROS命令完成 代码下载,配置,编译,下载
1. 建立micro_ros_setup环境
# 下载code
mkdir ros2_rtthread/src
cd ros2_rtthread/src
git clone -b rtthtrad-galactic https://github.com/navy-to-haijun/micro_ros_setup.git
# 编译
rosdep update && rosdep install --from-paths src --ignore-src -y
colcon build
source install/local_setup.bash
2. 下载
不加参数,可以查看支持的参数
ros2 run micro_ros_setup create_firmware_ws.sh rtthread art-pi
- 下载ament相关包;
- 下载microROS相关包;
- 下载STMH750-ART-Pi相关代码;
- 下载为rtthread提供的transport和example相关code;
- 下载交叉编译链:gcc-arm-none-eabi-5_4-2016q3;
3. 为rtthread 配置 app(example)和transport
不加参数,可以查看支持的参数
ros2 run micro_ros_setup configure_firmware.sh [app name] [options]
app:
- micro_ros_pub_int32.c
- micro_ros_sub_int32.c
- micro_ros_pub_sub_int32.c
- micro_ros_ping_pong.c
- micro_ros_addtwoints_server.c
- icro_ros_addtwoints_client.c
options:
- -d device : 使用USB虚拟串口;
- -i ip : 使用UDP时, agent的IP;
- -p port: 使用UDP时, agent监控的端口;
# 使用 micro_ros_pub_int32.c demo; 使用USB虚拟串口
ros2 run micro_ros_setup configure_firmware.sh micro_ros_pub_int32.c -d vcom
# or
# 使用 micro_ros_pub_int32.c demo; 使用UDP
ros2 run micro_ros_setup configure_firmware.sh micro_ros_pub_int32.c -i 192.168.31.130 -p 9999
4. 编译
ros2 run micro_ros_setup build_firmware.sh
- 编译 microROS
- 编译rtthread
5. 下载
请提前安装好STM32CubeProgrammer,安装路径默认,
检查STM32CubeProgrammer的默认安装路径是否是/usr/local/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin
ros2 run micro_ros_setup flash_firmware.sh
6 运行
# 启动 art-pi 确保虚拟串口OK /dev/ttyACM1
# agent
docker run -it --rm -v /dev:/dev --privileged --net=host microros/micro-ros-agent:galactic serial -D /dev/ttyACM1 -v6
# or
docker run -it --rm -v /dev:/dev --privileged --net=host microros/micro-ros-agent:galactic udp4 --port 9999 -v6
# microROS
microros_pub_int
# 查看话题
ros2 topic list
ros2 topic echo /micro_ros_rtt_node_publisher
- END -