2018做網(wǎng)站賺錢不天津seo顧問
ROS2替換中間件為Cyclone_DDS
- 1.一些介紹:)
- 2.不同DDS的RMW實現(xiàn)
- 3.默認的FastDDS替換為Cyclone DDS
- i.安裝依賴
- ii.編譯 cyclone-dds
- 4.配置網(wǎng)絡
1.一些介紹:)
上一篇我們探討了ros1和ros2編寫launch的區(qū)別 【ROS2】launch啟動文件編寫
ros1和ros2還有一個很重要的區(qū)別就是底層通信框架,ros1采用的是xmlRPC, ros2采用的是DDS。
DDS 是一種端到端中間件,提供與 ROS 系統(tǒng)相關的功能,例如分布式發(fā)現(xiàn)(不像 ROS 1 中那樣集中式)和對傳輸?shù)牟煌胺召|(zhì)量”選項的控制。也就是去中心化,ros2使用DDS后不再依賴roscore。DDS的實現(xiàn)又有很多種例如: RTI 的Connext DDS、eProsima 的Fast DDS、Eclipse 的Cyclone DDS或 GurumNetworks 的GurumDDS。ubuntu20.04 Foxy 默認的是FastDDS無需額外安裝即可使用。
2.不同DDS的RMW實現(xiàn)
為了將 DDS/RTPS 實現(xiàn)與 ROS 2 結(jié)合使用,需要一個橋梁(又稱接口或rmw簡稱rmw)包,該包使用 DDS 或 RTPS 實現(xiàn)的 API 和工具來實現(xiàn)抽象的 ROS 中間件接口。
名稱 | 許可證 | RMW實現(xiàn) | 維護狀態(tài) |
---|---|---|---|
eProsima Fast DDS | Apache 2 | rmw_fastrtps_cpp | Full support. Default RMW. Packaged with binary releases. |
Eclipse Cyclone DDS | Eclipse Public License v2.0 | rmw_cyclonedds_cpp | Full support. Packaged with binary releases. |
RTI Connext | commercial,research | rmw_connext_cpp | Full support. Support included in binaries, but Connext installed separately. |
GurumNetworks GurumDDS | commercial | rmw_gurumdds_cpp | Community support. Support included in binaries, but GurumDDS installed separately. |
大多情況下,使用不同 RMW 實現(xiàn)的節(jié)點能夠進行通信,但這并非在所有情況下都是如此。
Fast DDS <–> Connext
WString 使用Fast DDS 發(fā)布后無法被 macOS 上的 Connext 正確接收
Connext <–> Cyclone DDS
不支持發(fā)布/訂閱通信WString
Connext Dynamic <–> Connext Dynamic
不支持 C 服務
3.默認的FastDDS替換為Cyclone DDS
i.安裝依賴
sudo apt install ros-foxy-rmw-cyclonedds-cpp
sudo apt install ros-foxy-rosidl-generator-dds-idl
ii.編譯 cyclone-dds
編譯 cyclonedds 前請確保在啟動終端時沒有 source ros2 相關的環(huán)境變量,否則會導致 cyclonedds 編譯報錯。如果安裝 ROS2 時在~/.bashrc中添加了 " source /opt/ros/foxy/setup.bash ",需要修改 ~/.bashrc 文件將其刪除:
sudo vi ~/.bashrc
# source /opt/ros/foxy/setup.bash
開始編譯cyclone-dds
cd ~/ros2_workspace/cyclonedds_ws/src
#克隆cyclonedds倉庫
git clone https://github.com/ros2/rmw_cyclonedds -b foxy
git clone https://github.com/eclipse-cyclonedds/cyclonedds -b releases/0.10.x
cd ..
colcon build --packages-select cyclonedds #編譯cyclonedds
編譯完成后重新打開ros2的環(huán)境變量并執(zhí)行source
4.配置網(wǎng)絡
使用 ifconfig 查看網(wǎng)絡信息,確認ros組網(wǎng)的以太網(wǎng)網(wǎng)卡。(例如如圖中的enp0s31f6,以實際為準)
打開~/.bashrc編輯
#!/bin/bash
echo "setup ros2 environment"
source /opt/ros/foxy/setup.bash
source $HOME/ros2_workspace/cyclonedds_ws/install/setup.bash
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
export CYCLONEDDS_URI='<CycloneDDS><Domain><General><Interfaces><NetworkInterface name="enp0s31f6" priority="default" multicast="default" /></Interfaces></General></Domain></CycloneDDS>'
保存后
source ~/.bashrc
測試連接效果:
ros2 topic list
如果出現(xiàn)了你發(fā)布的那些話題,那么恭喜你成功咯 :)
當然了如果你沒發(fā)現(xiàn)目標topic,也可能是domain ID 的問題,默認是0,倆邊通信這個值需要一致,我們后面再著重探討下domain ID的配置。
作者:費碼程序猿
歡迎技術交流:QQ:255895056
轉(zhuǎn)載請注明出處,如有不當歡迎指正