移动机器人开发中反复用到的命令,按类别整理成速查表。涵盖系统排查、Docker、
Git/SVN、ROS 基础命令、rosbag 录制过滤,以及 TF 与可视化调试。
平时调机器人,命令散落在各处笔记里,用的时候总要翻半天。这里按使用场景归了类,
方便直接检索。环境基于 Ubuntu 20.04 + ROS Noetic。
一、系统与硬件信息
1 2 3 4 5 6 7 8 9 10 uname -a cat /etc/issue cat /proc/version lsb_release -a hostname lspci -tv lsusb -tv lsmod env
CPU 相关的几条值得单独记,排查算力瓶颈时常用:
1 2 3 4 5 6 cat /proc/cpuinfo | grep "physical id" | sort | uniq cat /proc/cpuinfo | grep "cpu cores" | uniq cat /proc/cpuinfo | grep "processor" | wc -l 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
四、系统配置与环境
新机器初始化时的几件事。改主机名 :
1 2 sudo vim /etc/hostnamesudo vim /etc/hosts
改用户名 (涉及多个文件,改错会登不进系统,操作前先确认有 root 可用):
1 2 3 4 5 6 7 8 9 10 11 12 13 Ctrl+Alt+F1sudo vim /etc/passwdsudo vim /etc/shadowsudo vim /etc/groupsudo vim /etc/sudoersmv /home/olduser /home/newuser :%s/olduser/newuser/g shutdown -r now
基础环境 :
1 2 3 4 5 6 7 8 9 10 11 wget http://fishros.com/install -O fishros && . fishrossudo apt-get install terminator htop net-tools sshsudo apt-get install ntpdatesudo ntpdate time.nist.govsudo 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 -j8sudo make installsudo /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 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 rosrun rqt_tf_tree rqt_tf_tree
坐标系报错时先 rqt_tf_tree,能一眼看出树是断的还是有多个根。rqt_graph 则用来
确认节点是不是真的连上了 —— 话题名拼错导致"发了但没人收",在图里非常明显。
十、CUDA 与显卡环境核查
装完驱动和 CUDA 后的验证顺序:
1 2 3 4 5 6 lspci | grep -i nvidia nvidia-smi nvcc -V 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 是单个方格边长,单位
米。这两个参数填错标定结果会整体偏掉,且不容易看出来。