仿真环境搭建:主流仿真工具对比与ROS2环境安装

做机器人仿真这么多年,我踩过不少坑。刚开始那会儿,选仿真工具就跟挑手机似的——参数看着都挺好,真用起来才发现各种水土不服。这一章,咱们就聊聊怎么选工具、怎么搭环境。

主流仿真工具对比

目前人形机器人领域用得最多的仿真器,说白了就三个:Gazebo、MuJoCo、Isaac Sim。它们各有各的脾气,我一个个说。

特性 Gazebo MuJoCo Isaac Sim
物理引擎 ODE / Bullet / DART 自研(MJX) PhysX 5
渲染质量 中等 低(侧重物理) 高(RTX实时光追)
ROS集成 原生支持 需插件 ROS2 Bridge
实时性 一般 高(可调至1kHz) 高(GPU加速)
人形机器人支持 中等(需自建模型) 好(MJCF格式友好) 好(内置数字人)
学习曲线 平缓 陡峭 中等
开源免费 是 是(社区版) 是(社区版)
典型场景 SLAM、导航 强化学习、控制 数字孪生、视觉

我的建议:如果你刚入门,从Gazebo开始最稳妥。ROS生态成熟,社区资源多,遇到问题随便一搜就有答案。MuJoCo适合做控制算法和强化学习,Isaac Sim适合做视觉和数字孪生——但这两者硬件门槛都不低。

Gazebo:老牌劲旅

Gazebo我用了快五年。它最大的优点是「稳」,跟ROS的集成几乎是原生的。你装好ROS2 Humble,Gazebo Fortress就能直接跑起来。

不过说实话,Gazebo的物理精度一般。我在做双足步行仿真时,ODE引擎下的地面摩擦模型经常飘,后来换成DART才稍微好点。如果你做人形机器人的全身控制,建议直接上DART或Bullet。

避坑指南:我曾经在Gazebo里跑一个32自由度的双足机器人,模型加载花了三分钟。后来发现是URDF里每个link的碰撞网格太精细了。解决办法:用简单几何体(box、cylinder)代替mesh碰撞体,速度能快10倍。

MuJoCo:物理精度之王

MuJoCo这两年火得不行,尤其是DeepMind把它开源之后。它的物理求解器非常快,能跑到1kHz以上,特别适合做强化学习训练。

我个人习惯用MuJoCo做控制算法的快速验证。比如你要测试一个MPC控制器,Gazebo里跑一步要等半天,MuJoCo里唰一下就出结果了。但它的渲染确实拉胯——你想想看,连个阴影都没有,做视觉相关的仿真基本没戏。

注意:MuJoCo的MJCF模型格式跟ROS的URDF不通用。你需要用mujoco_ros2_pkgs或者自己写转换脚本。我当初在这上面浪费了两天,后来干脆写了个Python脚本批量转。

Isaac Sim:数字孪生的未来

Isaac Sim是NVIDIA家的,渲染效果没得说。RTX光追一开,你甚至分不清是仿真还是实拍。它内置了数字人模型,直接就能用,省去了自己建模的麻烦。

但它的硬件要求也高——至少一块RTX 3060以上的显卡。我工作室的旧机器(GTX 1080)跑起来卡成PPT。另外,Isaac Sim的ROS2 Bridge虽然功能全,但配置起来有点绕,尤其是多机器人场景。

一句话总结:做视觉仿真选Isaac Sim,做控制算法选MuJoCo,做系统集成选Gazebo。别想着一个工具通吃,不现实。

仿真工具选型决策流程

下面这张图是我自己总结的选型逻辑,帮你快速定位该用哪个工具。

仿真工具选型决策流程 开始选型 主要需求是什么? 系统集成 Gazebo 控制/强化学习 MuJoCo 视觉/数字孪生 Isaac Sim 检查硬件配置 开始搭建环境 💡 硬件不足时: Gazebo可用CPU跑 MuJoCo轻量级 Isaac Sim必须GPU

Ubuntu + ROS2 Humble 环境安装

好,工具选完了,咱们开始搭环境。我推荐用Ubuntu 22.04 LTS,搭配ROS2 Humble。为什么是Humble?因为它LTS版本,支持到2027年,稳定。

第一步:安装Ubuntu 22.04

这个我就不细说了,装系统大家都会。说几个要点:

  • 磁盘分区:建议至少留100GB给ROS2和仿真工具。我当初只分了50GB,装完Gazebo和几个模型就满了。
  • 显卡驱动:如果你用NVIDIA显卡,装完系统第一件事就是装驱动。别用系统自带的nouveau,性能差还容易崩。
  • 换源:国内用户记得换清华或阿里源,不然apt update能等到你怀疑人生。

注意:Ubuntu 22.04默认的Python版本是3.10,ROS2 Humble依赖的就是这个版本。别手贱去升级Python,我见过有人升到3.11后ROS2直接罢工。

第二步:安装ROS2 Humble

官方文档写得很清楚,但我还是把关键步骤列出来,省得你来回翻。

# 1. 设置locale
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

# 2. 添加ROS2源
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

# 3. 安装ROS2 Humble桌面版(推荐)
sudo apt update
sudo apt install ros-humble-desktop

# 4. 安装开发工具
sudo apt install ros-dev-tools

# 5. 设置环境变量
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

我的习惯:装完ROS2后,我会立刻装几个常用工具:sudo apt install ros-humble-rviz2 ros-humble-gazebo-ros-pkgs ros-humble-tf2-tools。这样后面调试时不用临时去装。

第三步:验证安装

装完别急着跑,先验证一下环境对不对。

# 检查ROS2版本
ros2 --version

# 启动一个简单的talker-listener测试
# 终端1:
ros2 run demo_nodes_cpp talker
# 终端2:
ros2 run demo_nodes_py listener

如果你看到talker在发「Hello World」,listener在收,那就说明环境没问题。

常见问题:如果ros2命令找不到,八成是环境变量没生效。手动执行source /opt/ros/humble/setup.bash试试。还不行?检查一下.bashrc里有没有拼错路径。

第四步:安装Gazebo Fortress

ROS2 Humble默认搭配的是Gazebo Fortress(即Gazebo 11的后续版本)。安装很简单:

sudo apt install ros-humble-ros-gz

这个包会把Gazebo Fortress和ROS2的桥接一起装好。装完后你可以跑一下官方示例:

# 启动Gazebo
ros2 launch ros_gz_sim empty_world.launch.py

# 在另一个终端里生成一个简单模型
ros2 run ros_gz_sim create -name box -topic /box_pose

如果Gazebo界面弹出来,并且能看到一个方块,那就说明集成成功了。

踩坑记录:我曾经在虚拟机里装Gazebo,结果界面卡成PPT。后来发现是3D加速没开。如果你也用虚拟机,记得在VMware或VirtualBox设置里启用3D加速。

第五步:安装MuJoCo(可选)

如果你打算做控制算法,建议把MuJoCo也装上。安装方式有两种:

方式一:pip安装(推荐)

pip install mujoco

方式二:源码编译

git clone https://github.com/google-deepmind/mujoco.git
cd mujoco
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local
sudo make install

我个人习惯用pip,省事。装完后跑个测试:

python3 -c "import mujoco; print(mujoco.__version__)"

第六步:安装Isaac Sim(可选)

Isaac Sim的安装稍微麻烦点,因为它依赖NVIDIA的生态。步骤大致如下:

  1. 从NVIDIA官网下载Isaac Sim 2023.1(或更新版本)
  2. 解压后运行./isaac_sim.sh启动
  3. 安装ROS2 Bridge:pip install isaacsim-ros2-bridge

建议:Isaac Sim对网络要求高,第一次启动会下载很多资源。建议在非高峰时段操作,或者提前准备好离线包。

环境验证清单

最后,我列一个检查清单,确保你的环境没问题:

检查项 命令/操作 预期结果
ROS2版本 ros2 --version 显示humble
Gazebo启动 ros2 launch ros_gz_sim empty_world.launch.py Gazebo界面弹出
MuJoCo导入 python3 -c "import mujoco" 无报错
Isaac Sim启动 ./isaac_sim.sh 界面正常加载
ROS2-Gazebo桥接 ros2 topic list 看到/gazebo相关topic