第2章:环境搭建与工具链

说实话,每次带新人做机器人项目,我最怕的就是环境搭建这一步。明明代码逻辑没问题,结果卡在「装不上」「跑不起来」「版本冲突」这些破事上。我自己带过的团队里,至少有三次项目延期是因为环境没配好。

所以这一章,我带你把坑提前踩一遍。咱们的目标很明确:装好 ROS Noetic、配通 MoveIt、跑起 PyBullet,最后把 VS Code 调试环境整利索。嗯,跟着我的习惯来,保证你少走弯路。

本章核心目标: 搭建一套可复用的机械臂避障开发环境,确保后续所有算法都能在这个底座上跑通。

2.1 ROS Noetic 安装与验证

ROS Noetic 是 ROS1 的最后一个长期支持版本,也是目前工业界用得最多的版本。我个人习惯在 Ubuntu 20.04 上装它,兼容性最好。

2.1.1 安装步骤

  1. 换源:把 apt 源换成国内镜像,不然下载慢到怀疑人生。
  2. 添加 ROS 源:sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
  3. 安装桌面完整版:sudo apt install ros-noetic-desktop-full
  4. 初始化 rosdep:sudo rosdep init && rosdep update
  5. 设置环境变量:echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
注意: 如果你用的是 Ubuntu 20.04 以外的版本,别硬装 Noetic。我见过有人用 Ubuntu 22.04 强行装 Noetic,结果依赖全崩了。老老实实换 Ubuntu 20.04 或者用 Docker。

2.1.2 验证安装

打开终端,输入 roscore。如果看到类似下面的输出,说明 ROS Master 跑起来了:

started core service [/rosout]
SUMMARY
========
PARAMETERS
 * /rosdistro: noetic
 * /rosversion: 1.15.14

NODES
/

再开一个新终端,跑 rosrun turtlesim turtlesim_node。如果出现一个小乌龟窗口,恭喜你,ROS 环境通了。

小技巧: 我习惯在 ~/.bashrc 里加一行 export ROS_HOSTNAME=localhost,避免多机通信时 IP 绑定出问题。

2.2 MoveIt 配置

MoveIt 是机械臂运动规划的事实标准。说白了,它就是帮你算「从 A 点到 B 点,关节怎么转」的框架。但配置起来有点绕,我当年第一次配的时候花了整整两天。

2.2.1 安装 MoveIt

sudo apt install ros-noetic-moveit

装完之后,建议你装一个 moveit-resources 包,里面有官方示例模型:

sudo apt install ros-noetic-moveit-resources

2.2.2 配置工作空间

我个人习惯把所有机械臂相关的包放在一个独立的工作空间里:

mkdir -p ~/arm_ws/src
cd ~/arm_ws
catkin_make
source devel/setup.bash

然后把你自己的机械臂 URDF 文件放到 src 目录下。如果你没有现成的 URDF,可以用 MoveIt 自带的 panda 模型练手:

roslaunch panda_moveit_config demo.launch

如果看到 RViz 界面里出现一个红色的机械臂,说明 MoveIt 配置成功了。

避坑指南: 我曾经因为 URDF 里少定义了一个 <transmission> 标签,导致 MoveIt 死活不认关节。检查 URDF 时,重点看 <joint> 的 type 属性和 <transmission> 的对应关系。

2.3 PyBullet 仿真环境搭建

PyBullet 是我个人非常喜欢的仿真器。轻量、无依赖、Python 直接调。相比 Gazebo,它启动快得多,适合做算法快速验证。

2.3.1 安装 PyBullet

pip install pybullet

就这么一行。嗯,你没看错,比 ROS 简单多了。

2.3.2 加载机械臂模型

PyBullet 自带了一些机器人模型,比如 KUKA、Franka、UR5。我拿 UR5 举个例子:

import pybullet as p
import pybullet_data

p.connect(p.GUI)
p.setAdditionalSearchPath(pybullet_data.getDataPath())
p.loadURDF("ur5/ur5.urdf", useFixedBase=True)
p.setGravity(0, 0, -9.81)

while True:
    p.stepSimulation()

跑起来之后,你会看到一个 UR5 机械臂悬在空中。你可以用鼠标拖拽它,感受一下物理引擎的反馈。

小技巧: 我习惯在 p.connect(p.GUI) 后面加一行 p.configureDebugVisualizer(p.COV_ENABLE_GUI, 0),关掉那些乱七八糟的调试按钮,界面清爽很多。

2.3.3 添加障碍物

避障算法需要障碍物。PyBullet 里加障碍物很简单:

# 添加一个红色方块作为障碍物
obstacle_id = p.loadURDF("cube_small.urdf", basePosition=[0.5, 0, 0.5])
p.changeVisualShape(obstacle_id, -1, rgbaColor=[1, 0, 0, 1])

这样你就有了一个红色方块。后续章节我们会用它来测试避障算法。

2.4 VS Code 与调试工具

写机器人代码,调试是家常便饭。我见过太多人用 print 大法调 ROS 节点,调得头皮发麻。咱们用 VS Code 把调试环境搭好,一劳永逸。

2.4.1 安装 VS Code 插件

插件名称 用途
Python Python 语法高亮、调试、IntelliSense
C/C++ C++ 代码补全、调试
ROS ROS 消息、服务、动作的语法支持
CMake Tools CMake 项目构建支持
GitLens 代码版本管理,方便回溯

2.4.2 配置 ROS 调试

在 VS Code 里按 Ctrl+Shift+P,输入 ROS: Create ROS Workspace,选择你的工作空间。然后 VS Code 会自动生成 .vscode/tasks.json 和 .vscode/launch.json。

我个人习惯在 launch.json 里加一个 Python 调试配置:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "ROS: Python Debug",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "args": [],
            "cwd": "${workspaceFolder}",
            "env": {
                "PYTHONPATH": "${workspaceFolder}/devel/lib/python3/dist-packages:${env:PYTHONPATH}"
            }
        }
    ]
}

这样你就能在 ROS 节点里打断点、看变量、单步执行了。比 print 大法高效十倍。

小技巧: 调试 C++ 节点时,记得在 CMakeLists.txt 里加上 set(CMAKE_BUILD_TYPE Debug),否则断点会跳来跳去,根本定位不准。

2.5 本章知识体系总览

下面这张图概括了本章搭建的完整工具链和它们之间的关系。你可以把它当作后续章节的「地图」:

机械臂避障开发环境总览 Ubuntu 20.04 ROS Noetic MoveIt 运动规划 PyBullet 仿真 VS Code 调试 运动规划轨迹 碰撞检测结果 断点/变量/日志 三者通过 ROS 话题/服务通信,形成「规划 → 仿真 → 调试」闭环

环境搭好之后,你就可以在 MoveIt 里做运动规划,在 PyBullet 里看碰撞效果,在 VS Code 里打断点查问题。三者通过 ROS 话题/服务通信,形成「规划 → 仿真 → 调试」的闭环。后续章节的所有算法,都会跑在这个底座上。

总结: 环境搭建是避障算法的基础。ROS Noetic 提供通信框架,MoveIt 负责运动规划,PyBullet 做物理仿真,VS Code 帮你调试。四者缺一不可。我建议你花半天时间把这一步走通,后面会顺畅很多。