快速上手micro ros && RT-Thread(serial和udp方式)
1.准备工作
克隆GitHub:RT-Thread主仓:
$ git clone https://github.com/RT-Thread/rt-thread.git
克隆 env-windows:
$ git clone --recursive --depth 1 https://github.com/RT-Thread/env-windows.git
克隆下来的 env-windows 可以放在D盘,同时双击打开 env.exe,待启动ConEmu终端后将其注册到右键列表
克隆指定win_arm-gcc分支micro_ros_rtthread_component仓库
$ git clone -b win_arm-gcc https://github.com/kurisaW/micro_ros_rtthread_component.git
目录层次如下:
├─micro_ros_rtthread_component
│ ├─.images
│ ├─builder
│ │ ├─extra_packages
│ │ ├─metas
│ │ ├─microros_utils
│ │ └─patchs
│ │ ├─foxy
│ │ └─humble
│ ├─docs
│ ├─examples
│ ├─include
│ ├─package
│ │ └─micro_ros_rtthread_package
│ └─src
这里我们只需要micro_ros_rtthread_package目录!!注意不要复制错了,将这个目录复制到.env-windowspackages目录下,之后micro_ros_rtthread_component目录就可以删掉了,同时我们修改.env-windowspackagesKconfig内容如下:
source "$PKGS_DIR/packages/Kconfig"
source "$PKGS_DIR/micro_ros_rtthread_package/Kconfig"
2.指定bsp
选择一份 bsp 进行 micro_ros 的开发,这里我使用的是 RTT 最近出的星火Spark
$ cd .rt-threadbspstm32stm32f407-rt-spark
去官网下载 gcc-arm-none-eabi-10-2020-q4-major-win32工具链,注意不用配置到环境变量中,以免发生冲突
修改 bsp 工程下的 rtconfig.py 文件,指定 gcc 工具链
回到.rt-threadbspstm32stm32f407-rt-spark目录下,打开 ConEmu 执行如下命令
$ pkgs --update
$ cd packages
此处克隆 micro_ros 配置仓库
$ git clone -b win_arm-gcc https://github.com/kurisaW/micro_ros_rtthread_component.git
生成CMakeLists.txt
$ cd ..
$ scons --target=cmake
此时我们在当前目录下就可以看见一个 CMakeLists.txt文件了,同时我们进入目录.rt-threadbspstm32stm32f407-rt-sparkpackagesmicro_ros_rtthread_componentbuilder,找到toolchain.cmake文件,参考前面生成的CMakeLists.txt文件修改toolchain.cmake
再次回到.rt-threadbspstm32stm32f407-rt-spark目录下,打开 ConEmu 勾选配置:
[ ] micro-ROS package for RTThread
[ ] Include examples
Distribution (Foxy) --->
Memory configuration --->
ROS node communication mode (serial) --->
其中在Memory configuration中的Publishers和Subscribers这两个参数值要求大于2,因为在 micro_ros 的示例工程:micro_ros_ping_pong要求至少两个发布者和两个订阅者,同时我们选择通信模式为 serial
此外,我们需要一个串口进行通信,根据板载情况勾选一个串口设备,并确保该串口成功创建,同时我们使用 vscode 打开文件packagesmicro_ros_rtthread_componentsrcrtt_serial_transport.c,搜索宏MICRO_ROS_SERIAL_NAME并修改为你新创建的串口设备名
3.编译准备工作
首先去官网安装如下工具:
python(大于python36)
cmake(大于v3.22)
打开windows powershell(管理员),安装如下工具:
1.scons工具
$ pip3 install scons
2.GNU make工具,可以参考该issue(https://github.com/kurisaW/micro_ros_rtthread_component/issues/5),这里我选择的是使用choco安装make
$ Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
$ choco install make
为了防止在下载过程中 GitHub 仓库拉取失败,可以下一个 Fastgithub 来加速 GitHub
4.开始编译
回到.rt-threadbspstm32stm32f407-rt-spark目录下,鼠标右键打开 windows powershell ,输入如下命令:
scons --build_microros
此时我们就可以看到 python 会自动安装依赖包并且开始下载 microros所需的依赖库,并且该依赖库的安装位置位于 C:UsersUSERAppDataLocalTempmicro下,这里的配置项主要位于packagesmicro_ros_rtthread_componentbuilderSConscript文件中,由于不同的工具链和平台所使用的一些标准C库函数有不同差异,所以目前我是基于 cortex-M4 适配了 micro_ros 库,在packagesmicro_ros_rtthread_componentbuildermicroros_utilsrepositories.py文件中更改了一些仓库分支为我修改的仓库分支,后续会以补丁文件的形式发布
编译完成后会使用 ar 将所有依赖的 micro_ros 库文件动态链接成 packagesmicro_ros_rtthread_componentbuilderlibmicroroslibmicroros.a文件,同时将C:Users20537AppDataLocalTempmicromcuinstallinclude目录复制到packagesmicro_ros_rtthread_componentbuilderlibmicrorosinclude目录下
编译完成后我们就得到了 rt-thread.elf 文件,可以使用 STM32CubeProgrammer 工具进行烧录到星火Spark上
5.WSL安装及 usbipd 支持
WSL安装:WSL的安装具体可以看网上怎么操作的,此处不再赘述
Docker安装:打开wsl终端,使用官网脚本一键安装即可
$ curl -fsSL https://test.docker.com -o test-docker.sh
$ sudo sh test-docker.sh
6.serial测试
相关命令:
windows powershell端
$ usbipd wsl list // 查看系统USB设备列表
$ usbipd wsl attach --hardware-id "usb-id" // 连接usb至wsl
wsl ubuntu20.04(注意:目前支持的microros版本:foxy支持的ubuntu版本为ubuntu20.04)
$ sudo docker run -it -v /dev:/dev --privileged microros/micro-ros-agent:foxy serial --dev /dev/ttyACM0 // 运行docker microros:foxy代理
$ ros2 topic list // 查看ros topic列表
$ ros2 topic echo /micro_ros_rtt_subscriber // 打印话题详情
$ ros2 topic pub /micro_ros_rtt_subscriber std_msgs/msg/Int32 data: 10 // 发布topic data值为10
7.udp4测试
准备工作
1.首先需要在linux本地 搭建好 ROS 环境
请注意:我们安装的ros版本为 foxy
2.搭建 micro-ros 构建环境
打开linux终端,按照如下步骤一步步走:
激活ros:foxy环境
$ source /opt/ros/foxy/setup.bash
创建工作区并拉取micro_ros_setup仓库
** mkdir /home/**user/microros_ws && cd /home/$user/microros_ws
$ git clone -b foxy https://github.com/micro-ROS/micro_ros_setup.git src/micro_ros_setup
更新rosdep
$ sudo apt update
$ export ROSDISTRO_INDEX_URL=https://mirrors.tuna.tsinghua.edu.cn/rosdistro/index-v4.yaml
$ rosdep update --include-eol-distros
$ rosdep install --from-paths src --ignore-src -y
$ sudo apt-get install python3-pip
colcon编译
$ colcon build
$ source install/local_setup.bash
创建一份固件工作区
$ ros2 run micro_ros_setup create_firmware_ws.sh host
构建固件
$ ros2 run micro_ros_setup build_firmware.sh
$ source install/local_setup.bash
创建microros代理
$ ros2 run micro_ros_setup create_agent_ws.sh
构建代理
$ ros2 run micro_ros_setup build_agent.sh
$ source install/local_setup.bash
完成上述工作后我们micro ros的代理环境就准备就绪了
关键代码
开启micro_ros 代理
ros2 run micro_ros_agent micro_ros_agent udp4 --port 9999
udp测试流程
几点说明
1.为什么编译不使用 ConEmu :因为 ConEmu 内部集成的是 python27 ,而 micro_ros 编译所需的 python 版本最低为 python36,建议使用 python38 及以上版本
2.如果是使用的串口方式通信,不推荐在虚拟机上运行docker microros 代理,虚拟机似乎会造成消息的多次转发,导致无法正常接收到数据,建议使用 windows wsl服务
3.如果是使用UDP通信的话,并且在wsl中运行 agent ,需要允许 WLS 的出入站规则,可以打开windows powershell ,并输入如下代码:
允许 WSL 入站规则,请打开 Windows PowerShell ,并输入如下命令
$ New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
允许 WSL 出站规则,请打开 Windows PowerShell ,并输入如下命令
$ New-NetFirewallRule -DisplayName "WSL" -Direction Outbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
4.如果使用udp通信不建议使用docker运行agent,docker不能直接外部访问IP,建议还是在linux本地搭建好 micro-ros代理环境
5.具体的实现细节在此处没有具体说明,如果是基于其他平台移植,并且想要一起学习的可以艾特我一起讨论,后面会考虑对多个架构进行支持适配
-
Cortex-M4
+关注
关注
6文章
89浏览量
46524 -
STM32F407
+关注
关注
15文章
187浏览量
29394 -
RT-Thread
+关注
关注
31文章
1277浏览量
39972 -
ROS
+关注
关注
1文章
276浏览量
16984 -
gcc编译器
+关注
关注
0文章
78浏览量
3373
发布评论请先 登录
相关推荐
评论