文章目錄
① 準備
有篇文章要學習下:https://index.ros.org/doc/ros2/Concepts/DDS-and-ROS-middleware-implementations/
RWM支持情況
② 多個RMW實現
當前活動發行版的ROS 2二進制發行版內置了對一些RMW實現的內置支持(Fast RTPS,RTI Connext Pro,ADLINK OpenSplice和Eclipse Cyclone DDS
)。默認值爲Fast RTPS
,它無需任何其他安裝步驟即可工作,因爲我們將其與二進制軟件包一起分發。自Eloquent以來,Cyclone DDS
還與二進制包一起分發。
可以通過安裝其他軟件包來啓用OpenSplice
或Connext
之類的其他軟件包,而無需重建任何內容或替換任何現有軟件包。也可以通過源碼安裝RMW。
在許多情況下,您會發現使用不同RMW實現的節點能夠通信,但是並非在所有情況下都是如此。支持的供應商之間的通信配置列表即將發佈。
③ 默認RMW實現
默認是Fast RTPS
,如果沒安裝就安裝已安裝的RMW的首字字母排序,靠前的那個就是。比如 rmw_opensplice_cpp
和rmw_connext_cpp
兩個中,默認就會選 rmw_connext_cpp
④ 指定RMW實現
要使用指定,就必須提前安裝好要用的RMW,參考https://index.ros.org/doc/ros2/Installation/DDS-Implementations/
可以通過環境變量RMW_IMPLEMENTATION
來指定RMW
命令這個樣子
RMW_IMPLEMENTATION=rmw_connext_cpp ros2 run demo_nodes_cpp talker
# Run in another terminal
RMW_IMPLEMENTATION=rmw_connext_cpp ros2 run demo_nodes_py listener
⑤ 把RMW實現添加到工作空間
如果想指定特定的RMW在工作空間,可以通過使用--cmake-force-configure
參數來實現,也可以在編譯之前重新設置默認的RMW通過RMW_IMPLEMENTATION
⑥ 故障排除
確保使用特定的RMW實現
如果將RMW_IMPLEMENTATION
環境變量設置爲未安裝支持的RMW實現,則如果僅安裝一個實現,則會看到與以下內容類似的錯誤消息:
Expected RMW implementation identifier of 'rmw_connext_cpp' but instead found 'rmw_fastrtps_cpp', exiting with 102.
如果您支持安裝多個RMW實施,並且請求使用未安裝的實施,則將看到類似以下內容的內容:
Error getting RMW implementation identifier / RMW implementation not installed (expected identifier of 'rmw_connext_cpp'), exiting with 1.
如果發生這種情況,請仔細檢查您的ROS 2安裝是否包括對您在RMW_IMPLEMENTATION
環境變量中指定的RMW實現的支持。
如果要在RMW實現之間切換,請驗證ROS 2守護進程未與先前的RMW實現一起運行,以避免節點和命令行工具(例如)之間出現任何問題。例如,如果您運行:ros2 node
RMW_IMPLEMENTATION=rmw_connext_cpp ros2 run demo_nodes_cpp talker
和
ros2 node list
它將生成一個具有fast RTPS
實現的守護程序:
要想解決這個問題,結束守護進程,然後用正確的RMW實現啓動工具
ros2 daemon stop
OSX上的RTI Connext:由於共享內存內核設置不足而失敗
我也沒MAC,看看就行
如果在OSX上運行RTI Connext
時收到類似以下的錯誤消息:
[D0062|ENABLE]DDS_DomainParticipantPresentation_reserve_participant_index_entryports:!enable reserve participant index
[D0062|ENABLE]DDS_DomainParticipant_reserve_participant_index_entryports:Unusable shared memory transport. For a more in- depth explanation of the possible problem and solution, please visit https://community.rti.com/kb/osx510.
此錯誤是由操作系統允許的共享內存段的數量或大小不足引起的。結果,DomainParticipant
無法分配足夠的資源並無法計算出導致錯誤的參與者索引。
您可以臨時或永久增加計算機的共享內存資源。
要臨時增加設置,您可以以root用戶身份運行以下命令:
/usr/sbin/sysctl -w kern.sysv.shmmax=419430400
/usr/sbin/sysctl -w kern.sysv.shmmin=1
/usr/sbin/sysctl -w kern.sysv.shmmni=128
/usr/sbin/sysctl -w kern.sysv.shmseg=1024
/usr/sbin/sysctl -w kern.sysv.shmall=262144
要永久增加設置,您將需要編輯或創建文件/etc/sysctl.conf
。創建或編輯此文件將需要root權限。添加到現有etc/sysctl.conf
文件中或/etc/sysctl.conf
使用以下幾行創建:
kern.sysv.shmmax=419430400
kern.sysv.shmmin=1
kern.sysv.shmmni=128
kern.sysv.shmseg=1024
kern.sysv.shmall=262144
修改此文件後,您將需要重新引導計算機以使更改生效。
⑦ 總結
主要介紹了RMW的使用和排障操作