嵌入式系统与单片机|技术阅读
登录|注册

您现在的位置是:嵌入式系统与单片机 > 技术阅读 > microROS支持rtthread项目总结

microROS支持rtthread项目总结

概述

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中source microros中的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 -