# ROS Container Communication > [name=楊育陞(bbnoir83@gmail.com)] ## Introduction 本篇處理以下通訊情況: 1. 同裝置,兩個以上ROS2 container通訊 2. 跨裝置,兩個以上ROS2 container通訊 3. 同裝置,ROS2 container和ROS1通訊 4. 跨裝置,ROS2 container和ROS1通訊 ## Scenario 1 & 2 > 同裝置/跨裝置,兩個以上ROS2 container通訊 因為ROS2使用DDS架構,只要ROS2 nodes在同網域下就能直接互相通訊,而docker在執行container時預設是使用和host隔離的網域,所以我們要另外在執行container時加入tag: ```bash --net=host \ --pid=host ``` container就會使用和host相連的network,網路內的ROS2 node就能互相通訊 ### Test 使用以下指令測試: ```bash ros2 run demo_nodes_cpp listener ros2 run demo_nodes_cpp talker ``` 在以下狀況可以順利通訊: #### case 1 + device 1: 敞篷桌機 -> container: orca_docker + device 2: Orin -> container: isaac_ros (內建連host,不用額外加指令) (在同wifi底下) #### case 2 + device 1: 敞篷桌機 -> ros2 (沒container包裝) + device 2: Orin -> container: isaac_ros (內建連host,不用額外加指令) (在同wifi底下) #### case 3 + device 1: 敞篷桌機 -> container: orca_docker + device 1: 敞篷桌機 -> container: orsf/ros #### case 4 (待測) + device 1: Rpi -> container: + device 2: Orin -> container: (有線連接) ## Scenario 3 > 同裝置,ROS2 container和ROS1通訊 使用ROS2的[ros1_bridge](https://github.com/ros2/ros1_bridge)這個package,建立ROS1和ROS2之間的通訊。 以下為使用[ros:eloquent-ros1-bridge](https://hub.docker.com/layers/library/ros/eloquent-ros1-bridge/images/sha256-0040f128fdbdee7f904ec9db6f5ae93a4ca9ec1e756c5dabb33c7766fa4e6a2c?context=explore)這個image建立rpi上的bridge container, repo: https://github.com/NCTU-AUV/orca_ros_bridge.git (因為rpi架構為armv7,ros2版本選擇eloquent,其他架構請參考[docker hub](https://hub.docker.com/_/ros/tags)) ### Usage 1. build container ```bash git clone https://github.com/NCTU-AUV/orca_ros_bridge.git cd orca_ros_bridge ./scripts/build.sh ``` 2. excute bridge ``` ./scripts/run ``` ## Scenario 4 > 跨裝置,ROS2 container和ROS1通訊 結合scenario 2 和 3,就能實現跨裝置的ROS2 container和ROS1通訊 https://youtu.be/iKkuG8wfYi4 ### Reference https://husarnet.com/blog/ros2-docker https://azole.medium.com/webconf2023-docker-%E5%85%A5%E9%96%80-101-fae89170553a https://docs.docker.com/network/network-tutorial-standalone/ https://answers.ros.org/question/358453/ros2-docker-multiple-hosts/ https://community.rti.com/kb/how-use-rti-connext-dds-communicate-across-docker-containers-using-host-driver https://hub.docker.com/_/ros/ https://github.com/ros2/ros1_bridge/blob/master/README.md https://github.com/ros2/ros1_bridge/blob/master/doc/index.rst
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up