ROS多个Docker通信


背景

?完全消除开发环境/运行时对应用程序的依赖非常困难。
ROS某些应用程序依赖于特定的版本或软件包。 (例如,旋律依赖)
使用docker,您可以消除上述情况,并且应用程序提供商不必担心系统。
?开发环境和运行时对于每个应用程序都是免费的,并且使用docker易于理解界面。

在这里尝试

  • 使用多个泊坞窗启动ROS节点,并检查是否可以进行通信。
  • 使用多个泊坞窗启动ROS2节点,并检查是否可以进行通信。
  • 使用多个泊坞窗启动ROS / ROS2节点,并检查是否可以使用ros1_bridge在ROS / ROS2之间进行通信。
    (*)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通信

    [概述]
    image.png

    [步骤]
    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通信

    [概述]
    image.png

    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通信

    [概述]
    image.png

    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分布式开发。