【micro ros】快速上手:在 RT-Thread上运行 micro ros

news2024/11/17 7:47:27

文章目录

  • 快速上手micro ros && RT-Thread(serial和udp方式)
    • 1.背景介绍
    • 2.工程准备工作
      • 2.1 克隆 RT-Thread主仓
      • 2.2 克隆 env-windows
    • 3.编译准备工作
      • 3.1 python & cmake安装
      • 3.2 scons工具安装
      • 3.3 GNU make安装
      • 3.4 Fastgithub安装
    • 4.工程配置
      • 4.1 指定工具链
      • 4.2 micro_ros 软件包配置
      • 4.3 指定Cmake编译工具链
      • 4.4 micro ros 在 ENV 中的配置
    • 5.开始编译
    • 6.WSL安装及 usbipd 支持
    • 7.serial测试
    • 8.udp4测试
      • 8.1 准备工作
      • 8.2 以 UDP 方式开启micro_ros 代理
      • 8.3 udp测试流程
    • 9.几点说明

快速上手micro ros && RT-Thread(serial和udp方式)

1.背景介绍

Micro-ROS(Micro Robot Operating System)是ROS 2(Robot Operating System 2)的嵌入式版本,专门设计用于在嵌入式系统中运行,以支持机器人和嵌入式设备的实时控制和通信。Micro-ROS的目标是将ROS 2的强大功能扩展到资源受限的嵌入式平台,例如微控制器和嵌入式系统。

Micro-ROS的出现使得嵌入式系统和机器人应用能够更紧密地与ROS 2生态系统集成,从而实现更高级别的机器人自动化和控制。它为开发人员提供了一种在嵌入式环境中构建复杂机器人系统的方法,无论是在无人机、自动导航车辆还是其他嵌入式控制应用方面。

  • micro ros分层模块架构

以下是Micro-ROS的一些关键特点和概念:

  1. 嵌入式系统支持: Micro-ROS旨在在嵌入式系统上运行,包括微控制器和其他资源受限的硬件。它提供了一个轻量级的ROS 2堆栈,以便将ROS 2功能集成到这些系统中。

  2. 实时性和硬件抽象: Micro-ROS支持实时性需求,使其适用于对实时性要求较高的应用程序。此外,它提供了硬件抽象层(HAL),允许在不同嵌入式平台上使用相同的ROS 2代码。

  3. 通信和中间件: Micro-ROS使用ROS 2通信机制,因此可以无缝地与其他ROS 2系统通信。它支持多种通信方式,包括串口、UDP、以太网等。

  4. 适用于机器人和自动化: Micro-ROS的主要应用领域包括机器人和自动化系统。通过将ROS 2的能力引入嵌入式系统,开发人员可以更轻松地构建具有传感器、执行器和通信需求的机器人应用。

  5. 可扩展性: Micro-ROS可以根据应用程序的需求进行扩展和定制。开发人员可以选择要包括的ROS 2功能和模块,以适应其特定应用场景。

  6. 开源: Micro-ROS是开源项目,遵循ROS 2的开源精神。这意味着开发人员可以自由地访问、使用和贡献到该项目。

本文将教你如何快速上手使用如何在 RT-Thread上运行 micro-ros,使用包括串口(serial)和UDP两种通信方式与主机 ROS 通信。

2.工程准备工作

2.1 克隆 RT-Thread主仓

$ git clone https://github.com/RT-Thread/rt-thread.git

2.2 克隆 env-windows

$ git clone --recursive --depth 1 https://github.com/RT-Thread/env-windows.git

克隆下来的 env-windows 可以放在D盘,同时双击打开 env.exe,待启动ConEmu终端后将其注册到鼠标右键快捷方式

screenshot_image.png

3.编译准备工作

3.1 python & cmake安装

首先去官网安装如下工具:

  • python(大于python36):https://www.python.org/downloads/windows/
  • cmake(大于v3.22):https://cmake.org/files/

3.2 scons工具安装

打开 windows powershell ,使用 python 安装 scons

$ pip3 install scons

3.3 GNU make安装

GNU make 的安装可以参考该 issue 的三种方式

  • https://github.com/kurisaW/micro_ros_rtthread_component/issues/5

这里我选择的是使用choco安装make,打开windows powershell(管理员):

$ Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
$ choco install make

3.4 Fastgithub安装

为了防止在后续下载 micro ros 过程中 GitHub 仓库拉取失败,可以下一个 Fastgithub 来加速 GitHub

  • https://github.com/dotnetcore/FastGithub/releases/download/2.1.4/fastgithub_win-x64.zip

4.工程配置

选择一份 bsp 进行 micro_ros 的开发,这里我使用的是 RTT 最近出的星火Spark

$ cd .\rt-thread\bsp\stm32\stm32f407-rt-spark

4.1 指定工具链

去官网下载 gcc-arm-none-eabi-10-2020-q4-major-win32工具链,注意不用配置到环境变量中,以免发生冲突

  • gcc-arm-none-eabi-10-2020-q4-major-win32.exe

修改 bsp 工程下的 rtconfig.py 文件,指定 gcc 工具链

screenshot_image.png

4.2 micro_ros 软件包配置

回到.\rt-thread\bsp\stm32\stm32f407-rt-spark目录下,打开 ConEmu 执行如下命令生成 packages 目录

$ pkgs --update
$ cd packages

克隆 micro_ros 配置仓库

$ 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-windows\packages目录下,同时修改..\env-windows\packages\Kconfig内容如下:

source "$PKGS_DIR/packages/Kconfig"
source "$PKGS_DIR/micro_ros_rtthread_package/Kconfig"

4.3 指定Cmake编译工具链

想要在 RT-Thread 中使用 micro_ros ,需要先通过 Cmake 编译得到一份 libmicroros.a静态链接库文件,下面是 micro_ros Cmake 的相关配置:

回到目录:..\rt-thread\bsp\stm32\stm32f407-rt-spark

使用 ENV 生成 CMakeLists.txt 文件,里面包含了工程的配置编译选项:

$ scons --target=cmake

此时我们在当前目录下就可以看见一个 CMakeLists.txt文件了,同时我们进入目录.\rt-thread\bsp\stm32\stm32f407-rt-spark\packages\micro_ros_rtthread_component\builder,找到toolchain.cmake文件,参考前面生成的CMakeLists.txt文件修改toolchain.cmake

screenshot_image.png

4.4 micro ros 在 ENV 中的配置

再次回到..\rt-thread\bsp\stm32\stm32f407-rt-spark目录下,打开 ENV 勾选配置:

[*] micro-ROS package for RTThread                                    
                [*]   Include examples                                                       
                      Distribution (Foxy)  --->                                                   
                      Memory configuration  --->                                                     
                      ROS node communication mode (serial)  --->

其中在Memory configuration中的PublishersSubscribers这两个参数值要求大于2,因为在 micro_ros 的示例工程:micro_ros_ping_pong要求至少两个发布者和两个订阅者,同时我们选择通信模式为 serial

此外,我们需要一个串口进行通信,根据板载情况勾选一个串口设备,并确保该串口成功创建!!

同时我们使用 vscode 打开文件packages\micro_ros_rtthread_component\src\rtt_serial_transport.c,搜索宏MICRO_ROS_SERIAL_NAME并修改为你新创建的串口设备名。

5.开始编译

回到.\rt-thread\bsp\stm32\stm32f407-rt-spark目录下,鼠标右键打开 windows powershell ,输入如下命令:

scons --build_microros

此时我们就可以看到 python 会自动安装依赖包并且开始下载 microros所需的依赖库,并且该依赖库的安装位置位于 C:\Users\$user\AppData\Local\Temp\micro

这里的配置项主要位于packages\micro_ros_rtthread_component\builder\SConscript文件中,由于不同的工具链和平台所使用的一些标准C库函数有些不同差异,所以目前是基于 cortex-M4 适配了 micro_ros 库,在packages\micro_ros_rtthread_component\builder\microros_utils\repositories.py文件中更改了一些仓库分支为我修改的仓库分支,后续会以补丁文件的形式发布

screenshot_image.png

编译完成后会使用 ar 将所有依赖的 micro_ros 库文件动态链接成 packages\micro_ros_rtthread_component\builder\libmicroros\libmicroros.a文件,同时将C:\Users\20537\AppData\Local\Temp\micro\mcu\install\include目录复制到packages\micro_ros_rtthread_component\builder\libmicroros\include目录下

编译完成后我们就得到了 rt-thread.elf 文件,可以使用 STM32CubeProgrammer 工具进行烧录到星火Spark上

附:这里说下 GCC-AR 是什么:GCC-AR 是 gcc配套的库管理工具,它可以创建,修改和提取静态库(.a文件)。 通过使用 GCC-AR,可以将多个相关的对象文件(.o文件)打包成一个静态库,以方便在后续的编译过程中重复使用这些对象文件。

screenshot_image.png

6.WSL安装及 usbipd 支持

  • WSL安装:WSL的安装具体可以看网上怎么操作的,此处不再赘述

  • Docker安装:打开 wsl 终端,使用官网脚本一键安装即可

$ curl -fsSL https://test.docker.com -o test-docker.sh
$ sudo sh test-docker.sh
  • usbipd支持

请参考这篇文章完成 usbipd 的支持:https://club.rt-thread.org/ask/article/8671e03210f950a7.html

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

演示视频:[点击此处精准空降: microros_rtt_serial]

8.udp4测试

8.1 准备工作

首先需要在linux本地 搭建好 ROS 环境,micro-ros环境的安装参考**[鱼香大佬的网站]**

注意:我们安装的ros版本为 ros:foxy

继续搭建 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的代理环境就准备就绪了

8.2 以 UDP 方式开启micro_ros 代理

$ ros2 run micro_ros_agent micro_ros_agent udp4 --port 9999

8.3 udp测试流程

这里就不讲详细的配置了,具体过程请看下方链接:

演示视频:[点击此处精准空降: microros_rtt_serial]

9.几点说明

  • 为什么编译不使用 ConEmu :因为 ConEmu 内部集成的是 python27 ,而 micro_ros 编译所需的 python 版本最低为 python36,建议使用 python38 及以上版本

  • 如果是使用的串口方式通信,不推荐在虚拟机上运行docker microros 代理,虚拟机似乎会造成消息的多次转发,导致无法正常接收到数据,建议使用 windows wsl服务

  • 如果是使用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
  • 如果使用udp通信不建议使用docker运行agent,docker不能直接外部访问IP,建议还是在linux本地搭建好 micro-ros代理环境

  • 具体的实现细节在此处没有具体说明,如果是基于其他平台移植,并且想要一起学习的可以艾特我一起讨论,后面会考虑对多个架构进行支持适配

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1139059.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[SQL开发笔记]LIKE操作符:在 WHERE 子句中搜索列中的指定模式

一、功能描述: LIKE操作符:用于在 WHERE 子句中搜索列中的指定模式。 二、LIKE操作符语法详解: LIKE 语法 SELECT column1, column2,…FROM table_nameWHERE column LIKE pattern; 参数说明: (1)colum…

全球生物气候产品2.5m和30s分辨率

简介 生物气候是指生物和气候相互作用的结果,包括植物和动物对气候的影响,以及气候对生物的影响。生物气候研究的是生物、气候、土地和水等自然要素之间相互作用的过程,旨在探讨它们是如何互动并导致生态系统的变化的。生物气候对于理解全球…

C#,数值计算——分类与推理,基座向量机(SVM,Support Vector Machines)的计算方法与源程序

把 Support Vector Machines 翻译成 支持向量机 是书呆子翻译。基座向量机 不好吗。 1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Support Vector Machines /// </summary> public class Svm { priv…

上海亚商投顾:沪指震荡反弹 华为汽车、卫星通信板块再度爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一、市场情绪 三大指数早盘低开低走&#xff0c;深成指、创业板指一度跌超1%&#xff0c;午后集体拉升翻红。 华为汽车概念…

KMS在腾讯云的微服务实践助力其降本50%

背景介绍 KMS 是一家日本的游戏公司&#xff0c;主要经营游戏业务、数字漫画业务、广告业务、云解决方案业务等&#xff0c;出品了多款在日本畅销的漫画风游戏&#xff0c;同时有网络漫画专业厂牌&#xff0c;以内容创作为目标&#xff0c;拥有原创 IP 创作、游戏开发等多元化发…

WSL2Linux 子系统(六)

WSL 连接USB WSL (Windows Subsystem for Linux) 是一种在 Windows 操作系统上运行 Linux 应用程序的兼容层。它的主要作用是提供了一个类似于虚拟机的环境&#xff0c;使得在 Windows 上开发和运行基于 Linux 的应用变得更加方便。然而&#xff0c;WSL 目前还不支持直接通过 …

spring6-提前编译:AOT

提前编译&#xff1a;AOT 1、AOT概述1.1、JIT与AOT的区别1.2、Graalvm1.3、Native Image 2、演示Native Image构建过程2.1、GraalVM安装&#xff08;1&#xff09;下载GraalVM&#xff08;2&#xff09;配置环境变量&#xff08;3&#xff09;安装native-image插件 2.2、安装C的…

【Unity程序技巧】事件管理器

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

TIA博途_Profinet通信故障诊断及常见错误解决方法汇总

TIA博途_Profinet通信故障诊断及常见错误解决方法汇总 1. 在线诊断报硬件组件的用户数据错误,设备组态不支持 解决方法: (1)检查模块终端盖板; (2)检查组态模块与实际组装模块顺序型号是否一致。 2. 网络视图,设备视图界面显示黑色感叹号 解决方法: PLC转离线,下载硬…

疫情物资管理系统-基于SSM实现

包括-源码参考文档 下载地址: https://juzhendongli.store/commodity/details/5

Spark UI中Shuffle dataSize 和shuffle bytes written 指标区别

背景 本文基于Spark 3.1.1 目前在做一些知识回顾的时候&#xff0c;发现了一些很有意思的事情&#xff0c;就是Spark UI中ShuffleExchangeExec 的dataSize和shuffle bytes written指标是不一样的&#xff0c; 那么在AQE阶段的时候&#xff0c;是以哪个指标来作为每个Task分区大…

【计网 CDN】计算机网络 CDN(Content Delivery Network)分布式网络架构详解:中科大郑烇老师笔记 (八)

目录 0 引言1 为什么需要分布式的网络架构&#xff1f;2 视频流化服务2.1 多媒体&#xff1a;视频2.2 存储视频的流化&#xff08;Streaming&#xff09;服务2.3 流媒体传输协议&#xff1a;DASH2.4 面临挑战&#xff1a;服务器如何向上百万用户同时提供视频流化内容&#xff1…

buuctf_练[GYCTF2020]FlaskApp

[GYCTF2020]FlaskApp 文章目录 [GYCTF2020]FlaskApp常用绕过方法掌握知识解题思路解题一 -- 计算pin码解题二 -- 拼接绕过 执行命令 关键paylaod 常用绕过方法 ssti详解与例题以及绕过payload大全_ssti绕过空格_HoAd’s blog的博客-CSDN博客 CTF 对SSTI的一些总结 - FreeBuf网…

Java中会出现内存泄漏吗

这是一个老生常谈的面试题&#xff0c;本文就系统讲解一下吧 虽然Java有GC垃圾⾃动回收功能&#xff0c;但并不是说Java程序就不会内存泄漏。如果一个对象没有地⽅会使⽤到&#xff0c;但是却仍然有引用指向他&#xff0c;那么垃圾回收器就无法回收他&#xff0c;这种情况就属于…

重复性管理--抽象的重要性(下)

接着 上一篇的谈论, 继续谈论抽象在重复性管理中的重要作用. 好的抽象与糟糕的抽象? 通过前面的一些例子, 你可能形成了一个印象: 所谓抽象很多时候就是把一些代码封装到一个方法中. 不过事实上并不是这么简单的. 抽象的结果确实很多时候产生了一个方法, 但不是说我把一堆代…

05 网络和防火墙等其他

网络和其他 ifconfig : 主机ip地址查询

从过去到未来:回顾DDR技术的演进和未来趋势

DDR技术作为内存的核心&#xff0c;其性能的飞速发展直接推动着计算机的计算能力。 本文将简明扼要地介绍DDR技术的发展历程。 一、SDR时代 20世纪90年代&#xff0c;Intel公司推出了首款同步动态随机存储器SDR SDRAM。其采用时钟同步接口&#xff0c;时钟频率典型为66MHz或8…

【洛谷算法题】P2433-小学数学 N 合一【入门2分支结构】

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P2433-小学数学 N 合一【入门2分支结构】&#x1f30f;题目描述&#x1f319;问题…

MySQL数据库基本操作1

文章目录 主要内容一.DDL1.创建表代码如下&#xff08;示例&#xff09;: 2.创建表的类型3.其他操作4.修改表结构格式代码如下&#xff08;示例&#xff09;: 二.DML1.数据插入代码如下&#xff08;示例&#xff09;: 2.数据修改代码如下&#xff08;示例&#xff09;: 3.数据删…

力扣第406题 根据身高重建队列 c++ 贪心思维

题目 406. 根据身高重建队列 中等 相关标签 贪心 树状数组 线段树 数组 排序 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &am…