Skip to content

Docker ROS 原生开发容器

这条路线不使用 rosbridge。你的代码运行在 ROS1 容器里,直接作为 ROS 节点连接当前 ROS master,使用 rospy / roscpp、自定义 msg/srv、rostopicrosservice 等原生 ROS 工具。

完整路线原文见:Docker ROS 开发路线原文

适合场景

  • 编写 Python/C++ ROS 节点。
  • 使用自定义消息类型,例如 zj_robotupperlimbhandnavigation 等。
  • 使用 rostopic echorosservice inforosmsg show 等 ROS CLI。
  • 长期维护一个开发容器或工作空间。

当前可复用镜像

推荐基于现有 demos 镜像:

text
10.51.33.201:30002/navi_project/demos:v1.0.2

当前已确认该镜像内包含 ROS Noetic、/opt/ros/noetic/setup.bash/navi_ws/devel/setup.bash 以及常见消息类型包。

不要直接复用现有 naviai_demos 容器做长期开发;建议新建独立开发容器。

ROS 网络配置

在 Orin 本机运行开发容器:

bash
ROS_MASTER_URI=http://192.168.217.1:11311
ROS_IP=192.168.217.100

在局域网其他服务器运行开发容器:

bash
ROS_MASTER_URI=http://192.168.217.1:11311
ROS_IP=<这台服务器在机器人网络中可被回连的IP>

注意:

  • ROS1 不是单向访问 master 就够了,其他节点还要能回连你的节点 XMLRPC/TCPROS 端口。
  • 推荐使用 network_mode: host
  • ROS_IP 不能写 127.0.0.1
  • 当前镜像是 arm64 平台;如果其他服务器是 x86,通常优先走 rosbridge,或自行准备 x86 ROS Noetic + 消息类型镜像。

必须 source 的环境

进入容器后至少 source:

bash
source /opt/ros/noetic/setup.bash
source /navi_ws/devel/setup.bash

如果你有自己的 catkin 工作空间,还要追加:

bash
source /workspace/ros_client_ws/devel/setup.bash

推荐顺序:

bash
source /opt/ros/noetic/setup.bash
source /navi_ws/devel/setup.bash
source /workspace/ros_client_ws/devel/setup.bash

临时容器启动

适合一次性调试:

bash
docker run -it --rm \
  --name naviai_ros_client_tmp \
  --network host \
  --privileged \
  --runtime nvidia \
  --entrypoint /bin/bash \
  -e ROS_MASTER_URI=http://192.168.217.1:11311 \
  -e ROS_IP=192.168.217.100 \
  -v /dev:/dev \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -v /home/naviai/.Xauthority:/root/.Xauthority \
  -v /home/naviai/navi_project/containers/shared:/shared \
  -v /home/naviai/Desktop/Project:/workspace \
  -w /workspace \
  10.51.33.201:30002/navi_project/demos:v1.0.2

进入后:

bash
source /opt/ros/noetic/setup.bash
source /navi_ws/devel/setup.bash
rostopic list

常驻开发容器

常驻容器建议单独写 compose 文件,使用独立容器名,例如 naviai_ros_client。核心配置点:

配置建议
image10.51.33.201:30002/navi_project/demos:v1.0.2
networkhost
runtimenvidia
restartunless-stopped
entrypoint使用 /bin/bash -lc,避免复用原 naviai_demos 的 sshd 入口
command可用 tail -f /dev/null 保持开发容器常驻
envROS_MASTER_URI=http://192.168.217.1:11311ROS_IP=192.168.217.100

工作空间

推荐目录:

text
/home/naviai/Desktop/Project/ros_client_ws

容器内路径:

text
/workspace/ros_client_ws

创建工作空间:

bash
mkdir -p /workspace/ros_client_ws/src
cd /workspace/ros_client_ws
catkin_make
source devel/setup.bash

创建 Python ROS 包示例:

bash
cd /workspace/ros_client_ws/src
catkin_create_pkg naviai_client rospy std_msgs sensor_msgs zj_robot upperlimb hand
cd /workspace/ros_client_ws
catkin_make
source devel/setup.bash

只读验证

进入容器后先检查:

bash
echo $ROS_MASTER_URI
echo $ROS_IP
rostopic list
rosnode list

确认消息类型:

bash
rostopic type /zj_humanoid/robot/robot_state
rosmsg show zj_robot/RobotState

优缺点

说明
优点原生 ROS;自定义消息/服务支持完整;适合写 rospy / roscpp 节点
缺点需要 ROS 网络双向可达;镜像架构/私有仓库受限;比 rosbridge 更容易误操作实机
推荐用途ROS 节点开发、消息/服务调试、长期机器人应用开发