快速上手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文章
94瀏覽量
46585 -
STM32F407
+關注
關注
15文章
188瀏覽量
29590 -
RT-Thread
+關注
關注
31文章
1305瀏覽量
40307 -
ROS
+關注
關注
1文章
280瀏覽量
17054 -
gcc編譯器
+關注
關注
0文章
78瀏覽量
3414
發布評論請先 登錄
相關推薦
評論