2. 仿真环境搭建:Ubuntu系统配置、ROS2 Humble安装、Gazebo Fortress安装、环境变量与依赖检查
说实话,搭建仿真环境这件事,看着简单,但坑是真不少。我见过太多同学卡在环境配置上,一卡就是两三天。所以这一章,咱们把每一步都走扎实。
你想想看,具身智能的仿真联调,底层就靠三样东西:操作系统、中间件、仿真引擎。Ubuntu是地基,ROS2是神经,Gazebo是身体。哪个出问题,后面都跑不起来。
核心三件套版本对应关系
Ubuntu 22.04 + ROS2 Humble + Gazebo Fortress,这是官方钦定的黄金组合。别乱改版本,否则依赖冲突能让你怀疑人生。
2.1 Ubuntu 22.04 系统配置
我个人习惯用Ubuntu 22.04 LTS桌面版。如果你用服务器版,后面调试可视化工具会多很多麻烦。
装完系统后,第一件事不是装ROS,而是换源。国内网络环境你懂的,不换源的话,一个包下载半小时。
# 备份原源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 替换为清华源(选一个快的就行)
sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
# 更新
sudo apt update && sudo apt upgrade -y
小技巧:换源后记得检查一下系统语言。我建议保留英文环境,否则终端里有些路径名带中文,脚本解析会报错。
接下来装一些基础依赖。这些包后面编译ROS2包和Gazebo插件都会用到:
sudo apt install -y \
build-essential \
cmake \
git \
wget \
curl \
python3-pip \
python3-venv \
pkg-config \
libssl-dev \
libffi-dev \
libncurses-dev \
libyaml-dev
嗯,这里要注意:python3-pip 和 python3-venv 很多人会漏掉。我遇到过好几次,后面装colcon的时候报错,查了半天发现是pip没装。
2.2 ROS2 Humble 安装
ROS2 Humble 是2022年的LTS版本,支持到2027年。为什么选它?因为Gazebo Fortress只跟Humble和Iron搭配得好。Iron太新,社区包还不全。
安装方式我推荐用deb包,别自己编译。编译一次两小时,还不一定过。
# 设置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
export LANG=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桌面版(包含rqt、rviz2等可视化工具)
sudo apt update
sudo apt install ros-humble-desktop -y
避坑指南:我曾经在虚拟机里装ROS2,结果发现ros-humble-desktop包太大,磁盘空间不够。建议至少预留25GB。另外,虚拟机要开启3D加速,否则rviz2跑起来卡成PPT。
装完后,验证一下:
# 检查ROS2环境
source /opt/ros/humble/setup.bash
ros2 --version
# 跑个talker-listener测试
ros2 run demo_nodes_cpp talker &
ros2 run demo_nodes_cpp listener
如果能看到节点在收发消息,说明ROS2装好了。如果报错,多半是环境变量没source,或者网络源有问题。
2.3 Gazebo Fortress 安装
Gazebo Fortress 是Gazebo的第八代版本,代号Fortress。它跟ROS2 Humble是官方配对。
安装方式有两种:二进制安装和源码编译。我建议用二进制,省时间。
# 添加Gazebo源
sudo apt update
sudo apt install wget
sudo wget https://packages.osrfoundation.org/gazebo.gpg -O /usr/share/keyrings/gazebo-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/gazebo-archive-keyring.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null
# 安装Gazebo Fortress
sudo apt update
sudo apt install ignition-fortress -y
注意,这里包名叫 ignition-fortress,不是 gazebo-fortress。Gazebo从第六代开始改名Ignition,但社区还是习惯叫Gazebo。别搜错了包。
验证安装:
# 启动Gazebo服务端
ign gazebo --server --headless -v 4
# 如果能正常启动不报错,说明安装成功
# 再试试图形界面(如果有桌面环境)
ign gazebo -v 4
个人经验:我第一次装Fortress时,启动后黑屏。后来发现是显卡驱动问题。如果你用NVIDIA显卡,记得装驱动:sudo apt install nvidia-driver-535。Intel集显一般没问题。
2.4 环境变量与依赖检查
装完三件套,最关键的步骤来了:配置环境变量。很多人装完就跑,结果ros2命令找不到,gazebo也启动不了。
我习惯把source命令写到 ~/.bashrc 里,这样每次开终端自动加载:
# 编辑 ~/.bashrc
echo 'source /opt/ros/humble/setup.bash' >> ~/.bashrc
echo 'source /usr/share/gazebo/setup.bash' >> ~/.bashrc
# 如果使用colcon编译工作空间,再加一句
echo 'source ~/ros2_ws/install/setup.bash' >> ~/.bashrc
# 重载配置
source ~/.bashrc
然后检查环境变量是否生效:
# 检查ROS2环境变量
echo $ROS_DISTRO
# 应该输出: humble
# 检查Gazebo环境变量
echo $IGN_GAZEBO_SYSTEM_PLUGIN_PATH
# 应该输出非空路径
# 检查Python环境
python3 -c "import rclpy; print('rclpy OK')"
python3 -c "import ignition; print('ignition OK')"
如果某个变量为空,说明source没成功。检查一下路径对不对,或者是不是有多个版本的ROS2冲突。
我曾经踩过的坑:同时装了ROS1 Noetic和ROS2 Humble,结果source顺序搞反了,ROS2的命令被ROS1覆盖。解决办法是只source当前需要的版本,或者用ros2命令的路径。
最后,做一个完整的依赖检查脚本,一键验证所有组件:
#!/bin/bash
# check_env.sh - 环境依赖检查脚本
echo "=== ROS2 检查 ==="
ros2 --version || echo "❌ ROS2 未安装"
echo "=== Gazebo 检查 ==="
ign gazebo --version || echo "❌ Gazebo 未安装"
echo "=== Python 包检查 ==="
python3 -c "import rclpy; print('✅ rclpy')" 2>/dev/null || echo "❌ rclpy"
python3 -c "import ignition; print('✅ ignition')" 2>/dev/null || echo "❌ ignition"
python3 -c "import numpy; print('✅ numpy')" 2>/dev/null || echo "❌ numpy"
echo "=== 环境变量检查 ==="
[ -n "$ROS_DISTRO" ] && echo "✅ ROS_DISTRO=$ROS_DISTRO" || echo "❌ ROS_DISTRO 未设置"
[ -n "$IGN_GAZEBO_SYSTEM_PLUGIN_PATH" ] && echo "✅ IGN_GAZEBO_SYSTEM_PLUGIN_PATH 已设置" || echo "❌ 未设置"
echo "=== 系统依赖检查 ==="
dpkg -l | grep -q "libignition" && echo "✅ libignition 已安装" || echo "❌ libignition 未安装"
dpkg -l | grep -q "libpython3" && echo "✅ libpython3 已安装" || echo "❌ libpython3 未安装"
把这个脚本保存为 check_env.sh,运行 bash check_env.sh。如果所有项都打勾,恭喜你,环境搭好了。
2.5 知识体系总览
下面这张图,把整个环境搭建的依赖关系画清楚了。你照着这个结构检查,不会漏项。
这张图里,从上到下是依赖关系。Ubuntu在最底层,上面是ROS2和Gazebo,再往上是各自的组件,最后通过环境变量串联起来。你检查环境时,也按这个顺序来:先看系统,再看中间件,最后看组件和变量。
总结一下关键点:
- 版本必须严格对应:Ubuntu 22.04 + ROS2 Humble + Gazebo Fortress
- 换源、装基础依赖、配环境变量,三步缺一不可
- 用
check_env.sh脚本做最终验证,别凭感觉 - 遇到问题先看终端报错,别盲目重装