Skip to content

Docker 中运行节点

在 Docker 中运行 ROS 2 节点

在单个 Docker 容器中运行两个节点

Section titled “在单个 Docker 容器中运行两个节点”

拉取标签为 {DISTRO}-desktop 的 ROS Docker 镜像:

Terminal window
$ docker pull osrf/ros:{DISTRO}-desktop

以交互模式运行该镜像:

Terminal window
$ docker run -it osrf/ros:{DISTRO}-desktop

此时,ros2 命令行工具是你的得力助手。

Terminal window
$ ros2 --help

例如,列出所有已安装的包:

Terminal window
$ ros2 pkg list
(输出为包列表)

例如,列出所有可执行文件:

Terminal window
$ ros2 pkg executables
(输出为 `<package> <executable>` 格式的列表)

在容器中运行 demo_nodes_cpp 包中的一个最小示例——两个 C++ 节点(1 个话题订阅者 listener,1 个话题发布者 talker):

Terminal window
$ ros2 run demo_nodes_cpp listener &
$ ros2 run demo_nodes_cpp talker

在两个独立的 Docker 容器中运行两个节点

Section titled “在两个独立的 Docker 容器中运行两个节点”

打开一个终端,以交互模式运行镜像,并通过 ros2 run 启动一个话题发布者(demo_nodes_cpp 包中的 talker 可执行文件):

Terminal window
$ docker run -it --rm osrf/ros:{DISTRO}-desktop ros2 run demo_nodes_cpp talker

再打开第二个终端,以同样的方式启动一个话题订阅者(demo_nodes_cpp 包中的 listener 可执行文件):

Terminal window
$ docker run -it --rm osrf/ros:{DISTRO}-desktop ros2 run demo_nodes_cpp listener

除了使用命令行,你也可以编写一个 docker-compose.yml 文件(以下为 compose 文件格式版本 2 的最小配置):

version: '2'
services:
talker:
image: osrf/ros:{DISTRO}-desktop
command: ros2 run demo_nodes_cpp talker
listener:
image: osrf/ros:{DISTRO}-desktop
command: ros2 run demo_nodes_cpp listener
depends_on:
- talker

在该文件所在目录下执行 docker compose up 即可启动容器。 你可以使用 Ctrl+C 关闭容器。