第2章:环境搭建与工具链
说实话,每次带新人做机器人项目,我最怕的就是环境搭建这一步。明明代码逻辑没问题,结果卡在「装不上」「跑不起来」「版本冲突」这些破事上。我自己带过的团队里,至少有三次项目延期是因为环境没配好。
所以这一章,我带你把坑提前踩一遍。咱们的目标很明确:装好 ROS Noetic、配通 MoveIt、跑起 PyBullet,最后把 VS Code 调试环境整利索。嗯,跟着我的习惯来,保证你少走弯路。
2.1 ROS Noetic 安装与验证
ROS Noetic 是 ROS1 的最后一个长期支持版本,也是目前工业界用得最多的版本。我个人习惯在 Ubuntu 20.04 上装它,兼容性最好。
2.1.1 安装步骤
- 换源:把 apt 源换成国内镜像,不然下载慢到怀疑人生。
- 添加 ROS 源:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' - 安装桌面完整版:
sudo apt install ros-noetic-desktop-full - 初始化 rosdep:
sudo rosdep init && rosdep update - 设置环境变量:
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
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 配置成功了。
<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 大法高效十倍。
CMakeLists.txt 里加上 set(CMAKE_BUILD_TYPE Debug),否则断点会跳来跳去,根本定位不准。
2.5 本章知识体系总览
下面这张图概括了本章搭建的完整工具链和它们之间的关系。你可以把它当作后续章节的「地图」:
环境搭好之后,你就可以在 MoveIt 里做运动规划,在 PyBullet 里看碰撞效果,在 VS Code 里打断点查问题。三者通过 ROS 话题/服务通信,形成「规划 → 仿真 → 调试」的闭环。后续章节的所有算法,都会跑在这个底座上。