第二章:环境搭建与工具链
说实话,环境搭建这事儿,看着琐碎,但往往是整个项目成败的关键。我见过太多同学,算法写得飞起,结果卡在环境配置上,一卡就是两三天。咱们这节课,就把这些坑一个个填平。
2.1 Python与PyTorch环境配置
我个人习惯用 Miniconda 来管理 Python 环境。为什么不用 Anaconda?因为它太臃肿了。咱们做机器人,轻装上阵才是王道。
核心原则:每个项目独立环境,互不干扰。
先装 Miniconda,然后创建环境:
# 创建 Python 3.8 环境(ACT 框架推荐)
conda create -n act_env python=3.8
conda activate act_env
# 安装 PyTorch(根据你的 CUDA 版本选择)
# 我一般用 CUDA 11.8,稳定
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# 验证安装
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
小技巧:如果你用的是 RTX 30/40 系列显卡,建议 CUDA 11.8 起步。我曾经在 RTX 4090 上试过 CUDA 11.3,结果死活跑不起来——嗯,教训深刻。
PyTorch 装好后,别忘了装几个常用库:
pip install numpy matplotlib opencv-python h5py
pip install einops # ACT 里会用到,做张量重排
2.2 ROS/ROS2 基础
机器人操作系统,说白了就是让各个模块能互相说话。ROS1 和 ROS2 怎么选?我个人建议:新项目直接上 ROS2。ROS1 虽然生态成熟,但实时性差,而且通信机制在复杂场景下容易出问题。
ROS2 安装(Ubuntu 22.04 + Humble 版本):
# 设置源
sudo apt update && sudo apt install curl gnupg lsb-release
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
# 安装 ROS2 Humble
sudo apt update
sudo apt install ros-humble-desktop
# 配置环境
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
注意:ROS2 的 DDS 通信默认使用 UDP,如果你在局域网内有多台机器,记得配置 ROS_DOMAIN_ID,否则会出现「找不到节点」的诡异问题。我踩过这个坑,排查了整整一下午。
ROS2 的核心概念就三个:节点、话题、服务。节点是执行单元,话题是发布/订阅的通道,服务是请求/响应的模式。你想想看,机械臂发关节角度,相机发图像数据,都是通过话题来传递的。
2.3 MuJoCo 仿真器安装
MuJoCo 是 DeepMind 开源的物理引擎,轻量、快速,特别适合做机器人仿真。ACT 框架里,我们用它来验证策略,避免直接上真机把机械臂撞坏。
安装步骤:
# 安装 MuJoCo 2.3.7(推荐版本)
pip install mujoco
# 验证安装
python -c "import mujoco; print(mujoco.__version__)"
# 下载官方模型(包含机器人模型)
git clone https://github.com/deepmind/mujoco_menagerie.git
个人经验:MuJoCo 的 XML 模型文件看起来复杂,但其实结构很清晰。你只需要关注 <worldbody> 和 <actuator> 这两个标签。前者定义物理世界,后者定义电机驱动。
跑一个简单的仿真测试:
import mujoco
import mujoco.viewer
# 加载模型
model = mujoco.MjModel.from_xml_path('path/to/robot.xml')
data = mujoco.MjData(model)
# 启动可视化
with mujoco.viewer.launch_passive(model, data) as viewer:
for _ in range(1000):
mujoco.mj_step(model, data)
viewer.sync()
为什么会用 MuJoCo 而不是 Gazebo?说白了,Gazebo 太重了,启动慢,而且和 ROS 耦合太深。MuJoCo 轻量、可嵌入,适合做算法验证。
2.4 数据采集硬件驱动配置
数据采集是模仿学习的命根子。没有好数据,再牛的算法也是白搭。这里我重点讲机械臂和相机的驱动配置。
2.4.1 机械臂驱动
市面上常见的机械臂有 Franka Emika、UR、Kinova 等。以 Franka 为例:
# 安装 Franka ROS2 驱动
sudo apt install ros-humble-libfranka
sudo apt install ros-humble-franka-ros2
# 启动驱动(记得先给机械臂上电)
ros2 launch franka_bringup franka.launch.py robot_ip:=192.168.1.100
避坑指南:我曾经在配置 Franka 驱动时,发现机械臂一直报「joint position limit exceeded」。后来发现是驱动版本和固件不匹配。记住:驱动版本必须和机械臂固件版本对应,去官网查兼容性表。
2.4.2 相机驱动
相机推荐用 Intel RealSense D435 或 D415,性价比高,ROS2 支持好。
# 安装 RealSense ROS2 驱动
sudo apt install ros-humble-realsense2-camera
# 启动相机
ros2 launch realsense2_camera rs_launch.py depth_module.profile:=640x480x30
验证相机数据:
# 查看话题列表
ros2 topic list
# 可视化图像
ros2 run rqt_image_view rqt_image_view
小建议:数据采集时,相机和机械臂的坐标系标定很关键。我一般用 ArUco 码 做手眼标定,简单可靠。具体做法:在机械臂末端贴一个 ArUco 码,相机识别后计算变换矩阵。
2.5 整体工具链架构
下面这张图,是我自己总结的 ACT 环境搭建的完整链路。你照着这个走,基本不会迷路。
从底层到顶层,依次是:基础环境 → 硬件驱动 → 数据采集 → 模型训练。每一层都依赖下一层,缺一不可。
2.6 常见问题与避坑
| 问题 | 原因 | 解决方案 |
|---|---|---|
| PyTorch 找不到 GPU | CUDA 版本不匹配 | 用 nvidia-smi 查看驱动版本,安装对应 CUDA |
| ROS2 节点无法通信 | ROS_DOMAIN_ID 不一致 | 所有机器设置相同的 DOMAIN_ID |
| MuJoCo 仿真卡顿 | 步长设置太大 | 将 dt 设为 0.002 秒(500Hz) |
| 机械臂关节限位报错 | 驱动版本与固件不匹配 | 去官网下载对应版本的驱动 |
最后说一句:环境搭建这事儿,急不得。我当年第一次配 Franka 驱动,从下午搞到凌晨三点。但只要你把每一步都走稳了,后面跑算法就会特别顺畅。嗯,磨刀不误砍柴工嘛。
公众号:蓝海资料掘金营,微信 deep3321