2. 环境搭建

在开始AGV小车运动控制与ROS2通信开发之前,搭建一个稳定、可复现的仿真环境是整个课程的基础。Isaac Sim 作为 NVIDIA Omniverse 平台上的机器人仿真应用,对硬件(尤其是GPU)和软件依赖(如CUDA、ROS2发行版)有严格的要求。本章将引导你从零开始,完成 Isaac Sim 的安装、ROS2 环境的配置,并系统性地验证 GPU 与关键依赖项,确保后续所有章节的代码和仿真能够顺利运行。

Isaac Sim + ROS2 环境搭建流程与验证路径 ① 硬件与OS检查 GPU / 驱动 / Ubuntu ② 安装Isaac Sim Omniverse / pip / 容器 ③ 配置ROS2环境 Humble / 桥接 / 工作空间 ④ 验证 GPU / 依赖项 GPU 验证命令 nvidia-smi isaacsim --check omni.kit.app --verify ROS2 验证命令 ros2 topic list ros2 node list ros2 interface list 依赖项验证 python3 -c "import torch" pip list | grep omni ros2 doctor 环境搭建成功标志 Isaac Sim 可启动空白场景 | ROS2 话题可正常收发 | GPU 利用率可监控 AGV 模型可加载并接受运动控制指令

核心原理:理解 Isaac Sim 与 ROS2 的协作架构

Isaac Sim 基于 NVIDIA Omniverse 平台构建,其核心是一个可扩展的实时仿真引擎,支持物理模拟(PhysX)、光线追踪渲染和 Python 脚本驱动。在 AGV 开发场景中,Isaac Sim 负责提供高保真的传感器仿真(如 LiDAR、摄像头、IMU)和动力学模型,而 ROS2 则负责机器人应用层的逻辑控制、状态机调度和算法实现。两者通过 ros2_bridge 或 isaac_ros2 包进行通信,将仿真世界中的话题(Topic)、服务(Service)和动作(Action)映射到 ROS2 图(Graph)中。

这种架构的核心优势在于:开发者可以在仿真环境中快速迭代运动控制算法,而无需担心硬件损坏或场地限制。同时,由于 ROS2 的分布式通信机制,仿真环境与真实机器人之间可以无缝切换——只需修改启动文件中的命名空间或 QoS 策略,即可将控制指令从仿真器发送到真实 AGV 的电机驱动器。

在安装之前,必须明确一个关键概念:Isaac Sim 的版本与 ROS2 发行版存在严格的兼容矩阵。例如,Isaac Sim 2023.1 版本官方支持 ROS2 Humble(Ubuntu 22.04),而较新的 2024.x 版本则可能同时支持 Humble 和 Jazzy。错误的版本组合会导致桥接节点崩溃或话题数据格式不匹配。

判断方法:评估硬件与系统兼容性

在开始安装前,请使用以下清单对开发机进行自检。如果任何一项不满足,后续步骤将无法正常工作。

检查项 最低要求 推荐配置 验证命令
GPU 型号 NVIDIA GTX 1660 (6GB) RTX 3060 / A4000 (12GB+) nvidia-smi
GPU 驱动版本 ≥ 525.60.13 ≥ 535.104.05 nvidia-smi --query-gpu=driver_version --format=csv
CUDA 版本 11.8 12.0 / 12.2 nvcc --version
操作系统 Ubuntu 20.04 / 22.04 Ubuntu 22.04 LTS lsb_release -a
内存 32 GB 64 GB free -h
磁盘空间 40 GB 可用 100 GB SSD df -h /

如果使用笔记本电脑,请确保电源模式设置为“高性能”,并关闭集成显卡的自动切换功能,否则 Isaac Sim 可能无法识别独立 GPU。

操作流程:从零安装 Isaac Sim 与 ROS2

以下步骤基于 Ubuntu 22.04 + ROS2 Humble + Isaac Sim 2023.1.1 的组合,这是目前课程验证最稳定的搭配。

步骤 1:安装 NVIDIA 驱动与 CUDA

# 添加 NVIDIA 官方驱动源
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
# 安装推荐驱动(以 535 为例)
sudo apt install nvidia-driver-535
# 重启后验证
nvidia-smi
# 安装 CUDA 12.0(注意:Isaac Sim 自带 CUDA 运行时,系统 CUDA 主要用于编译扩展)
wget https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda_12.0.0_525.60.13_linux.run
sudo sh cuda_12.0.0_525.60.13_linux.run --toolkit --silent --override
# 添加环境变量
echo 'export PATH=/usr/local/cuda-12.0/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.0/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
风险提示:驱动安装失败可能导致图形界面无法启动。建议在安装前使用 timeshift 创建系统快照。如果使用双显卡(Intel + NVIDIA),需要在 BIOS 中设置为“Discrete Graphics”模式。

步骤 2:安装 ROS2 Humble

# 设置编码
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
# 添加 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
# 安装 ROS2 Humble 桌面版(包含 RViz、demo 等)
sudo apt update
sudo apt install ros-humble-desktop python3-argcomplete
# 安装开发工具
sudo apt install ros-dev-tools
# 环境变量
echo 'source /opt/ros/humble/setup.bash' >> ~/.bashrc
source ~/.bashrc

步骤 3:安装 Isaac Sim

推荐使用 pip 安装方式,它比 Omniverse Launcher 更轻量,且便于版本控制。

# 创建虚拟环境(Python 3.10)
python3 -m venv ~/isaacsim_env
source ~/isaacsim_env/bin/activate
# 安装 Isaac Sim 包
pip install isaacsim[all]==2023.1.1 --extra-index-url https://pypi.nvidia.com
# 验证安装
python -m isaacsim --help

如果网络受限,可以使用 Omniverse Launcher 安装。启动 Launcher 后,在“Exchange”中搜索“Isaac Sim”,选择 2023.1.1 版本,点击“Install”即可。安装路径默认为 ~/.local/share/ov/pkg/isaac_sim-2023.1.1。

步骤 4:配置 ROS2 桥接

# 安装 ros2_bridge 依赖
sudo apt install ros-humble-ros2bridge
# 在 Isaac Sim 的 Python 环境中安装 ros2 支持
pip install isaacsim-ros2-bridge==2023.1.1 --extra-index-url https://pypi.nvidia.com
# 设置 ROS2 与 Isaac Sim 的共享环境变量
echo 'export ROS_DOMAIN_ID=42' >> ~/.bashrc
echo 'export FASTRTPS_DEFAULT_PROFILES_FILE=/path/to/fastdds.xml' >> ~/.bashrc
source ~/.bashrc
经验提醒:ROS_DOMAIN_ID 必须一致,否则 Isaac Sim 中的话题无法被外部 ROS2 节点发现。建议在课程项目中统一使用 42,避免与其他实验冲突。

案例拆解:一次完整的 GPU 与依赖项验证

假设你已完成上述安装,现在需要验证环境是否真正可用。以下是一个典型的验证流程,包含关键命令和预期输出。

场景:你准备运行课程第一个示例——在 Isaac Sim 中加载一个差速 AGV 模型,并通过 ROS2 发布速度指令。但启动后 RViz 中看不到任何话题。

验证步骤:

  1. GPU 验证:运行 nvidia-smi,确认 GPU 状态为“P0”(最高性能状态),且显存使用率不为 0。如果显示“No running processes”,说明 Isaac Sim 未正确调用 GPU。
  2. Isaac Sim 自检:在 Isaac Sim 的 Python 环境中运行 python -m isaacsim --check,该命令会输出所有依赖项的版本和状态。重点关注“CUDA Runtime”和“PhysX”两项。
  3. ROS2 通信验证:启动 Isaac Sim 中的 ROS2 桥接节点后,在另一个终端运行 ros2 topic list。预期输出应包含 /cmd_vel、/odom、/scan 等话题。如果列表为空,检查桥接日志是否有“Failed to create subscriber”错误。
  4. 端到端测试:使用 ros2 topic pub /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.5}, angular: {z: 0.0}}" 发布速度指令,观察 Isaac Sim 视口中 AGV 是否前进。如果小车不动,打开 Isaac Sim 的“Physics”面板,检查“Gravity”是否启用。
验证项 命令 预期结果 失败排查方向
GPU 驱动 nvidia-smi 显示 GPU 型号和驱动版本 重新安装驱动,检查 BIOS 设置
CUDA 可用性 python -c "import torch; print(torch.cuda.is_available())" 输出 True 安装匹配的 PyTorch 版本
ROS2 桥接 ros2 node list 显示 /isaac_sim 节点 检查 LD_LIBRARY_PATH 是否包含 ROS2 库
PhysX 引擎 Isaac Sim 日志 无“PhysX”错误 更新 GPU 驱动,关闭其他占用 GPU 的程序

复盘:在上述案例中,如果 ros2 topic list 为空,最常见的原因是 FASTRTPS_DEFAULT_PROFILES_FILE 指向了不存在的文件,导致 DDS 通信失败。解决方法是删除该环境变量,或使用默认的 FastDDS 配置。另一个常见问题是 Isaac Sim 的 Python 环境与系统 Python 环境混淆,导致桥接包导入失败。务必使用 source ~/isaacsim_env/bin/activate 激活虚拟环境后再启动 Isaac Sim。

常见误区与总结复盘

误区 1:使用系统 Python 直接运行 Isaac Sim。Isaac Sim 依赖特定版本的 NumPy、CuPy 等库,系统 Python 可能已存在冲突版本。务必使用虚拟环境或 Isaac Sim 自带的 python.sh 脚本。
误区 2:忽略 ROS2 的 DDS 配置。在多机通信或复杂网络环境下,默认的 FastDDS 可能无法发现对方。建议在课程初期使用单机模式,并设置相同的 ROS_DOMAIN_ID。
误区 3:GPU 显存不足导致仿真崩溃。AGV 场景中如果加载高精度 LiDAR 点云和多个摄像头,显存占用可能超过 8GB。建议在“Preferences”中降低渲染分辨率,或使用“Headless”模式(无视口)运行仿真。