ROS机器人开发常用命令速查

移动机器人开发中反复用到的命令,按类别整理成速查表。涵盖系统排查、Docker、 Git/SVN、ROS 基础命令、rosbag 录制过滤,以及 TF 与可视化调试。

平时调机器人,命令散落在各处笔记里,用的时候总要翻半天。这里按使用场景归了类, 方便直接检索。环境基于 Ubuntu 20.04 + ROS Noetic。

一、系统与硬件信息

1
2
3
4
5
6
7
8
9
10
uname -a                # 内核 / 操作系统 / CPU 信息
cat /etc/issue # 操作系统版本
cat /proc/version # 含 GCC 版本信息
lsb_release -a # 发行版信息
hostname # 计算机名

lspci -tv # 所有 PCI 设备
lsusb -tv # 所有 USB 设备
lsmod # 已加载的内核模块
env # 环境变量

CPU 相关的几条值得单独记,排查算力瓶颈时常用:

1
2
3
4
5
6
cat /proc/cpuinfo | grep "physical id" | sort | uniq    # 几颗物理 CPU
cat /proc/cpuinfo | grep "cpu cores" | uniq # 每颗物理 CPU 的核心数
cat /proc/cpuinfo | grep "processor" | wc -l # 逻辑 CPU 总数

# 是否启用超线程:比较 cpu cores 与 siblings,后者是前者两倍即为开启
cat /proc/cpuinfo | grep -e "cpu cores" -e "siblings" | sort | uniq

二、资源占用与网络排查

1
2
3
4
5
6
7
8
free -m                 # 内存与交换区使用量
df -h # 各分区使用情况
du -sh <目录名> # 指定目录大小
uptime # 运行时间、用户数、负载
cat /proc/loadavg # 系统负载
mount | column -t # 挂载分区状态
fdisk -l # 所有分区
swapon -s # 所有交换分区
1
2
3
4
5
ifconfig                # 所有网络接口属性
route -n # 路由表
netstat -lntp # 所有监听端口
netstat -antp # 所有已建立的连接
iptables -L # 防火墙设置

排查端口被占用时 netstat -lntp 最直接,能同时看到端口和占用它的进程。多机 ROS 通信连不上,先看这里。

三、用户、进程与计划任务

1
2
3
4
5
6
7
8
9
10
w                       # 活动用户
id <用户名> # 指定用户信息
last # 用户登录日志
cut -d: -f1 /etc/passwd # 系统所有用户
cut -d: -f1 /etc/group # 系统所有组
crontab -l # 当前用户的计划任务

ps -ef # 所有进程
top # 实时进程状态
htop # top 的增强版,需单独安装

四、系统配置与环境

新机器初始化时的几件事。改主机名

1
2
sudo vim /etc/hostname
sudo vim /etc/hosts # 两个文件都要改,否则 sudo 会变慢

改用户名(涉及多个文件,改错会登不进系统,操作前先确认有 root 可用):

1
2
3
4
5
6
7
8
9
10
11
12
13
# 进入命令行模式,避免图形界面占用该用户
Ctrl+Alt+F1

sudo vim /etc/passwd
sudo vim /etc/shadow
sudo vim /etc/group
sudo vim /etc/sudoers
mv /home/olduser /home/newuser

# vim 内批量替换
:%s/olduser/newuser/g

shutdown -r now

基础环境

1
2
3
4
5
6
7
8
9
10
11
# ROS 一键安装
wget http://fishros.com/install -O fishros && . fishros

# 常用工具
sudo apt-get install terminator htop net-tools ssh

# 系统时间同步(机器人长期离线后时间会漂,影响 tf 时间戳)
sudo apt-get install ntpdate
sudo ntpdate time.nist.gov
sudo date --set="2026-08-26 11:07:00" # 无网络时手动设置
sudo hwclock --systohc # 写入硬件时钟

多版本 OpenCV 共存,编译时指定独立安装路径,避免污染系统默认版本:

1
2
3
4
5
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv346 ..
make -j8
sudo make install
sudo /bin/bash -c 'echo "/usr/local/opencv346/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig

conda 环境

1
2
conda create --name myenv python==3.8
pip install -r requirements.txt -i https://mirror.baidu.com/pypi/simple

打包与开机自启

1
2
3
4
tar -cvf workspace_20260826.tar my_ws    # 仅打包不压缩
tar -xvf workspace_20260826.tar # 解包

gnome-session-properties # 图形化配置开机自启

五、Git 与 SVN

1
2
git branch -a           # 查看全部分支(含远程)
git remote -v # 当前分支的远端仓库地址

六、Docker

服务管理

1
2
3
4
5
6
7
8
9
systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl status docker
systemctl enable docker # 开机启动

docker info # 概要信息
docker --help # 总体帮助
docker <具体命令> --help # 单条命令帮助

镜像

1
2
3
4
docker images                       # 本地所有镜像
docker rmi -f <镜像ID> # 删除单个
docker rmi -f <ID1> <ID2> # 删除多个
docker rmi -f $(docker images -qa) # 删除全部

docker images 输出的四列含义:REPOSITORY 仓库源、TAG 版本号、 IMAGE ID 镜像 ID、SIZE 大小。

七、ROS 基础命令

工作空间与编译

1
2
3
4
5
catkin_create_pkg my_pkg roscpp rosmsg rospy std_msgs   # 创建功能包

catkin_make # 编译全部
catkin_make -DCATKIN_WHITELIST_PACKAGES="pkg1" # 只编译指定包
catkin_make -DCATKIN_WHITELIST_PACKAGES="" # 恢复编译全部

只编译单个包这条在大工作空间里很省时间,但用完记得清空白名单 —— 忘了会导致 后面改其他包怎么编都不生效,这个坑很容易踩。

节点与话题

1
2
3
4
5
6
7
8
9
10
11
12
roscore                     # 启动 ROS master
rosrun <pkg> <node> # 运行单个节点
roslaunch <pkg> <file> # 启动一组节点

rosnode list # 活动节点
rosnode info <node> # 节点信息
rosnode ping <node> # 测试节点连通性

rostopic list # 所有活跃话题
rostopic echo <topic> # 打印话题消息
rostopic pub <topic> ... # 发布消息到话题
rostopic hz <topic> # 话题发布频率

rostopic hz 是排查传感器问题的第一站 —— 雷达或相机掉帧、IMU 频率不稳,都能在 这里最快发现。

服务、消息与参数

1
2
3
4
5
6
7
8
9
10
11
12
rosservice list             # 可用服务
rosservice call <srv> ... # 调用服务
rosservice type <srv> # 服务类型
rosservice args <srv> # 服务参数

rosmsg list # 消息类型列表
rosmsg show <type> # 消息结构
rossrv show <type> # 服务结构

rosparam list # 参数服务器上的所有参数
rosparam get <param> # 获取参数值
rosparam set <param> <val> # 设置参数值

命令行调用带复杂结构的服务时,YAML 要按层级写:

1
2
3
4
5
6
rosservice call /my_service "header:
seq: 0
stamp: {secs: 0, nsecs: 0}
frame_id: ''
flag: 1
id: 47"

八、rosbag 录制、过滤与回放

录制指定话题:

1
rosbag record -O output.bag /scan /imu/data_raw /odom /tf /tf_static

过滤是我用得最多的一条。原始包动辄几个 G,回放和分析都慢,先按话题裁一遍:

1
2
3
rosbag filter input.bag output_filtered.bag \
"topic == '/imu/data_raw' or topic == '/scan' or topic == '/odom' \
or topic == '/tf_static'"

过滤 SLAM 数据时有个实用技巧 —— 排除算法自己发布的 tf,只保留传感器原始 数据,这样重新跑建图时不会被上一次的结果干扰:

1
2
3
4
rosbag filter input.bag output_filtered.bag \
"topic == '/imu/data_raw' or topic == '/scan' or topic == '/odom' \
or topic == '/tf_static' \
or (topic == '/tf' and not m.transforms[0].header.frame_id in ['carto_map', 'map'])"

m 是当前消息对象,可以直接访问其字段,所以过滤条件能写得很细。

回放与查看

1
2
rqt_bag output.bag                  # 图形化浏览包内容
rosrun plotjuggler plotjuggler # 曲线分析,拖拽话题即可绘图

九、可视化与 TF 调试

1
2
3
4
5
6
7
rqt                                 # 插件容器,下面几个也可从中打开
rqt_graph # 节点与话题的连接关系
rqt_console # 节点日志的显示与过滤
rqt_plot # 话题数据实时曲线

rosrun tf view_frames # 生成 TF 树 PDF
rosrun rqt_tf_tree rqt_tf_tree # 交互式查看 TF 树

坐标系报错时先 rqt_tf_tree,能一眼看出树是断的还是有多个根。rqt_graph 则用来 确认节点是不是真的连上了 —— 话题名拼错导致"发了但没人收",在图里非常明显。

十、CUDA 与显卡环境核查

装完驱动和 CUDA 后的验证顺序:

1
2
3
4
5
6
lspci | grep -i nvidia          # 确认识别到显卡
nvidia-smi # 驱动版本与显存占用
nvcc -V # CUDA 版本

# cuDNN 版本(8.x 起版本号移到了 cudnn_version.h)
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

三者版本必须匹配:驱动版本要不低于 CUDA 要求的最低版本,cuDNN 要对应 CUDA 大 版本。nvidia-smi 显示的 CUDA 版本是驱动支持的最高版本,不是实际安装的版 本 —— 实际版本以 nvcc -V 为准,这两个不一致是正常的。

十一、相机标定

1
2
3
4
5
6
7
sudo apt install ros-noetic-camera-calibration       # 安装标定包

roslaunch <camera_pkg> <camera>.launch # 启动相机驱动

rosrun camera_calibration cameracalibrator.py \
--size 8x6 --square 0.024 \
image:=/camera/color/image_raw camera:=/camera

--size 是棋盘格内角点数量(不是方格数),--square 是单个方格边长,单位 米。这两个参数填错标定结果会整体偏掉,且不容易看出来。


ROS机器人开发常用命令速查
https://ethanyliang.github.io/2026/08/26/ROS机器人开发常用命令速查/
作者
EthanYLiang
发布于
2026年8月26日
更新于
2026年9月2日
许可协议