0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

快速上手micro ros在RT-Thread上

冬至子 来源:kurisaW 作者:kurisaW 2023-10-26 16:13 次阅读

快速上手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终端后将其注册到右键列表

1.jpg

克隆指定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 工具链

1.jpg

回到.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

1.jpg

再次回到.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文件中更改了一些仓库分支为我修改的仓库分支,后续会以补丁文件的形式发布

1.jpg

编译完成后会使用 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
    ROS
    +关注

    关注

    1

    文章

    276

    浏览量

    16984
  • gcc编译器
    +关注

    关注

    0

    文章

    78

    浏览量

    3373
收藏 人收藏

    评论

    相关推荐

    RT-Thread记录(一、版本开发环境及配合CubeMX)

    RT-Thread 学习记录的第一篇文章,RT-Thread记录(一、RT-Thread 版本、RT-Thread Studio开发环境 及 配合CubeMX开发
    的头像 发表于 06-20 00:28 5164次阅读
    <b class='flag-5'>RT-Thread</b>记录(一、版本开发环境及配合CubeMX)

    RT-Thread如何使用串口或者无线和ROS连接

    这篇文档主要介绍 RT-Thread 如何使用串口或者无线和 ROS 连接,会包含这么些内容:第一部分:ROS 环境搭建第二部分:RT-Thread rosserial 软件包第二部分
    发表于 12-28 07:02

    RT-Thread实时操作系统与ROS2是怎样进行通信的

    RT-Thread 控制 Kobuki 机器人前面介绍了 ROS1/ROS2,也介绍了 rosserial (ROS1) 和
    发表于 04-01 11:38

    RT-Thread Studio 主要亮点功能

    RT-Thread Studio V1.1.0 快速上手体验 RT-Thread Studio 主要包括工程创建和管理,代码编辑,SDK管理器,RT
    的头像 发表于 06-19 11:45 5845次阅读

    机器人操作系统 (RO2) 和 RT-Thread 通信

    本文由RT-Thread官方论坛用户@wuhanstudio发布:[链接],未经授权禁止转发MicroROS on RT-Thread最近刚好总结了一下 ROS1 和 ROS2
    发表于 01-25 17:39 2次下载
    机器人操作系统 (RO2) 和 <b class='flag-5'>RT-Thread</b> 通信

    RT-Thread Smart 上手指南

    RT-Thread Smart(简称rt-smart)是基于RT-Thread操作系统衍生的新分支,面向带MMU,中高端应用的芯片,例如ARM Cortex-A系列芯片,MIPS...
    发表于 01-25 20:09 13次下载
    <b class='flag-5'>RT-Thread</b> Smart <b class='flag-5'>上手</b>指南

    RT-Thread全球技术大会:KconfigRT-Thread中的工作机制

    RT-Thread全球技术大会:KconfigRT-Thread中的工作机制               审核编辑:彭静
    的头像 发表于 05-27 14:49 1520次阅读
    <b class='flag-5'>RT-Thread</b>全球技术大会:Kconfig<b class='flag-5'>在</b><b class='flag-5'>RT-Thread</b>中的工作机制

    RT-Thread全球技术大会:RT-Thread编写测试用例

    RT-Thread全球技术大会:RT-Thread编写测试用例           审核编辑:彭静
    的头像 发表于 05-27 16:28 1460次阅读
    <b class='flag-5'>RT-Thread</b>全球技术大会:<b class='flag-5'>在</b><b class='flag-5'>RT-Thread</b><b class='flag-5'>上</b>编写测试用例

    RT-Thread全球技术大会:RT-Thread底层汇编及arm与riscv的差异

    开发者秦韦忠,RT-Thread全球技术大会上,以RT-Thread底层汇编及arm与riscv的差异为主题进行了详细的教程说明。
    的头像 发表于 05-28 09:56 1613次阅读
    <b class='flag-5'>RT-Thread</b>全球技术大会:<b class='flag-5'>RT-Thread</b>底层汇编及<b class='flag-5'>在</b>arm与riscv<b class='flag-5'>上</b>的差异

    RT-Thread文档_RT-Thread 简介

    RT-Thread文档_RT-Thread 简介
    发表于 02-22 18:22 5次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> 简介

    RT-Thread文档_RT-Thread 潘多拉 STM32L475 上手指南

    RT-Thread文档_RT-Thread 潘多拉 STM32L475 上手指南
    发表于 02-22 18:23 9次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> 潘多拉 STM32L475 <b class='flag-5'>上手</b>指南

    RT-Thread文档_野火 I.MX RT1052上手指南

    RT-Thread文档_野火 I.MX RT1052 上手指南
    发表于 02-22 18:25 2次下载
    <b class='flag-5'>RT-Thread</b>文档_野火 I.MX <b class='flag-5'>RT</b>1052<b class='flag-5'>上手</b>指南

    RT-Thread文档_Nordic BSP 上手指南

    RT-Thread文档_Nordic BSP 上手指南
    发表于 02-22 18:26 7次下载
    <b class='flag-5'>RT-Thread</b>文档_Nordic BSP <b class='flag-5'>上手</b>指南

    RT-Thread文档_RT-Thread SMP 介绍与移植

    RT-Thread文档_RT-Thread SMP 介绍与移植
    发表于 02-22 18:31 9次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> SMP 介绍与移植

    上海线下培训:RT-Thread×先楫 HPM5300 for RT-Thread ,高性能 RISC-V 平台开发快速上手

    11月23日 RT-Thread 联合先楫半导体将在上海举行一场线下培训。 本次培训会将为参与者提供了解先楫半导体和RT-Thread两家公司最新技术和创新解决方案的机会。参与者将深入了解先楫半导体
    的头像 发表于 11-03 19:10 734次阅读
    上海线下培训:<b class='flag-5'>RT-Thread</b>×先楫  HPM5300 for <b class='flag-5'>RT-Thread</b> ,高性能 RISC-V 平台开发<b class='flag-5'>快速</b><b class='flag-5'>上手</b>