0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

快速上手micro ros在RT-Thread上

冬至子 ? 來(lái)源:kurisaW ? 作者:kurisaW ? 2023-10-26 16:13 ? 次閱讀

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

1.準(zhǔn)備工作
克隆GitHub:RT-Thread主倉(cāng):

$ 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
克隆下來(lái)的 env-windows 可以放在D盤(pán),同時(shí)雙擊打開(kāi) env.exe,待啟動(dòng)ConEmu終端后將其注冊(cè)到右鍵列表

1.jpg

克隆指定win_arm-gcc分支micro_ros_rtthread_component倉(cāng)庫(kù)

$ 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目錄?。∽⒁獠灰獜?fù)制錯(cuò)了,將這個(gè)目錄復(fù)制到.env-windowspackages目錄下,之后micro_ros_rtthread_component目錄就可以刪掉了,同時(shí)我們修改.env-windowspackagesKconfig內(nèi)容如下:

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

2.指定bsp
選擇一份 bsp 進(jìn)行 micro_ros 的開(kāi)發(fā),這里我使用的是 RTT 最近出的星火Spark

$ cd .rt-threadbspstm32stm32f407-rt-spark
去官網(wǎng)下載 gcc-arm-none-eabi-10-2020-q4-major-win32工具鏈,注意不用配置到環(huán)境變量中,以免發(fā)生沖突

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

1.jpg

回到.rt-threadbspstm32stm32f407-rt-spark目錄下,打開(kāi) ConEmu 執(zhí)行如下命令

$ pkgs --update
$ cd packages

此處克隆 micro_ros 配置倉(cāng)庫(kù)

$ git clone -b win_arm-gcc https://github.com/kurisaW/micro_ros_rtthread_component.git

生成CMakeLists.txt

$ cd ..
$ scons --target=cmake
此時(shí)我們?cè)诋?dāng)前目錄下就可以看見(jiàn)一個(gè) CMakeLists.txt文件了,同時(shí)我們進(jìn)入目錄.rt-threadbspstm32stm32f407-rt-sparkpackagesmicro_ros_rtthread_componentbuilder,找到toolchain.cmake文件,參考前面生成的CMakeLists.txt文件修改toolchain.cmake

1.jpg

再次回到.rt-threadbspstm32stm32f407-rt-spark目錄下,打開(kāi) ConEmu 勾選配置:

[ ] micro-ROS package for RTThread
[
] Include examples
Distribution (Foxy) --->
Memory configuration --->
ROS node communication mode (serial) --->
其中在Memory configuration中的Publishers和Subscribers這兩個(gè)參數(shù)值要求大于2,因?yàn)樵?micro_ros 的示例工程:micro_ros_ping_pong要求至少兩個(gè)發(fā)布者和兩個(gè)訂閱者,同時(shí)我們選擇通信模式為 serial

此外,我們需要一個(gè)串口進(jìn)行通信,根據(jù)板載情況勾選一個(gè)串口設(shè)備,并確保該串口成功創(chuàng)建,同時(shí)我們使用 vscode 打開(kāi)文件packagesmicro_ros_rtthread_componentsrcrtt_serial_transport.c,搜索宏MICRO_ROS_SERIAL_NAME并修改為你新創(chuàng)建的串口設(shè)備名

3.編譯準(zhǔn)備工作
首先去官網(wǎng)安裝如下工具:

python(大于python36)
cmake(大于v3.22)

打開(kāi)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

為了防止在下載過(guò)程中 GitHub 倉(cāng)庫(kù)拉取失敗,可以下一個(gè) Fastgithub 來(lái)加速 GitHub

4.開(kāi)始編譯
回到.rt-threadbspstm32stm32f407-rt-spark目錄下,鼠標(biāo)右鍵打開(kāi) windows powershell ,輸入如下命令:

scons --build_microros
此時(shí)我們就可以看到 python 會(huì)自動(dòng)安裝依賴(lài)包并且開(kāi)始下載 microros所需的依賴(lài)庫(kù),并且該依賴(lài)庫(kù)的安裝位置位于 C:UsersUSERAppDataLocalTempmicro下,這里的配置項(xiàng)主要位于packagesmicro_ros_rtthread_componentbuilderSConscript文件中,由于不同的工具鏈和平臺(tái)所使用的一些標(biāo)準(zhǔn)C庫(kù)函數(shù)有不同差異,所以目前我是基于 cortex-M4 適配了 micro_ros 庫(kù),在packagesmicro_ros_rtthread_componentbuildermicroros_utilsrepositories.py文件中更改了一些倉(cāng)庫(kù)分支為我修改的倉(cāng)庫(kù)分支,后續(xù)會(huì)以補(bǔ)丁文件的形式發(fā)布

1.jpg

編譯完成后會(huì)使用 ar 將所有依賴(lài)的 micro_ros 庫(kù)文件動(dòng)態(tài)鏈接成 packagesmicro_ros_rtthread_componentbuilderlibmicroroslibmicroros.a文件,同時(shí)將C:Users20537AppDataLocalTempmicromcuinstallinclude目錄復(fù)制到packagesmicro_ros_rtthread_componentbuilderlibmicrorosinclude目錄下

編譯完成后我們就得到了 rt-thread.elf 文件,可以使用 STM32CubeProgrammer 工具進(jìn)行燒錄到星火Spark上

5.WSL安裝及 usbipd 支持
WSL安裝:WSL的安裝具體可以看網(wǎng)上怎么操作的,此處不再贅述

Docker安裝:打開(kāi)wsl終端,使用官網(wǎng)腳本一鍵安裝即可

$ curl -fsSL https://test.docker.com -o test-docker.sh
$ sudo sh test-docker.sh

6.serial測(cè)試
相關(guān)命令:

windows powershell端

$ usbipd wsl list // 查看系統(tǒng)USB設(shè)備列表
$ 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 // 運(yùn)行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 // 發(fā)布topic data值為10

7.udp4測(cè)試
準(zhǔn)備工作
1.首先需要在linux本地 搭建好 ROS 環(huán)境

請(qǐng)注意:我們安裝的ros版本為 foxy

2.搭建 micro-ros 構(gòu)建環(huán)境

打開(kāi)linux終端,按照如下步驟一步步走:

激活ros:foxy環(huán)境

$ source /opt/ros/foxy/setup.bash

創(chuàng)建工作區(qū)并拉取micro_ros_setup倉(cāng)庫(kù)

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

創(chuàng)建一份固件工作區(qū)

$ ros2 run micro_ros_setup create_firmware_ws.sh host

構(gòu)建固件

$ ros2 run micro_ros_setup build_firmware.sh
$ source install/local_setup.bash

創(chuàng)建microros代理

$ ros2 run micro_ros_setup create_agent_ws.sh

構(gòu)建代理

$ ros2 run micro_ros_setup build_agent.sh
$ source install/local_setup.bash
完成上述工作后我們micro ros的代理環(huán)境就準(zhǔn)備就緒了

關(guān)鍵代碼

開(kāi)啟micro_ros 代理

ros2 run micro_ros_agent micro_ros_agent udp4 --port 9999
udp測(cè)試流程

幾點(diǎn)說(shuō)明
1.為什么編譯不使用 ConEmu :因?yàn)?ConEmu 內(nèi)部集成的是 python27 ,而 micro_ros 編譯所需的 python 版本最低為 python36,建議使用 python38 及以上版本

2.如果是使用的串口方式通信,不推薦在虛擬機(jī)上運(yùn)行docker microros 代理,虛擬機(jī)似乎會(huì)造成消息的多次轉(zhuǎn)發(fā),導(dǎo)致無(wú)法正常接收到數(shù)據(jù),建議使用 windows wsl服務(wù)

3.如果是使用UDP通信的話,并且在wsl中運(yùn)行 agent ,需要允許 WLS 的出入站規(guī)則,可以打開(kāi)windows powershell ,并輸入如下代碼:

允許 WSL 入站規(guī)則,請(qǐng)打開(kāi) Windows PowerShell ,并輸入如下命令

$ New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow

允許 WSL 出站規(guī)則,請(qǐng)打開(kāi) Windows PowerShell ,并輸入如下命令

$ New-NetFirewallRule -DisplayName "WSL" -Direction Outbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
4.如果使用udp通信不建議使用docker運(yùn)行agent,docker不能直接外部訪問(wèn)IP,建議還是在linux本地搭建好 micro-ros代理環(huán)境

5.具體的實(shí)現(xiàn)細(xì)節(jié)在此處沒(méi)有具體說(shuō)明,如果是基于其他平臺(tái)移植,并且想要一起學(xué)習(xí)的可以艾特我一起討論,后面會(huì)考慮對(duì)多個(gè)架構(gòu)進(jìn)行支持適配

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Cortex-M4
    +關(guān)注

    關(guān)注

    6

    文章

    89

    瀏覽量

    46443
  • STM32F407
    +關(guān)注

    關(guān)注

    15

    文章

    187

    瀏覽量

    29202
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1239

    瀏覽量

    39426
  • ROS
    ROS
    +關(guān)注

    關(guān)注

    1

    文章

    276

    瀏覽量

    16882
  • gcc編譯器
    +關(guān)注

    關(guān)注

    0

    文章

    78

    瀏覽量

    3297
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RT-Thread記錄(一、版本開(kāi)發(fā)環(huán)境及配合CubeMX)

    RT-Thread 學(xué)習(xí)記錄的第一篇文章,RT-Thread記錄(一、RT-Thread 版本、RT-Thread Studio開(kāi)發(fā)環(huán)境 及 配合CubeMX開(kāi)發(fā)
    的頭像 發(fā)表于 06-20 00:28 ?4922次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(一、版本開(kāi)發(fā)環(huán)境及配合CubeMX)

    RT-Thread如何使用串口或者無(wú)線和ROS連接

    這篇文檔主要介紹 RT-Thread 如何使用串口或者無(wú)線和 ROS 連接,會(huì)包含這么些內(nèi)容:第一部分:ROS 環(huán)境搭建第二部分:RT-Thread rosserial 軟件包第二部分
    發(fā)表于 12-28 07:02

    RT-Thread實(shí)時(shí)操作系統(tǒng)與ROS2是怎樣進(jìn)行通信的

    。RT-Thread 控制 Kobuki 機(jī)器人前面介紹了 ROS1/ROS2,也介紹了 rosserial (ROS1) 和
    發(fā)表于 04-01 11:38

    RT-Thread Studio 主要亮點(diǎn)功能

    RT-Thread Studio V1.1.0 快速上手體驗(yàn) RT-Thread Studio 主要包括工程創(chuàng)建和管理,代碼編輯,SDK管理器,RT
    的頭像 發(fā)表于 06-19 11:45 ?5623次閱讀

    機(jī)器人操作系統(tǒng) (RO2) 和 RT-Thread 通信

    本文由RT-Thread官方論壇用戶(hù)@wuhanstudio發(fā)布:[鏈接],未經(jīng)授權(quán)禁止轉(zhuǎn)發(fā)MicroROS on RT-Thread最近剛好總結(jié)了一下 ROS1 和 ROS2
    發(fā)表于 01-25 17:39 ?2次下載
    機(jī)器人操作系統(tǒng) (RO2) 和 <b class='flag-5'>RT-Thread</b> 通信

    RT-Thread Smart 上手指南

    RT-Thread Smart(簡(jiǎn)稱(chēng)rt-smart)是基于RT-Thread操作系統(tǒng)衍生的新分支,面向帶MMU,中高端應(yīng)用的芯片,例如ARM Cortex-A系列芯片,MIPS...
    發(fā)表于 01-25 20:09 ?12次下載
    <b class='flag-5'>RT-Thread</b> Smart <b class='flag-5'>上手</b>指南

    RT-Thread全球技術(shù)大會(huì):KconfigRT-Thread中的工作機(jī)制

    RT-Thread全球技術(shù)大會(huì):KconfigRT-Thread中的工作機(jī)制 ? ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 14:49 ?1406次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會(huì):Kconfig<b class='flag-5'>在</b><b class='flag-5'>RT-Thread</b>中的工作機(jī)制

    RT-Thread全球技術(shù)大會(huì):RT-Thread編寫(xiě)測(cè)試用例

    RT-Thread全球技術(shù)大會(huì):RT-Thread編寫(xiě)測(cè)試用例 ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 16:28 ?1363次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會(huì):<b class='flag-5'>在</b><b class='flag-5'>RT-Thread</b><b class='flag-5'>上</b>編寫(xiě)測(cè)試用例

    RT-Thread全球技術(shù)大會(huì):RT-Thread底層匯編及arm與riscv的差異

    開(kāi)發(fā)者秦韋忠,RT-Thread全球技術(shù)大會(huì)上,以RT-Thread底層匯編及arm與riscv的差異為主題進(jìn)行了詳細(xì)的教程說(shuō)明。
    的頭像 發(fā)表于 05-28 09:56 ?1548次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會(huì):<b class='flag-5'>RT-Thread</b>底層匯編及<b class='flag-5'>在</b>arm與riscv<b class='flag-5'>上</b>的差異

    RT-Thread文檔_RT-Thread 簡(jiǎn)介

    RT-Thread文檔_RT-Thread 簡(jiǎn)介
    發(fā)表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡(jiǎn)介

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

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南
    發(fā)表于 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 上手指南
    發(fā)表于 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 上手指南
    發(fā)表于 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 介紹與移植
    發(fā)表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    上海線下培訓(xùn):RT-Thread×先楫 HPM5300 for RT-Thread ,高性能 RISC-V 平臺(tái)開(kāi)發(fā)快速上手

    11月23日 RT-Thread 聯(lián)合先楫半導(dǎo)體將在上海舉行一場(chǎng)線下培訓(xùn)。 本次培訓(xùn)會(huì)將為參與者提供了解先楫半導(dǎo)體和RT-Thread兩家公司最新技術(shù)和創(chuàng)新解決方案的機(jī)會(huì)。參與者將深入了解先楫半導(dǎo)體
    的頭像 發(fā)表于 11-03 19:10 ?632次閱讀
    上海線下培訓(xùn):<b class='flag-5'>RT-Thread</b>×先楫  HPM5300 for <b class='flag-5'>RT-Thread</b> ,高性能 RISC-V 平臺(tái)開(kāi)發(fā)<b class='flag-5'>快速</b><b class='flag-5'>上手</b>