ESC
输入关键词搜索文章标题和内容

robot_linux_cmd_cheatsheet_2026-06-12

机器人Linux开发命令速查手册:从环境搭建到ROS2部署全覆盖

导读:SSH连板卡调驱动、colcon编译ROS2节点、Docker隔离仿真环境、git管理算法代码——机器人开发从底层驱动到上层部署,每个环节都绕不开终端。本手册覆盖Linux基础、Git版本控制、Vim快速编辑、Docker容器化、ROS2全流程五大模块,附思维导图总览、场景速查表和故障排查决策树,从嵌入式调参到多机协作一册搞定。

命令全景图

mindmap root((机器人Linux<br/>开发命令)) Linux基础 文件目录 ls cd mkdir cp mv rm 查看搜索 cat less tail -f grep find 权限管理 chmod chown 系统进程 free ps top kill 网络 ip addr ping ssh scp 压缩解压 tar zip 管道重定向 | > >> Git版本控制 配置 git config 仓库 git init git clone 提交 git add git commit 分支 git branch git checkout git merge 远程 git push git pull 回退 git reset git stash Vim编辑器 模式切换 i ESC : 光标移动 hjkl gg G 编辑 yy dd u 保存退出 :wq :q! Docker容器 镜像 docker pull docker build docker images 容器 docker run docker exec docker ps docker stop GPU nvidia-smi --gpus all 编排 docker compose ROS2机器人 环境 source setup.bash ROS_DOMAIN_ID 编译 colcon build ros2 pkg create 通信 topic service action 调试 ros2 bag rviz2 rqt_graph ros2 doctor

1. Linux 基础命令

mindmap root((Linux<br/>基础命令)) 文件目录 ls -la pwd cd ~ mkdir -p touch cp -r mv rm -rf 查看搜索 cat less tail -f head -n grep -rn grep -i find which whereis 权限管理 chmod +x chmod 755 chown 系统进程 free -h df -h ps aux htop kill -9 dmesg uname -r uptime 网络 ip addr ping nmcli curl wget ssh scp 压缩解压 tar -zcvf tar -zxvf zip unzip 管道重定向 | > >> tee

1.1 文件目录

命令 用途 示例
ls -la 查看目录(含隐藏文件+权限) ls -la /dev/ttyUSB*
pwd 显示当前路径
cd ~ && cd - 回家目录,再切回上一个
mkdir -p 递归创建多级目录 mkdir -p src/robot/include
touch 创建空文件 touch main.cpp
cp -r 递归复制目录 cp -r src/ backup/
mv 移动或重命名 mv old_name new_name
rm -rf 删除目录(慎用,先ls确认路径) rm -rf build/ install/ log/

1.2 文件查看与搜索

命令 用途 示例
cat 查看全部内容 cat /proc/cpuinfo
less 分页查看大文件(q退出) less /var/log/syslog
tail -f 实时跟踪日志 tail -f /var/log/syslog
head -n N 查看前N行 head -n 20 build.log
nl 带行号查看 nl CMakeLists.txt
grep -rn 递归搜索+行号 grep -rn "error" src/
grep -i 忽略大小写搜索 grep -i "warning" build.log
find 按文件名查找 find . -name "*.launch.py"
which 确认命令路径 which ros2 && which colcon
whereis 查找命令及man路径 whereis gcc

1.3 权限管理

命令 用途 示例
chmod +x 添加可执行权限 chmod +x deploy.sh
chmod 755 设置标准目录权限 chmod 755 ~/ros2_ws/
chown 改文件/设备归属 sudo chown $USER:$USER /dev/ttyUSB0

嵌入式调试常用:串口设备默认属root/dialout组,把自己加入dialout组:sudo usermod -aG dialout $USER

1.4 系统与进程

命令 用途 示例
free -h 查看内存用量
df -h 查看磁盘用量 df -h /home
ps aux \| grep 查找进程 ps aux \| grep ros
top / htop 实时进程监控
kill -9 PID 强制结束进程 kill -9 12345
dmesg \| tail 查看内核日志(插拔设备必用) dmesg \| tail -20
uname -r 查看内核版本
lsb_release -a 查看Ubuntu发行版
uptime 系统运行时长+负载

1.5 网络

命令 用途 示例
ip addr show 查看本机IP
ping 测试连通性 ping 192.168.170.128
nmcli NetworkManager管理 nmcli device wifi connect "SSID" password "pwd"
curl -I 测试HTTP服务是否在线 curl -I http://localhost:11311
wget 下载文件 wget https://example.com/file.tar.gz
ssh 远程连接 ssh hello@192.168.170.128
scp 远程拷贝 scp build/*.deb user@robot:/tmp/

1.6 压缩解压

命令 用途
tar -zcvf archive.tar.gz dir/ 打包压缩
tar -zxvf archive.tar.gz -C /tmp/ 解压到指定目录
zip -r archive.zip dir/ 压缩为zip
unzip archive.zip -d /tmp/ 解压zip

1.7 管道与重定向

符号 用途 示例
\| 管道:前命令输出=后命令输入 ros2 topic list \| grep scan
> 覆盖写入文件 colcon build > build.log 2>&1
>> 追加写入文件 echo "export ROS_DOMAIN_ID=42" >> ~/.bashrc
2>&1 错误输出合并到标准输出 colcon build 2>&1 \| tee build.log
tee 同时输出到屏幕和文件 ros2 launch pkg demo.launch.py 2>&1 \| tee run.log

2. Git 版本控制

2.1 基础配置与仓库

# 全局配置(仅首次)
git config --global user.name "linuxros"
git config --global user.email "dev@linuxros.com"
git config --list                         # 查看当前配置

# 仓库操作
git init                                  # 初始化本地仓库
git clone git@github.com:user/repo.git    # 克隆远程仓库

2.2 日常提交流程

git status                                # 随时查看状态(养成习惯)
git add src/new_node.cpp                  # 添加指定文件(别用 git add .)
git commit -m "feat: add lidar driver"    # 提交到本地

2.3 分支管理

git branch                                # 查看本地分支
git branch -a                             # 查看所有分支(含远程)
git checkout -b feat/gazebo-sim           # 创建并切换到新分支
git switch feat/gazebo-sim                # 切换分支(Git 2.23+)
git merge feat/gazebo-sim                 # 合并到当前分支
git branch -d feat/gazebo-sim             # 删除已合并分支

2.4 远程同步

git remote add origin git@github.com:user/repo.git
git push -u origin main                   # 首次推送并关联上游
git pull --rebase origin main             # 拉取更新(rebase保持历史线性)
git fetch --all                           # 获取所有远程分支

2.5 版本回退与暂存

git log --oneline -10                     # 看最近10条提交
git log --graph --oneline --all           # 图形化查看分支历史
git diff HEAD~1 src/                      # 查看本次改动
git diff --staged                         # 查看已暂存的改动
git reset --hard HEAD~1                   # 回退到上一个版本(慎用!)
git checkout -- src/broken.cpp            # 撤销单个文件修改
git stash                                 # 暂存当前修改
git stash pop                             # 恢复暂存的修改
git stash list                            # 查看暂存列表

2.6 Git 分支工作流

flowchart LR subgraph 分支策略["🟢 分支策略"] direction TB M1["main 主分支"] M2["git checkout -b \nfeat/lidar"] M3["开发: vim + build"] M4["git commit -m"] M5["git push origin \nfeat/lidar"] M6["git checkout main"] M7["git merge feat/lidar"] M8(["✅ 合并完成\n删除分支"]) M1 --> M2 --> M3 --> M4 --> M5 --> M6 --> M7 --> M8 end subgraph 异常处理["🔴 异常处理"] direction TB E1["编译失败"] E2["git diff 查改动"] E3["git checkout -- file\n撤销修改"] E4("重新修改") E1 --> E2 --> E3 --> E4 E4 -.->|"返回"| M3 end M3 -.->|"编译失败"| E1 style M1 fill:#E3F2FD,stroke:#1976D2 style M8 fill:#E8F5E9,stroke:#388E3C style E1 fill:#FFEBEE,stroke:#D32F2F style E3 fill:#FFEBEE,stroke:#D32F2F

3. Vim 编辑器速查

机器人开发中最常见场景:远程SSH改.bashrc、调launch参数、修CMakeLists.txt

3.1 模式切换

操作 效果
i 光标前进入插入模式
a 光标后进入插入模式
o 下一行进入插入模式
ESC 返回普通模式
: 进入底线命令模式

3.2 光标移动

操作 效果
h/j/k/l 左/下/上/右
0 / $ 行首 / 行尾
gg / G 文档开头 / 末尾
:N 跳到第N行
Ctrl+f / Ctrl+b 向下/向上翻页

3.3 编辑操作

操作 效果
yyp 复制当前行并粘贴到下一行
nyy 复制n行
dd 删除/剪切当前行
ndd 删除/剪切n行
x 删除光标处字符
u 撤销
Ctrl+r 重做

3.4 搜索与保存

操作 效果
/关键词 向下搜索,n 下一个,N 上一个
:w 保存
:q 退出
:wq 保存并退出
:q! 强制不保存退出
:set nu 显示行号
:set paste 粘贴模式(避免缩进错乱)

3.5 Vim 三种模式切换

flowchart LR N["🔵 普通模式 Normal\n(hjkl移动 / gg/G跳转)"] -->|"i / a / o"| I["🟢 插入模式 Insert\n(编辑内容)"] I -->|"ESC"| N N -->|":"| C["🟣 命令模式 Command\n(:w / :q / :set nu)"] C -->|"ESC / 回车执行"| N I -->|"ESC → :"| C style N fill:#E3F2FD,stroke:#1976D2 style I fill:#E8F5E9,stroke:#388E3C style C fill:#F3E5F5,stroke:#7B1FA2

4. Docker 容器

ROS2版本共存、Gazebo依赖冲突、环境隔离——Docker解决90%的"我这能跑你那不行"

4.1 服务与镜像

# 服务管理
sudo systemctl start docker               # 启动Docker服务
sudo systemctl enable docker              # 开机自启
sudo systemctl status docker              # 查看服务状态

# 镜像操作
docker pull osrf/ros:humble-desktop-full  # ROS2 Humble官方镜像(完整版~2.5G)
docker pull osrf/ros:jazzy-desktop        # ROS2 Jazzy官方镜像
docker images                              # 查看本地镜像列表
docker rmi old_image:v1                    # 删除镜像
docker build -t my_robot:v1 .             # 从Dockerfile构建自定义镜像

4.2 容器操作

# 创建并运行容器(开发模式)
docker run -dit --name ros_dev \
    --network host \                       # 网络host模式(ROS2 DDS通信必需)
    -v /home/$USER/code:/workspace \       # 挂载代码目录
    -v /tmp/.X11-unix:/tmp/.X11-unix \     # X11转发(GUI应用)
    -e DISPLAY=$DISPLAY \
    osrf/ros:humble-desktop-full

# 常用操作
docker ps                                  # 查看运行中容器
docker ps -a                               # 查看所有容器(含已停止)
docker start ros_dev                       # 启动已停止的容器
docker exec -it ros_dev bash               # 进入容器bash
docker logs -f ros_dev                     # 实时日志
docker stop ros_dev && docker rm ros_dev   # 停止并删除容器

4.3 GPU支持

# 安装nvidia-container-toolkit后
docker run --gpus all ...                  # 容器内使用全部GPU
docker run --gpus '"device=0"' ...         # 指定GPU设备
# 验证:容器内执行 nvidia-smi

4.4 数据与编排

docker cp ros_dev:/workspace/log ./        # 容器→宿主机拷贝文件
docker cp ./config.yaml ros_dev:/workspace/ # 宿主机→容器拷贝文件

# Docker Compose
docker compose up -d                       # 后台启动多容器
docker compose down                        # 停止并清理
docker compose ps                          # 查看compose容器状态
docker compose logs -f                     # 查看compose日志

4.5 Dockerfile 最佳实践

# 多阶段构建:构建阶段 vs 运行阶段
FROM osrf/ros:humble-desktop-full AS builder
WORKDIR /ws
COPY src/ src/
RUN . /opt/ros/humble/setup.sh && colcon build

FROM osrf/ros:humble-ros-core
COPY --from=builder /ws/install /ws/install
# 最终镜像不包含编译依赖,体积小得多

4.6 Docker 容器生命周期

flowchart TB A(["docker pull 拉取镜像"]) --> B["docker build\n构建自定义镜像"] B --> C["docker images\n查看本地镜像"] C --> D["docker run -d\n创建并启动容器"] D --> E["docker ps\n容器运行中"] E --> F["docker exec -it\n进入容器操作"] F --> G{"任务完成?"} G -->|"是"| H["docker stop\n停止容器"] G -->|"否"| F H --> I["docker ps -a\n容器已停止"] I --> J{"需要重启?"} J -->|"是"| K["docker start\n重新启动"] K --> E J -->|"否"| L["docker rm\n删除容器"] L --> M(["docker rmi\n删除镜像"]) style A fill:#E3F2FD,stroke:#1976D2 style D fill:#E8F5E9,stroke:#388E3C style E fill:#E8F5E9,stroke:#388E3C style G fill:#FFF8E1,stroke:#F57C00 style J fill:#FFF8E1,stroke:#F57C00 style H fill:#FFEBEE,stroke:#D32F2F style L fill:#FFEBEE,stroke:#D32F2F

5. ROS2 机器人命令

所有命令以 ros2 开头。查帮助:ros2 --helpros2 <command> --helpros2 <command> <verb> -h

mindmap root((ROS2<br/>机器人命令)) 环境加载 source setup.bash ROS_DOMAIN_ID 编译与包管理 colcon build --symlink-install --packages-select ros2 pkg create ros2 pkg list ros2 pkg executables 节点 ros2 run ros2 node list ros2 node info Topic 话题 ros2 topic list ros2 topic echo ros2 topic info ros2 topic hz ros2 topic pub Interface 接口 ros2 interface list ros2 interface show ros2 interface proto Service 服务 ros2 service list ros2 service call Action 动作 ros2 action list ros2 action send_goal Parameter 参数 ros2 param list ros2 param get ros2 param set ros2 param dump Launch 启动 ros2 launch --debug Bag 录制回放 ros2 bag record ros2 bag play ros2 bag info 可视化调试 rviz2 rqt_graph rqt_plot tf2_echo 系统诊断 ros2 doctor ros2 daemon ros2 lifecycle ros2 component

5.1 环境加载

# 每个新终端都要source(建议写到 ~/.bashrc)
source /opt/ros/humble/setup.bash          # 或 /opt/ros/jazzy/setup.bash
source install/setup.bash                  # 加载工作空间

# ROS_DOMAIN_ID:多组机器通信隔离(默认0,范围0-232)
export ROS_DOMAIN_ID=42
echo "export ROS_DOMAIN_ID=42" >> ~/.bashrc

5.2 编译与包管理

colcon build --symlink-install             # 编译工作空间(Python改后自动生效)
colcon build --packages-select my_pkg      # 只编译指定包
colcon build --packages-up-to my_pkg       # 编译指定包及其依赖
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release  # Release模式编译

ros2 pkg create --build-type ament_cmake my_cpp_pkg   # 创建C++包
ros2 pkg create --build-type ament_python my_py_pkg   # 创建Python包
ros2 pkg list                              # 查看所有包
ros2 pkg list | grep my_                   # 过滤自己的包
ros2 pkg executables my_pkg                # 查看包的可执行文件
ros2 pkg prefix my_pkg                     # 查看包安装路径

5.3 节点

ros2 run my_pkg my_node                    # 运行节点
ros2 run my_pkg my_node --ros-args -r __node:=new_name  # 重命名节点
ros2 node list                             # 查看运行中节点
ros2 node info /my_node                    # 查看节点拓扑(发布/订阅/服务)

5.4 话题 Topic

ros2 topic list                            # 查看所有话题
ros2 topic list -t                         # 同时显示消息类型
ros2 topic echo /scan                      # 实时打印话题数据
ros2 topic echo /scan --no-arr             # 不打印数组内容(精简输出)
ros2 topic info /scan                      # 查看话题类型+发布者+订阅者
ros2 topic info /scan -v                   # 详细模式
ros2 topic hz /scan                        # 查看发布频率
ros2 topic bw /scan                        # 查看带宽占用
ros2 topic find geometry_msgs/msg/Twist    # 按消息类型查找话题
ros2 topic pub /cmd_vel geometry_msgs/msg/Twist \
    "{linear: {x: 0.5}, angular: {z: 0.1}}" -r 10  # 以10Hz发布速度指令

5.5 接口 Interface

ros2 interface list                        # 查看所有接口(msg/srv/action)
ros2 interface list -m                     # 只看消息类型
ros2 interface show std_msgs/msg/String    # 查看消息结构定义
ros2 interface show nav2_msgs/action/NavigateToPose  # 查看动作定义
ros2 interface proto geometry_msgs/msg/Twist  # 查看消息模板(方便写pub命令)

5.6 服务 Service

ros2 service list                          # 查看所有服务
ros2 service list -t                       # 同时显示服务类型
ros2 service type /clear                   # 查看服务类型
ros2 service call /reset std_srvs/srv/Empty "{}"  # 调用无参数服务
ros2 service call /add_two_ints example_interfaces/srv/AddTwoInts \
    "{a: 3, b: 5}"                        # 调用带参数服务

5.7 动作 Action

ros2 action list                           # 查看所有动作
ros2 action list -t                        # 同时显示动作类型
ros2 action info /navigate_to_pose         # 查看动作详情
ros2 action send_goal /navigate_to_pose \
    nav2_msgs/action/NavigateToPose "{pose: {...}}" --feedback  # 发送目标+查看反馈

5.8 参数 Parameter

ros2 param list                            # 查看所有节点参数
ros2 param list /my_node                   # 查看指定节点参数
ros2 param get /my_node use_sim_time       # 获取参数值
ros2 param set /my_node linear_scale 1.5   # 动态修改参数(无需重编译)
ros2 param dump /my_node                   # 导出参数为YAML
ros2 param dump /my_node --output-dir ./   # 导出到文件
ros2 param describe /my_node param_name    # 查看参数描述(约束、范围等)

5.9 Launch 启动文件

ros2 launch my_pkg demo.launch.py          # 启动launch文件
ros2 launch my_pkg demo.launch.py use_sim:=true  # 传参
ros2 launch --debug my_pkg demo.launch.py  # 调试模式(暂停等待调试器连接)

5.10 数据录制与回放 Bag

ros2 bag record -a                         # 录制所有话题
ros2 bag record -o my_session /scan /tf    # 录制指定话题,指定输出名
ros2 bag info my_session/                  # 查看bag信息
ros2 bag play my_session/                  # 回放数据
ros2 bag play my_session/ --rate 0.5       # 半速回放
ros2 bag play my_session/ -l               # 循环回放

5.11 可视化与调试

rviz2                                      # 3D可视化(点云/轨迹/TF/模型)
rqt_graph                                  # 节点-话题关系图
rqt_plot                                   # 话题数据曲线图
ros2 run tf2_ros tf2_echo map base_link    # 查看两个坐标系间变换
ros2 run tf2_tools view_frames             # 生成TF树PDF

5.12 系统诊断与管理

ros2 doctor                                # 全面系统诊断(别名 ros2 wtf)
ros2 doctor --report                       # 输出完整报告
ros2 doctor --report-fail                  # 只看失败项
ros2 daemon status                         # 守护进程状态
ros2 daemon stop                           # 停止守护进程(网络切换后重置缓存)
ros2 lifecycle list                        # 查看受控节点列表
ros2 lifecycle set /node configure         # 将节点状态设为configure
ros2 lifecycle set /node activate          # 激活节点
ros2 component types                       # 查看可用组件类型(高性能容器模式)

5.13 ROS2 三种通信机制对比

flowchart LR subgraph Topic["🔵 Topic 话题\n(发布/订阅 · 多对多)"] direction TB T1["Publisher\n发布者节点"] T2["/scan 话题"] T3["Subscriber A\n订阅者A"] T4["Subscriber B\n订阅者B"] T1 -->|"publish"| T2 T2 -->|"subscribe"| T3 T2 -->|"subscribe"| T4 end subgraph Service["🟢 Service 服务\n(请求/响应 · 一对一)"] direction TB S1["Client\n客户端节点"] S2["/add_two_ints\n服务"] S3["Server\n服务端节点"] S1 -->|"request"| S2 S2 -->|"request"| S3 S3 -->|"response"| S2 S2 -->|"response"| S1 end subgraph Action["🟣 Action 动作\n(目标/反馈/结果 · 长任务)"] direction TB A1["Client\n客户端节点"] A2["/navigate_to_pose\n动作服务器"] A3["Server\n服务端节点"] A1 -->|"send_goal"| A2 A2 -->|"goal"| A3 A3 -->|"feedback\n(进度更新)"| A2 A2 -->|"feedback"| A1 A3 -->|"result"| A2 A2 -->|"result"| A1 end style T2 fill:#E3F2FD,stroke:#1976D2 style S2 fill:#E8F5E9,stroke:#388E3C style A2 fill:#F3E5F5,stroke:#7B1FA2

6. 场景速查表

每个典型场景对应一组命令,按执行顺序排列

场景 命令链 说明
首次克隆→运行 git clonecolcon build --symlink-installsource install/setup.bashros2 launch 四步走通
远程改bug ssh user@ipvim src/bug.cppcolcon build --packages-select pkgros2 run pkg node 改完即跑
查话题数据 ros2 topic listros2 topic info /topic -vros2 topic echo /topic 三步定位
录制→回放调试 ros2 bag record /sensorros2 bag inforos2 bag playrviz2 离线复现
Docker环境分发 docker build -t img .docker push → 同事 docker pulldocker run 一次构建到处跑
查进程+清理 ps aux \| grep ros → 记下PID → kill -9 PIDros2 node list 确认 僵尸进程清理
编译失败排查 grep -rn "error" build.logrosdep check --from-paths srcapt search ros-humble-xxx 错误→依赖→安装
新包开发 ros2 pkg createvim src/node.cppcolcon build --packages-select pkgros2 run pkg noderos2 topic echo /out 创建→编码→编译→运行→验证

7. 开发工作流全景

flowchart TB subgraph P1["① 环境准备"] A(["ssh连接开发机"]) --> B["git clone 拉代码"] B --> C["source /opt/ros/ setup.bash"] C --> D["docker run 启动容器"] end subgraph P2["② 开发编码"] E["vim 改源码/配置"] F["git add + commit"] G["git push 推送"] D --> E E --> F --> G end subgraph P3["③ 编译构建"] H["colcon build 编译"] I{"编译成功?"} H --> I I -->|"是"| J["source install/ setup.bash"] I -->|"否"| K["grep -rn error \n查日志定位"] K --> E end subgraph P4["④ 运行调试"] L["ros2 launch 启动"] M["ros2 topic echo \n看数据"] N["ros2 bag record \n录包"] O["rviz2 + rqt_graph \n可视化"] P{"数据正常?"} Q(["✅ 调试完成"]) end G --> H J --> L L --> M --> N --> O --> P P -->|"是"| Q P -->|"否"| E style A fill:#E3F2FD,stroke:#1976D2 style I fill:#FFF8E1,stroke:#F57C00 style P fill:#FFF8E1,stroke:#F57C00 style K fill:#FFEBEE,stroke:#D32F2F style Q fill:#E8F5E9,stroke:#388E3C

8. 常见问题排查

8.0 故障排查决策树

flowchart TB S(["遇到问题"]) --> Q1{"ros2 命令\n找不到?"} Q1 -->|"是"| A1["source setup.bash\n检查 ~/.bashrc"] Q1 -->|"否"| Q2{"colcon build\n编译失败?"} Q2 -->|"是"| A2["1. grep -rn error\n2. rosdep check\n3. apt search 补依赖"] Q2 -->|"否"| Q3{"Docker容器\n无GPU?"} Q3 -->|"是"| A3["安装 nvidia-container-toolkit\ndocker run --gpus all"] Q3 -->|"否"| Q4{"多机通信\n不通?"} Q4 -->|"是"| A4["1. 检查 ROS_DOMAIN_ID\n2. ping 对方IP\n3. ros2 doctor"] Q4 -->|"否"| Q5{"串口设备\n无权限?"} Q5 -->|"是"| A5["sudo usermod -aG dialout\n或 sudo chmod 666"] Q5 -->|"否"| Q6{"节点启动\n立即崩溃?"} Q6 -->|"是"| A6["dmesg | tail -20\n查看内核日志\n检查依赖库 ldd"] Q6 -->|"否"| D(["✅ 提交issue\n或 ros2 doctor --report"]) style S fill:#E3F2FD,stroke:#1976D2 style A1 fill:#E8F5E9,stroke:#388E3C style A2 fill:#E8F5E9,stroke:#388E3C style A3 fill:#E8F5E9,stroke:#388E3C style A4 fill:#E8F5E9,stroke:#388E3C style A5 fill:#E8F5E9,stroke:#388E3C style A6 fill:#E8F5E9,stroke:#388E3C style D fill:#FFF8E1,stroke:#F57C00

8.1 ros2: command not found

根源:没source环境。每个新终端都要:

source /opt/ros/humble/setup.bash
source install/setup.bash

一劳永逸:写到 ~/.bashrc

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc

8.2 Docker容器内无GPU

前提:宿主机 nvidia-smi 能正常输出。

# 1. 安装nvidia-container-toolkit
sudo apt install nvidia-container-toolkit
# 2. 运行时加 --gpus 参数
docker run --gpus all ...
# 3. 容器内验证
docker exec -it ros_dev nvidia-smi

8.3 colcon build 找不到依赖

# 1. 先检查缺失的依赖
rosdep check --from-paths src --ignore-src
# 2. rosdep自动安装
rosdep install --from-paths src --ignore-src -r -y
# 3. 如果rosdep也不知道,手动搜索
apt search ros-humble- | grep xxx

确保 package.xmlCMakeLists.txt 中声明的依赖正确。首次用 sudo rosdep init && rosdep update 初始化rosdep。

8.4 ROS2多机通信不通

# 1. 确认两台机器 ROS_DOMAIN_ID 一致
echo $ROS_DOMAIN_ID
# 2. 确认能ping通
ping <对方IP>
# 3. 诊断
ros2 doctor --report
# 4. 如果用了Docker,确保 network_mode: host

8.5 串口设备无权限

# 把自己加入dialout组(重启后生效)
sudo usermod -aG dialout $USER
# 临时方案:直接改权限
sudo chmod 666 /dev/ttyUSB0
# 验证
ls -la /dev/ttyUSB*

9. 常用工具速记

工具 用途 一行启动
rviz2 3D可视化 rviz2
rqt_graph 节点话题关系图 rqt_graph
rqt_plot 实时数据曲线 rqt_plot
Gazebo 物理仿真 gazebo --verbose
ros2 doctor 系统诊断 ros2 doctor --report
htop 交互式进程监控 htop
ncdu 磁盘空间分析 ncdu ~/
tmux 终端多路复用 tmux new -s ros

看到这还不点赞?今晚代码必跑飞。看完不转发?Bug跟你到白头。推荐给朋友,一起被坑到永久。评论区见,谁是今天的最强显眼包?👻

返回首页