树莓派5-docker里的ros常用命令
树莓派5安装docker和ros
#安装docKer
curl -sSL https://get.docker.com | shsudo usermod -aG docker $USER
#拉取ros镜像
docker pull ros:noetic-ros-base后面是整理的一些常见的命令,顺序不分先后
1.查看当前容器 ID / 名称(宿主机终端执行)
docker ps # 找到容器名(如 a607dc4c3aa1)或 NAMES
2.停止容器
docker stop a607dc4c3aa1 # 替换为你的容器 ID/名称
3.首次进入刚装好的 noetic-ros-base docker镜像的时候,需要先执行下面的命令进行设置:
docker run -it --rm \--device=/dev/ttyAMA0:/dev/ttyAMA0 \ # 映射串口(树莓派常用串口)--device=/dev/video0:/dev/video0 \ # 映射摄像头(若连接)--privileged \ # 特权模式(树莓派访问硬件必需)--network=host \ # 共享主机网络(ROS 节点通信更方便,树莓派推荐)ros:noetic-ros-base如果出现类似:
Run 'docker run --help' for more information -bash: --device=/dev/video0:/dev/video0: 没有那个文件或目录 -bash: --privileged: 未找到命令 -bash: --network=host: 未找到命令 -bash: ros:noetic-ros-base: 未找到命令这样的错误:
报错原因是 Shell 命令格式错误—— 树莓派的 Bash 终端不支持行尾反斜杠(\)后面带空格 / 注释,导致命令被拆分成多个无效指令(比如把 --device 当成独立命令执行)
docker run -it --rm \--device=/dev/ttyAMA0:/dev/ttyAMA0 \--device=/dev/video0:/dev/video0 \--privileged \--network=host \ros:noetic-ros-base4.验证串口映射
ls /dev/ttyAMA0
无任何报错,则表示串口映射成功
5.权限问题
若后续操作串口提示 “Permission denied”,在容器内执行:
chmod 666 /dev/ttyAMA0 # 临时授权(重启容器失效)
# 或永久授权(推荐)
usermod -aG dialout root
newgrp dialout6.加载ros环境变量,ros:noetic-ros-base 镜像默认未自动加载 ROS 环境,进入容器后需手动 source,否则无法使用 roscore、rosrun 等命令
# 临时加载(当前终端生效)
source /opt/ros/noetic/setup.bash
# 永久加载(后续进入容器自动生效,推荐)
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc7.验证是否成功进入并配置 ROS
新打开一个docker命令行窗口,执行下面的命令:
roscore看到类似下面截图中的信息,表示启动成功

8.查看当前ros节点状态,再打开一个新的窗口执行下面的命令:
rosnode list # 列出所有运行的节点(当前应只有 /rosout)
rosnode info /rosout # 查看 /rosout 节点详情

9.验证环境,运行一个节点示例
新打开一个窗口,执行下面命令,启动一个简单的发布者节点(发布字符串消息)
rosrun rospy_tutorials talker
如果看到类似下面截图中输出的类似,表示启动成功:

接着再开一个命令窗口,执行下面的命令,启动订阅节点,用于接收消息
rosrun rospy_tutorials listener看到类似下图中的输出类似,则表示启动成功并且接收到了消息:

备注: 如果能看到 talker 发布消息、listener 接收消息,说明 ROS 通信正常。
10.查看话题消息
rostopic list # 列出所有话题(talker 会发布 /chatter 话题)
rostopic echo /chatter # 实时打印 /chatter 话题的消息内容
rostopic info /chatter # 查看话题的消息类型
11.注意事项:
终端隔离:roscore 启动后,当前终端不能关闭(关闭会终止核心服务),所有其他操作需在新的终端中执行(若用 Docker 容器,需重新 docker exec -it 容器ID bash 进入新终端)若其他终端提示 roscore: command not found,需先加载 ROS 环境
source /opt/ros/noetic/setup.bash可将该命令添加到 ~/.bashrc 中,避免每次手动加载:
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc如果报类似的错误:root@58d3b6b7a25b:/# rosrun rospy_tutorials talker
[rospack] Error: package 'rospy_tutorials' not found
报错原因是 rospy_tutorials 功能包未安装——ROS Noetic 默认不会预装所有示例包,需要手动安装对应的功能包。
apt-get update && apt-get install -y ros-noetic-rospy-tutorials ros-noetic-roscpp-tutorials
