2. 环境搭建
在开始AGV小车运动控制与ROS2通信开发之前,搭建一个稳定、可复现的仿真环境是整个课程的基础。Isaac Sim 作为 NVIDIA Omniverse 平台上的机器人仿真应用,对硬件(尤其是GPU)和软件依赖(如CUDA、ROS2发行版)有严格的要求。本章将引导你从零开始,完成 Isaac Sim 的安装、ROS2 环境的配置,并系统性地验证 GPU 与关键依赖项,确保后续所有章节的代码和仿真能够顺利运行。
核心原理:理解 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
案例拆解:一次完整的 GPU 与依赖项验证
假设你已完成上述安装,现在需要验证环境是否真正可用。以下是一个典型的验证流程,包含关键命令和预期输出。
场景:你准备运行课程第一个示例——在 Isaac Sim 中加载一个差速 AGV 模型,并通过 ROS2 发布速度指令。但启动后 RViz 中看不到任何话题。
验证步骤:
- GPU 验证:运行
nvidia-smi,确认 GPU 状态为“P0”(最高性能状态),且显存使用率不为 0。如果显示“No running processes”,说明 Isaac Sim 未正确调用 GPU。 - Isaac Sim 自检:在 Isaac Sim 的 Python 环境中运行
python -m isaacsim --check,该命令会输出所有依赖项的版本和状态。重点关注“CUDA Runtime”和“PhysX”两项。 - ROS2 通信验证:启动 Isaac Sim 中的 ROS2 桥接节点后,在另一个终端运行
ros2 topic list。预期输出应包含/cmd_vel、/odom、/scan等话题。如果列表为空,检查桥接日志是否有“Failed to create subscriber”错误。 - 端到端测试:使用
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。
常见误区与总结复盘
python.sh 脚本。
ROS_DOMAIN_ID。