当前位置: 首页 > news >正文

无人机仿真环境搭建

下面给出一条 从零到可飞 的清晰路线图,并在每一步解释“为什么要这样做”。
默认操作系统为 Ubuntu 22.04 LTS(ROS 2 Humble 的官方平台);如无特别说明,命令均在终端中执行。


1  版本选择与总体架构

角色建议版本说明
ROS 2 发行版Humble Hawksbill(LTS,维护到 2027 年)无人机算法与上层应用运行环境
Gazebo(Ignition)Fortress (‑gz 6)Humble 官方配套版本,二进制包完备、API 稳定 (Gazebo Sim)
ROS↔Gazebo 桥接ros_gz 系列包ros_ign_* 已过渡到 ros_gz_*,Humble 上两者兼容 (GitHub)
飞控 / SITLPX4 v1.15.x(当前稳定分支,2025‑02 发布 v1.15.4)(releasealert.dev)官方已将 Ignition Gazebo 定为首选仿真后端
无人机场景与脚本XTDrone2(PX4 v1.15 + ROS 2 + Gazebo Ignition)(GitHub)较旧的 XTDrone(ROS 1 / PX4 1.13)仍可用,但推荐直接使用新分支

为什么不用 Garden / Harmonic?
Humble 的官方二进制桥接包仍以 Fortress 为基线;除非你愿意手动编译 ros_gz,对初学者并不划算。


2  基础环境

2.1 清理历史 Gazebo(可选)

sudo killall gzserver gzclient || true
sudo apt-get remove --purge gazebo-* ignition-* -y
sudo apt autoremove -y
sudo rm /etc/apt/sources.list.d/gazebo-stable.list \/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
sudo apt update

2.2 安装 ROS 2 Humble

(若已安装可跳过)

sudo apt update && sudo apt install curl gnupg lsb-release -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 $(lsb_release -cs) main" | \sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update
sudo apt install ros-humble-desktop -y
echo 'source /opt/ros/humble/setup.bash' >> ~/.bashrc

2.3 建立个人工作空间

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
colcon build
echo 'source ~/ros2_ws/install/setup.bash' >> ~/.bashrc

3  Gazebo Fortress 与 ROS‑Gazebo 桥

3.1 安装 Gazebo Fortress

sudo apt install -y wget gnupg lsb-release
wget https://packages.osrfoundation.org/gazebo.gpg -O /tmp/gz.key
sudo install -m 644 /tmp/gz.key /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
echo "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/null
sudo apt update
sudo 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            # 应出现 /clock
ros2 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.git
cd PX4-Autopilot
git 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 successfully
INFO  [commander] Takeoff detected

并自动弹出 Gazebo GUI 和 QGroundControl(如已安装)。


6  集成 XTDrone2(可选)

XTDrone2 已针对 PX4 1.15 + ROS 2 + Ignition 重构,可直接放进工作空间:

cd ~/ros2_ws/src
git clone https://github.com/andy-zhuo-02/XTDrone2.git
cd ~/ros2_ws && colcon build

仓库内自带 launch/xtdrone_*.launch.py,会同时拉起 PX4 SITL、Gazebo 场景、桥接和控制节点,真正做到“一键起飞”。


7  运行与调试流程示例

  1. 启动仿真

    ros2 launch xtdrone2 bringup_drone.launch.py world:=simple_runway.sdf
    
  2. 检查时钟 / TF / 传感器话题

    ros2 topic list | grep imu
    
  3. 发送 Offboard 控制(示例)

    ros2 run mavros_offboard offboard_node --ros-args -p speed:=3.0
    
  4. 在 RViz2 查看点云 / 路径


8  常见坑与解决思路

症状可能原因处理办法
library ignition-transport6 not found缺少 libignition-transport6-devsudo apt install libignition-transport6-dev
PX4 编译报 gazebo_msgs 冲突系统残留 Gazebo Classic 包重新执行第 2.1 步完全清理
GUI 打开黑屏NVIDIA 独显驱动 / Wayland切换到 Xorg 或更新显卡驱动
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 提供现成世界/模型/控制脚本,显著降低无人机仿真门槛。

按本文步骤完成后,你即可:

  1. 在 Gazebo 中看到飞行器并通过 QGroundControl 连接。

  2. 用 ROS 2 节点读取 / 发布 IMU、激光、相机等话题。

  3. 撰写飞控、视觉、导航算法并在 SITL 中闭环测试,再迁移到真实硬件。

祝你仿真顺利,Happy Flying!

下面给出一份 自洽、可执行且按依赖顺序排列 的无人机仿真环境搭建指南,并说明每步操作的目的与常见坑。
假设操作系统为 Ubuntu 22.04 LTS(PX4 v1.13、ROS 2 Humble 和 Gazebo Fortress 的官方推荐环境)。


0. 总览:组件与角色

组件版本/包作用互联方式
ROS 2Humble Hawksbill无人机高层算法、话题通信框架原生
Ignition GazeboFortress (gazebo6)3D 物理/视觉仿真ros_gz_*
PX4 Autopilotv1.13.0 (稳定版)无人机飞控 SITL与 Gazebo 通过 UDP/MAVLink 或 Ignition 插件对接
XTDronedev 分支PX4‑friendly 的模型/世界/启动脚本复制到 PX4 仓库
ros_gz_bridge / ros_gz_simROS ↔ Ignition 桥 & 启动器话题类型映射、一次性启动 GazeboROS 包

为什么选 Fortress 而不是 Gazebo‑classic 11?
经典 Gazebo 11 是 PX4 v1.13 的“官方”组合;Ignition(Fortress)在 2024 年后已成为主线,且 ROS 2 Humble 官方桥接包默认对接 Ignition。若你更追求“稳”,可将本文的 Fortress 换成 gazebo11 并以 gazebo_ros_pkgs 做桥;否则按下文流程即可。


1. 安装基础依赖

sudo apt update
sudo 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-common
sudo add-apt-repository universe
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 $(lsb_release -cs) main" | \sudo tee /etc/apt/sources.list.d/ros2.list > /dev/nullsudo apt update
sudo apt install -y ros-humble-desktop-full
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
  • 目的:提供 ROS 核心、Gazebo 桥模板消息以及 rviz、rosbag 等桌面工具。


3. 建立你的 ROS 2 工作空间(可选但推荐)

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
colcon build
echo "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 -y
sudo rm -f /etc/apt/sources.list.d/gazebo-stable.list
sudo rm -f /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
sudo apt update
  • 目的:防止旧包与 Fortress 混装产生链依赖地狱。


5. 安装 Ignition Gazebo Fortress

# 添加 OSRF 公钥与软件源
sudo wget https://packages.osrfoundation.org/gazebo.gpg \-O /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
echo "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 update
sudo 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 2
source /opt/ros/humble/setup.bash
# Ignition Fortress
source /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 默认)

两条路线

  1. 经典路线(稳定):PX4 ↔ Gazebo‑classic 11,使用 PX4 内置的 Tools/sitl_gazebo 插件。

  2. 现代路线(实验性):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_Autopilot
cd ~/PX4_Autopilot
git checkout v1.13.0
bash ./Tools/setup/ubuntu.sh            # 官方脚本,自动装交叉工具链
source ~/.bashrc                        # 脚本会添加 PATH
make px4_sitl_default gazebo            # 首次编译较慢

11. 集成 XTDrone

git clone https://gitee.com/robin_shaun/XTDrone.git ~/XTDrone
cd ~/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_Autopilot
rm -rf build/
make px4_sitl_default gazebo
  • 常见错误

    1. 找不到 libgazebo11-dev → 经典与 Ignition 混装;确保只装了一个系列。

    2. protobuf 版本不符 → sudo apt install protobuf-compiler


12. 启动一架仿真无人机

# 终端 1:PX4 仿真
cd ~/PX4_Autopilot
make 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. 典型工作流小结

  1. 打开新终端,自动 source 环境。

  2. make px4_sitl_default gazebo (PX4+Gazebo‑classic) ros2 launch ros_gz_sim ... (Ignition 侧)

  3. 启动你的 ROS 控制节点 / PX4‑MAVROS / MissionPlanner 等。

  4. 在 Rviz 或 Gazebo GUI 中观察传感器 / /clock / /tf。

  5. ros2 topic pub /model/<uav>/cmd_vel ... 做闭环测试。


14. 常见疑难速查

现象可能原因处理
undefined reference to 'gazebo::msgs::XYZ' during PX4 buildGazebo11 与 Fortress 头文件混合sudo apt purge ignition-* 或反之
/clock 不发布没有桥接、YAML 配置错路径检查 `ros2 topic list
gz: command not found安装了 Fortress (ign) 而使用了 classic 命令ign gazebo ... 才是 Ignition CLI
GUI 打不开,报 GLX显卡驱动与 hardware acceleration更新 NVIDIA 驱动或 LIBGL_ALWAYS_SOFTWARE=1 临时软件渲染

结语

以上流程把 环境清理 → 组件安装 → 桥接验证 → PX4 & XTDrone 编译 → 仿真起飞 的逻辑拆解为可追踪的 14 步,避免版本混杂和循环依赖。
如需切换到完全基于 Ignition 的现代栈,请先让 basic demo 正常运行,再逐步把 PX4/XTDrone 切换到 px4_gz 与 SDF > 1.9 的格式,以免一步到位时排错成本过高。祝你飞行顺利、仿真稳定!

http://www.dtcms.com/a/321587.html

相关文章:

  • 二叉树实现
  • 【科研绘图系列】R语言绘制气泡图
  • [LLM 应用评估] 提示词四大要素 | 评估样本_单次交互快照 | 数据集 | Hugging Face集成
  • 杰理ac791 [Info]: [LL_S]Recv - LL_CHANNEL_MAP_REQ
  • JAVA基础-集合框架
  • 特征值和特征向量的直觉
  • 自适应反步控制:理论与设计
  • 网络基础浅谈
  • NVME M.2 SSD固态硬盘掉盘:也可能是主板出问题
  • 【Layui】调整 Layui 整体样式大小的方法
  • 【Lua】XLua一键构建工具
  • 关于 Rust 异步底层实现中 waker 的猜测
  • Xiphos 配备 GTH 计算机模块的 Q8J 低 SWaP
  • 基于LLM的Chat应用测试方法探索:系统化评估与持续优化
  • python之注册机制总结
  • 等保测评-Nginx中间件
  • 强光干扰下误报率↓82%!陌讯多模态融合算法在高空抛物检测的实战优化
  • 微软发布Project Ire项目:可自主检测恶意软件的人工智能系统
  • docker下载安装和使用(Hyper-V方式)
  • 信息系统项目范围管理高频题库精讲
  • windows拉取镜像失败
  • 双驱智造革命:物理方程+工业数据训练,突破增材制造温度场预测瓶颈
  • CETOL 6σ 帮助提升活检器械精度并降低制造成本
  • Horse3D引擎研发记录(二):基于QtOpenGL使用仿Three.js的BufferAttribute结构重构三角形绘制
  • 复数的复平面加减乘除运算与在极坐标中的运算对应关系
  • 算法训练之栈
  • provide 和 inject 最佳实践
  • 多任务实时进度监控系统:基于ABP vNext与SignalR的架构实践
  • [激光原理与应用-175]:测量仪器 - 频谱型 - 拉曼光谱仪的工作原理、内部组成、核心芯片、核心算法
  • 项目一系列-第3章 若依框架入门