Appearance
Docker ROS 原生开发容器
这条路线不使用 rosbridge。你的代码运行在 ROS1 容器里,直接作为 ROS 节点连接当前 ROS master,使用 rospy / roscpp、自定义 msg/srv、rostopic、rosservice 等原生 ROS 工具。
完整路线原文见:Docker ROS 开发路线原文。
适合场景
- 编写 Python/C++ ROS 节点。
- 使用自定义消息类型,例如
zj_robot、upperlimb、hand、navigation等。 - 使用
rostopic echo、rosservice info、rosmsg 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。核心配置点:
| 配置 | 建议 |
|---|---|
| image | 10.51.33.201:30002/navi_project/demos:v1.0.2 |
| network | host |
| runtime | nvidia |
| restart | unless-stopped |
| entrypoint | 使用 /bin/bash -lc,避免复用原 naviai_demos 的 sshd 入口 |
| command | 可用 tail -f /dev/null 保持开发容器常驻 |
| env | ROS_MASTER_URI=http://192.168.217.1:11311、ROS_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 节点开发、消息/服务调试、长期机器人应用开发 |