无人机仿真环境搭建_gazebo + ros 环境无人机仿真
下面给出一条 从零到可飞 的清晰路线图,并在每一步解释“为什么要这样做”。
默认操作系统为 Ubuntu 22.04 LTS(ROS 2 Humble 的官方平台);如无特别说明,命令均在终端中执行。
1 版本选择与总体架构
ros_ign_*
已过渡到 ros_gz_*
,Humble 上两者兼容 (GitHub)为什么不用 Garden / Harmonic?
Humble 的官方二进制桥接包仍以 Fortress 为基线;除非你愿意手动编译 ros_gz,对初学者并不划算。
2 基础环境
2.1 清理历史 Gazebo(可选)
sudo killall gzserver gzclient || truesudo apt-get remove --purge gazebo-* ignition-* -ysudo apt autoremove -ysudo rm /etc/apt/sources.list.d/gazebo-stable.list \\ /usr/share/keyrings/pkgs-osrf-archive-keyring.gpgsudo apt update
2.2 安装 ROS 2 Humble
(若已安装可跳过)
sudo apt update && sudo apt install curl gnupg lsb-release -ysudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \\ -o /usr/share/keyrings/ros-archive-keyring.gpgecho \"deb [arch=$(dpkg --print-architecture) \\ signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] \\ http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main\" | \\ sudo tee /etc/apt/sources.list.d/ros2.list > /dev/nullsudo apt updatesudo apt install ros-humble-desktop -yecho \'source /opt/ros/humble/setup.bash\' >> ~/.bashrc
2.3 建立个人工作空间
mkdir -p ~/ros2_ws/srccd ~/ros2_wscolcon buildecho \'source ~/ros2_ws/install/setup.bash\' >> ~/.bashrc
3 Gazebo Fortress 与 ROS‑Gazebo 桥
3.1 安装 Gazebo Fortress
sudo apt install -y wget gnupg lsb-releasewget https://packages.osrfoundation.org/gazebo.gpg -O /tmp/gz.keysudo install -m 644 /tmp/gz.key /usr/share/keyrings/pkgs-osrf-archive-keyring.gpgecho \"deb [arch=$(dpkg --print-architecture) \\ signed-by=/usr/share/keyrings/pkgs-osrf-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/nullsudo apt updatesudo apt install ignition-fortress -y
验证:
ign gazebo shapes.sdf # GUI 正常弹出即成功
3.2 安装 ros_gz 集成包
sudo apt install ros-humble-ros-gz-sim \\ ros-humble-ros-gz-bridge \\ ros-humble-gz-ros2-control # 如需 ros2_control
ros_gz_sim
提供 Ignition Gazebo 的 ROS‑launch 包;ros_gz_bridge
实现双向消息转换 (ROS Documentation)。
4 快速验收 “ROS ↔ Gazebo” 通路
# 终端 A:启动仿真(空世界)ros2 launch ros_gz_sim gz_sim.launch.py gz_args:=\"-r empty.sdf\" gui:=true use_sim_time:=true# 终端 B:查看话题ros2 topic list # 应出现 /clockros2 topic echo /clock # 时钟在运行
如要显式桥接键盘、激光、速度等,可用:
ros2 run ros_gz_bridge parameter_bridge \\ /world/empty/clock@rosgraph_msgs/msg/Clock@ignition.msgs.Clock
5 PX4 SITL 部署
PX4 在 v1.15 起正式将 Ignition Gazebo 列为默认;
gz_
前缀目标对应 Ignition,gazebo-classic
对应旧版 Gazebo Classic (PX4 Documentation)。
5.1 依赖与源码
sudo apt install git python3-pip ninja-build ccache \\ libignition-gazebo6-dev libignition-math6-dev -ycd ~git clone https://github.com/PX4/PX4-Autopilot.gitcd PX4-Autopilotgit checkout v1.15.4 # 或最新稳定标签git submodule update --init --recursive
5.2 编译 Ignition Gazebo 版本
make px4_sitl gz_x500 # x500 四旋翼示例# 如果只想启动 PX4 等待外部仿真器:# make px4_sitl none_x500
成功后应看到:
[px4] INFO [px4] Startup script returned successfullyINFO [commander] Takeoff detected
并自动弹出 Gazebo GUI 和 QGroundControl(如已安装)。
6 集成 XTDrone2(可选)
XTDrone2 已针对 PX4 1.15 + ROS 2 + Ignition 重构,可直接放进工作空间:
cd ~/ros2_ws/srcgit clone https://github.com/andy-zhuo-02/XTDrone2.gitcd ~/ros2_ws && colcon build
仓库内自带 launch/xtdrone_*.launch.py
,会同时拉起 PX4 SITL、Gazebo 场景、桥接和控制节点,真正做到“一键起飞”。
7 运行与调试流程示例
-
启动仿真
ros2 launch xtdrone2 bringup_drone.launch.py world:=simple_runway.sdf
-
检查时钟 / TF / 传感器话题
ros2 topic list | grep imu
-
发送 Offboard 控制(示例)
ros2 run mavros_offboard offboard_node --ros-args -p speed:=3.0
-
在 RViz2 查看点云 / 路径。
8 常见坑与解决思路
library ignition-transport6 not found
libignition-transport6-dev
sudo apt install libignition-transport6-dev
gazebo_msgs
冲突ros2 topic echo /clock
无输出use_sim_time
未打开source
各自 setup.bash
,检查 parameter_bridge
9 小结
-
ROS 2 Humble + Gazebo Fortress 是当前最稳的官方组合。
-
ros_gz_sim / bridge
让 ROS 消息与 Gazebo Transport 无缝互通。 -
PX4 v1.15 开始原生支持 Ignition Gazebo (
gz_*
目标)。 -
XTDrone2 提供现成世界/模型/控制脚本,显著降低无人机仿真门槛。
按本文步骤完成后,你即可:
-
在 Gazebo 中看到飞行器并通过 QGroundControl 连接。
-
用 ROS 2 节点读取 / 发布 IMU、激光、相机等话题。
-
撰写飞控、视觉、导航算法并在 SITL 中闭环测试,再迁移到真实硬件。
祝你仿真顺利,Happy Flying!
下面给出一份 自洽、可执行且按依赖顺序排列 的无人机仿真环境搭建指南,并说明每步操作的目的与常见坑。
假设操作系统为 Ubuntu 22.04 LTS(PX4 v1.13、ROS 2 Humble 和 Gazebo Fortress 的官方推荐环境)。
0. 总览:组件与角色
ros_gz_*
桥dev
分支为什么选 Fortress 而不是 Gazebo‑classic 11?
经典 Gazebo 11 是 PX4 v1.13 的“官方”组合;Ignition(Fortress)在 2024 年后已成为主线,且 ROS 2 Humble 官方桥接包默认对接 Ignition。若你更追求“稳”,可将本文的 Fortress 换成gazebo11
并以gazebo_ros_pkgs
做桥;否则按下文流程即可。
1. 安装基础依赖
sudo apt updatesudo apt install -y git curl gnupg lsb-release build-essential cmake ccache \\ python3-colcon-common-extensions python3-vcstool
-
目的:为 ROS 构建系统、PX4 编译器链、后续添加 PPA 做准备。
2. 安装 ROS 2 Humble
sudo apt install -y software-properties-commonsudo add-apt-repository universesudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \\ -o /usr/share/keyrings/ros-archive-keyring.gpgecho \"deb [arch=$(dpkg --print-architecture) \\ signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] \\ http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main\" | \\ sudo tee /etc/apt/sources.list.d/ros2.list > /dev/nullsudo apt updatesudo apt install -y ros-humble-desktop-fullecho \"source /opt/ros/humble/setup.bash\" >> ~/.bashrc
-
目的:提供 ROS 核心、Gazebo 桥模板消息以及 rviz、rosbag 等桌面工具。
3. 建立你的 ROS 2 工作空间(可选但推荐)
mkdir -p ~/ros2_ws/srccd ~/ros2_wscolcon buildecho \"source ~/ros2_ws/install/setup.bash\" >> ~/.bashrc
-
目的:隔离你未来自定义的 ROS 软件包,避免污染全局
/opt/ros
.
4. 彻底清理旧版 Gazebo/Ignition(若曾安装)
sudo killall gzserver gzclient ignition gazebo &>/dev/null || true # 终止残留进程sudo apt remove --purge -y gazebo-* ignition-* sdformat* # 卸载+清理配置sudo apt autoremove -ysudo rm -f /etc/apt/sources.list.d/gazebo-stable.listsudo rm -f /usr/share/keyrings/pkgs-osrf-archive-keyring.gpgsudo apt update
-
目的:防止旧包与 Fortress 混装产生链依赖地狱。
5. 安装 Ignition Gazebo Fortress
# 添加 OSRF 公钥与软件源sudo wget https://packages.osrfoundation.org/gazebo.gpg \\ -O /usr/share/keyrings/pkgs-osrf-archive-keyring.gpgecho \"deb [arch=$(dpkg --print-architecture) \\ signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] \\ https://packages.osrfoundation.org/gazebo/ubuntu-stable \\ $(lsb_release -cs) main\" | \\ sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/nullsudo apt updatesudo apt install -y ignition-fortress # 元包,含 GUI、渲染、传感器、Physics
验证
ign gazebo shapes.sdf
-
目的:确保 Gazebo GUI 能正常启动;若看见彩色几何体不停旋转即成功。
6. ROS 2 ↔ Ignition 桥与一键启动器
sudo apt install -y \\ ros-humble-ros-gz-sim # 启动脚本 + 系统插件sudo apt install -y \\ ros-humble-ros-gz-bridge # 动态话题桥sudo apt install -y \\ ros-humble-gz-ros2-control # 若需 ros2_control 驱动仿真机器人
对应表:
Gazebo‑classic ↔gazebo_ros_pkgs
Ignition Gazebo ↔ros_gz_*
(前身 ros_ign)
7. 环境变量整理
把下列行 一次性 加到 ~/.bashrc
末尾(顺序重要):
# ROS 2source /opt/ros/humble/setup.bash# Ignition Fortresssource /usr/share/ignition/gazebo6/setup.sh# (可选)你的工作区source ~/ros2_ws/install/setup.bash
-
目的:打开任意新终端即可获得 ROS、Ignition、个人包三套环境变量。
8. 快速自测:一次性起 Sim + 桥 + GUI
ros2 launch ros_gz_sim gz_sim.launch.py \\ gz_args:=\"-r empty.sdf\" \\ gui:=true \\ use_sim_time:=true
检查:
ros2 topic echo /clock # 应持续输出 sim 时钟
-
失败排查:若
/clock
不存在,多半是桥配置缺失;见下节自定义 YAML。
9. 高级:用 YAML 定制自动桥接
~/ros2_ws/bridge_clock.yaml
示例
- ros_topic_name: \"/clock\" gz_topic_name: \"/world/empty/clock\" ros_type_name: \"rosgraph_msgs/msg/Clock\" gz_type_name: \"ignition.msgs.Clock\"
启动:
ros2 launch ros_gz_sim gz_sim.launch.py \\ gz_args:=\"-r empty.sdf\" \\ gui:=true \\ use_sim_time:=true \\ config_file:=\"$HOME/ros2_ws/bridge_clock.yaml\"
-
目的:无需手动
parameter_bridge
;一条命令搞定 Gazebo+桥。
10. 安装并编译 PX4 v1.13(Gazebo‑classic 默认)
两条路线
经典路线(稳定):PX4 ↔ Gazebo‑classic 11,使用 PX4 内置的
Tools/sitl_gazebo
插件。现代路线(实验性):PX4 ↔ Ignition Gazebo,需
px4_gz
插件(PX4 master 分支才有)。
下文以 经典路线 为例,因为 XTDrone 目前仍依赖 classic Gazebo。
10.1 系统依赖
sudo apt install -y \\ gazebo11 libgazebo-dev \\ libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \\ protobuf-compiler python3-jinja2
10.2 获取并编译
git clone https://github.com/PX4/PX4-Autopilot.git ~/PX4_Autopilotcd ~/PX4_Autopilotgit checkout v1.13.0bash ./Tools/setup/ubuntu.sh # 官方脚本,自动装交叉工具链source ~/.bashrc # 脚本会添加 PATHmake px4_sitl_default gazebo # 首次编译较慢
11. 集成 XTDrone
git clone https://gitee.com/robin_shaun/XTDrone.git ~/XTDronecd ~/XTDrone# 按 README 选择与 PX4 版本匹配的分支# 复制模型/世界/插件cp -r sitl_config/launch/* ~/PX4_Autopilot/launch/cp -r sitl_config/worlds/* ~/PX4_Autopilot/Tools/sitl_gazebo/worlds/cp -r sitl_config/models/* ~/PX4_Autopilot/Tools/sitl_gazebo/models/cp -r sitl_config/gazebo_plugin/*/* ~/PX4_Autopilot/Tools/sitl_gazebo/src/cp sitl_config/CMakeLists.txt ~/PX4_Autopilot/Tools/sitl_gazebo/
重新编译
cd ~/PX4_Autopilotrm -rf build/make px4_sitl_default gazebo
-
常见错误
-
找不到
libgazebo11-dev
→ 经典与 Ignition 混装;确保只装了一个系列。 -
protobuf 版本不符 →
sudo apt install protobuf-compiler
。
-
12. 启动一架仿真无人机
# 终端 1:PX4 仿真cd ~/PX4_Autopilotmake px4_sitl_default gazebo # 自动拉起 Gazebo‑classic GUI# 终端 2:桥接 MAVROS / 自己的 ROS 节点(可选)ros2 launch mavros px4.launch.py fcu_url:=udp://localhost:14540@
如果你执意使用 Ignition Fortress 而非 classic:
把 PX4 升级到 master;
编译
make px4_sitl_default px4_gz
;用
ros_gz_*
做桥;
但 XTDrone 需自行修改 URDF/SDF 与插件,工作量较大。
13. 典型工作流小结
-
打开新终端,自动
source
环境。 -
make px4_sitl_default gazebo
(PX4+Gazebo‑classic) 或ros2 launch ros_gz_sim ...
(Ignition 侧) -
启动你的 ROS 控制节点 / PX4‑MAVROS / MissionPlanner 等。
-
在 Rviz 或 Gazebo GUI 中观察传感器 / /clock / /tf。
-
用
ros2 topic pub /model//cmd_vel ...
做闭环测试。
14. 常见疑难速查
undefined reference to \'gazebo::msgs::XYZ\'
during PX4 buildsudo apt purge ignition-*
或反之/clock
不发布gz: command not found
ign gazebo ...
才是 Ignition CLILIBGL_ALWAYS_SOFTWARE=1
临时软件渲染结语
以上流程把 环境清理 → 组件安装 → 桥接验证 → PX4 & XTDrone 编译 → 仿真起飞 的逻辑拆解为可追踪的 14 步,避免版本混杂和循环依赖。
如需切换到完全基于 Ignition 的现代栈,请先让 basic demo 正常运行,再逐步把 PX4/XTDrone 切换到 px4_gz
与 SDF > 1.9 的格式,以免一步到位时排错成本过高。祝你飞行顺利、仿真稳定!