背景
?完全消除开发环境/运行时对应用程序的依赖非常困难。
ROS某些应用程序依赖于特定的版本或软件包。 (例如,旋律依赖)
使用docker,您可以消除上述情况,并且应用程序提供商不必担心系统。
?开发环境和运行时对于每个应用程序都是免费的,并且使用docker易于理解界面。
在这里尝试
(*)ROS rosmaster将在主机上运行。所有其他ROS / ROS2节点都与docker一起运行。
环境
主机Linux:Ubuntu16.04.5 LTS
Docker:18.09.0,构建4d60db4
主机Linux ROS版本:动态
准备Docker映像
省略了主机Linux ROS和docker本身的安装设置。 (如果您使用Google,则可以)
1 2 3 4 5 6 7 8 9 10 11 | docker pull ros:kinetic docker pull ros:melodic docker pull osrf/ros2:bouncy-desktop docker pull osrf/ros2:bouncy-ros1-bridge docker images REPOSITORY TAG IMAGE ID CREATED SIZE ros melodic 9425ec5f7a7f 3 days ago 1.27GB osrf/ros2 bouncy-ros1-bridge 495f9879df9e 2 weeks ago 1.2GB osrf/ros2 bouncy-desktop 3e9aa775362d 2 weeks ago 2.41GB ros kinetic 6f91828bbf93 4 weeks ago 1.19GB |
1. ROS节点多个Docker通信
[概述]
[步骤]
1-1。在主机Linux
上启动roscore
1 2 3 4 5 | # docker networkを利用するので以下の設定でroscoreを起動する。 export ROS_MASTER_URI=http://172.17.0.1:11311 export ROS_IP=172.17.0.1 roscore ... |
1-2。罗斯:从Kinecit docker
开始发布者
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # docker ros:kinetic start docker run -it 6f91828bbf93 # net-tools install (IP addressを念の為確認するため) apt update apt install net-tools ifconfig # ROS IP setting export ROS_MASTER_URI=http://172.17.0.1:11311 export ROS_IP=172.17.0.2 # topic publish start rostopic pub -r 10 /chatter std_msgs/String "this is ros:kinetic" |
1-3。ROS:用旋律docker
启动子程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # docker ros:melodic start docker run -it 9425ec5f7a7f # net-tools install (IP addressを念の為確認するため) apt update apt install net-tools ifconfig # ROS IP setting export ROS_MASTER_URI=http://172.17.0.1:11311 export ROS_IP=172.17.0.3 # topic publish start root@c489bf255877:/# rostopic echo /chatter data: "this is ros:kinetic" ... |
(当然)我能够确认ROS节点之间可以进行Pub / Sub通信。
2. ROS 2节点多个Docker通信
[概述]
2-1。ros2:充气桌面通过docker
启动发布者
1 2 3 4 5 6 7 | # docker ros2:bouncy-desktop start docker run -it 3e9aa775362d # topic publish start ros2 topic pub /chatter std_msgs/String "data: this is ros2:bouncy-desktop" publisher: beginning loop publishing #1: std_msgs.msg.String(data='this is ros2:bouncy-desktop') |
2-2。ros2:弹性桌面通过docker
启动订户
1 2 3 4 5 6 | # docker ros2:bouncy-desktop start docker run -it 3e9aa775362d # topic subscriber start ros2 topic echo /chatter std_msgs/String data: this is ros2:bouncy-desktop |
在ROS2节点上可以在docker之间进行通信。
3. ROS / ROS2节点多个Docker通信
[概述]
3-1。在主机Linux
上启动roscore
1 2 3 4 5 | # docker networkを利用するので以下の設定でroscoreを起動する。 export ROS_MASTER_URI=http://172.17.0.1:11311 export ROS_IP=172.17.0.1 roscore ... |
3-2。ROS:使用旋律docker
启动发布者
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # docker ros:melodic start docker run -it 9425ec5f7a7f # net-tools install (IP addressを念の為確認するため) apt update apt install net-tools ifconfig # ROS IP setting export ROS_MASTER_URI=http://172.17.0.1:11311 export ROS_IP=172.17.0.2 # topic publish start rostopic pub /chatter std_msgs/String "this is ros:melodic" |
3-3。docker ros2:bouncy-ros1-bridge start
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # docker ros2:bouncy-ros1-bridge start docker run -it 495f9879df9e # net-tools install (IP addressを念の為確認するため) apt update apt install net-tools ifconfig # ROS IP setting export ROS_MASTER_URI=http://172.17.0.1:11311 export ROS_IP=172.17.0.5 # ROS/ROS2 bridge start ros2 run ros1_bridge dynamic_bridge /chatter std_msgs/String created 1to2 bridge for topic '/chatter' with ROS 1 type 'std_msgs/String' and ROS 2 type 'std_msgs/String' |
3-4。ros2:以有弹性的桌面docker
启动订阅者
1 2 3 4 5 6 | # docker ros2:bouncy-desktop start docker run -it 3e9aa775362d # topic subscriber start ros2 topic echo /chatter std_msgs/String data: this is ros:melodic |
我能够使用ROS桥确认docker之间的ROS / ROS2通信。
使用
,可以使用docker轻松完成ROS分布式开发。