目录
本文分享在STM32开发板上搭建micro-ROS环境(以STM32F407为例)。
开发环境是windows11下STM32CubeIDE,测试环境是虚拟机ubuntu22.04+ROS2 humble+agent。
-------------------------------------------------------------------------------------------------------------------------------
一、安装ROS2和micro_ros构建系统
参考教程:a. 动手学ROS2
b. https://micro.ros.org/docs/tutorials/core/first_application_linux/
注意要点:
(1)首先参考教程a安装虚拟机和ubuntu,注意版本选择22.04;
(2)参考教程b部署micro_ros构建系统
# Source the ROS 2 installation,将ROS2的全局环境变量和路径配置到当前的终端会话中
source /opt/ros/$ROS_DISTRO/setup.bash
# Create a workspace and download the micro-ROS tools
mkdir microros_ws
cd microros_ws
git clone -b $ROS_DISTRO https://github.com/micro-ROS/micro_ros_setup.git src/micro_ros_setup
# Update dependencies using rosdep,更新rosdep
sudo apt update && rosdep update
rosdep install --from-paths src --ignore-src -y
# Install pip
sudo apt-get install python3-pip
# Build micro-ROS tools and source them,
# 运行 colcon build 命令来构建工作空间中的所有包,colcon 是 ROS 2 的标准构建工具,它会自动查找和
# 构建工作空间中的所有包,确保它们可以被使用。
# 配置环境:source install/local_setup.bash 将工作空间中的环境变量和路径添加到当前终端会话,确保# # 你可以运行和测试你构建的工具和包。
colcon build
source install/local_setup.bash
(3)教程a中的安装docker不是必须的,取决于运行agent时是否想使用docker
(4)记得安装rosdep(用鱼香的工具),并在以后的命令中将rosdep替换为rosdepc
(5)安装依赖项rosdep时,必须处于创建的microros_ws中,因为里面有clone的src文件夹
二、安装和运行agent
参考教程:【ROS2机器人入门到实战】拓展-源码编译Agent_micro-ros 源码-CSDN博客
1、使用源码编译的方式部署agent,到src里clone源码:
git clone http://github.fishros.org/https://github.com/micro-ROS/micro-ROS-Agent.git -b humble
git clone http://github.fishros.org/https://github.com/micro-ROS/micro_ros_msgs.git -b humble
2、返回工作空间目录并执行编译
cd microros_ws
colcon build
3、注意!!!记得配置下环境变量:
source install/local_setup.sh
4、运行agent,选择udp、tcp、can、串口,这里没有使用docker
ros2 run micro_ros_agent micro_ros_agent udp4 --port 8888
ros2 run micro_ros_agent micro_ros_agent tcp4 --port 8888
ros2 run micro_ros_agent micro_ros_agent canfd --dev [YOUR CAN INTERFACE]
ros2 run micro_ros_agent micro_ros_agent serial --dev [YOUR BOARD PORT]
例如:
ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyUSB0
三、ubuntu下ch340连接
1、检查是否能够识别到ch340,如下输出则表示可以识别到。
输入命令: lsmod | grep usbserial
输出:usbserial 53248 1 ch341
2、输入命令(查看USB转串口接入状态):dmesg。
如下代表ch340已经正常连接。
[ 33.883591] usbserial: USB Serial support registered for ch341-uart
[ 33.883618] ch341 3-2:1.0: ch341-uart converter detected
[ 33.892312] RAPL PMU: API unit is 2^-32 Joules, 0 fixed counters, 10737418240 ms ovfl timer
[ 33.893971] usb 3-2: ch341-uart converter now attached to ttyUSB0
还能查看已连接的设备,输入:ls /dev/tty*
3、如果显示disconnec... 断开连接,可能是因为ch340驱动被占用,解决方法如下,先输入命令:
sudo dmesg | grep brltty
如果你能收到这样的结果:
[ 7033.078452] usb 1-13: usbfs: interface 0 claimed by ch341 while 'brltty' sets config #1
问题就很明显了,是驱动占用问题,只需要卸载brltty就行:
sudo apt remove brltty
重新插拔、虚拟机连接下ch340,再回到第2步,应该能正常连接上。
四、安装一个串口调试软件(非必须,可用来检查串口功能)
参考:https://www.cnblogs.com/kele-dad/p/11075567.html
- 安装:sudo apt-get install cutecom
- 打开方式:
- 在终端输入:cutecom,即可打开串口工具
- 或者在应用中,点击 cutecom 图标打开
五、micro_ros移植进stmcubeIDE工程
参考:
a.micro_ros移植到STM32F405RG,STM32CubeMX+STM32CubeIDE开发环境+freertos_microros 源码下载-CSDN博客
参考文档十分详细且可行,这里直接使用了编译好的静态库,总结下来分为这几步:
(1)复制.c文件。包括:通讯接口microros_transports文件夹中需要使用的接口文件、microros的内存分配接口实现custom_memory_manager.c和microros_allocators.c 、microros的时间相关接口实现microros_time.c;
(2)将静态库文件和头文件复制到工作空间,建议不要禁止编译,附stm32cubeIDE选择文件禁止编译的方法:
(3)添加头文件路径、静态库文件和路径;
(4)修改freertos.c,在任务中添加micro_ros基础的node创建、topic创建、信息发送等。
六、测试
进过前面的步骤,agent应该可以正常运行,把板子的串口1和2连上电脑,串口2接入虚拟机中。先开启agent,再运行stm32或者复位一下。
另外开一个终端,查看ros node和topic,如果一切顺利,就可以看到stm32创建的node和topic了,
查看信息:
测试完成,功能正常~