[ros2學習]-進階 - 使用多個ros2中間件實現

① 準備

有篇文章要學習下: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還與二進制包一起分發。

可以通過安裝其他軟件包來啓用OpenSpliceConnext之類的其他軟件包,而無需重建任何內容或替換任何現有軟件包。也可以通過源碼安裝RMW。

在許多情況下,您會發現使用不同RMW實現的節點能夠通信,但是並非在所有情況下都是如此。支持的供應商之間的通信配置列表即將發佈。

③ 默認RMW實現

默認是Fast RTPS,如果沒安裝就安裝已安裝的RMW的首字字母排序,靠前的那個就是。比如 rmw_opensplice_cpprmw_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的使用和排障操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章