ROS Noetic搭建PX4仿真环境
发表于:2026-05-24 | 分类: Linux ROS

参考链接:
https://blog.csdn.net/HuangChen666/article/details/128754106
https://www.yuque.com/xtdrone/manual_cn/basic_config_13
image.png

安装mavros

MAVROS是ROS(机器人操作系统)下的开源功能包,核心作用是搭建ROS与MAVLink协议设备(如PX4飞控)之间的通信桥梁,适配ROS1与ROS2版本(含MAVROS2)。

它可实现ROS话题、服务与飞控指令、状态数据的双向互通,既能向PX4飞控下发起飞、悬停、返航等控制指令,也能实时订阅GPS位置、飞行姿态、电池状态等遥测数据。

作为无人机智能化开发的核心工具,MAVROS广泛应用于避障算法、目标追踪、路径规划等场景,也是Offboard模式调试的关键支撑,常与PX4飞控配合使用,构成无人机开发的标准架构。

1
2
3
4
sudo apt install ros-noetic-mavros ros-noetic-mavros-extras  # for ros-noetic
wget https://gitee.com/robin_shaun/XTDrone/raw/master/sitl_config/mavros/install_geographiclib_datasets.sh
sudo chmod a+x ./install_geographiclib_datasets.sh
sudo ./install_geographiclib_datasets.sh #这步需要装一段时间

安装PX4

编译安装

Github下载

1
2
3
4
5
6
git clone https://github.com/PX4/PX4-Autopilot.git
mv PX4-Autopilot PX4_Firmware
cd PX4_Firmware
git checkout -b xtdrone/dev v1.13.2
git submodule update --init --recursive
make px4_sitl_default gazebo

可下载上述安装包

1
2
cd PX4_Firmware
make px4_sitl_default gazebo

编译完成后,会弹出Gazebo界面,将其关闭即可。
修改 ~/.bashrc,加入以下代码,注意路径匹配,前两个source顺序不能颠倒。
我用的是zsh
所以添加这些到~/.zshrc

1
2
3
4
# PX4 Gazebo simulation environment
source ~/PX4_Firmware/Tools/setup_gazebo.bash ~/PX4_Firmware/ ~/PX4_Firmware/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4_Firmware
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4_Firmware/Tools/sitl_gazebo

改变飞机模型

搭载不同传感器

1
Tools/sitl_gazebo/models/

image.png
修改launch文件的sdf属性
``

1
2
3
4
echo "commander takeoff" | python3 Tools/mavlink_shell.py 127.0.0.1:14550
echo "commander land" | python3 Tools/mavlink_shell.py 127.0.0.1:14550
cd ~/PX4_Firmware
roslaunch px4 indoor1.launch

image.png

1
roslaunch px4 outdoor1.launch

image.png
需要下再好gazebo的模型不然运行时会加载不出来,保存到~/.gazebo/models目录下

安装XTDrone

XTDrone是一款基于ROS、Gazebo与PX4开发的开源通用无人机仿真平台,可看作无人机开发的“虚拟沙盒”,核心用于无人机算法调试、功能验证与开发练习,无需真机即可完成各类测试,安全且高效。

它支持多旋翼、固定翼、VTOL等多种机型,还可适配无人车、无人船、机械臂等多种无人系统,能实现多机编队、自主导航、SLAM、目标追踪等多种场景的仿真。其核心优势是模块化设计,可灵活修改仿真模型与参数,且在平台上验证通过的算法,能方便地部署到真实无人机上。

XTDrone与PX4飞控配合紧密,可通过相关通信工具实现ROS与PX4飞控的通信,构建起“仿真环境-飞控”的完整开发架构,是无人机智能化开发与调试的重要工具。

安装QGC

QGroundControl (QGC) 是一款开源、跨平台、专业级的无人机 / 无人系统地面控制站(GCS),基于 MAVLink 协议,为 PX4、ArduPilot 等主流飞控提供全链路控制、任务规划与数据分析能力。
完全适配 PX4 仿真。

官网: https://qgroundcontrol.com/

image.png

  1. On the command prompt enter:

    1
    2
    3
    4
    5
    sudo usermod -a -G dialout $USER
    sudo apt-get remove modemmanager -y
    sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y
    sudo apt install libfuse2 -y
    sudo apt install libxcb-xinerama0 libxkbcommon-x11-0 libxcb-cursor-dev -y
  2. Logout and login again to enable the change to user permissions.

    To install QGroundControl:

  3. Download QGroundControl-x86_64.AppImage.

  4. Install (and run) using the terminal commands:

    1
    2
    chmod +x ./QGroundControl-x86_64.AppImage
    ./QGroundControl-x86_64.AppImage (or double click)

安装版本为v3.5.5版本,参考github链接 : https://github.com/mavlink/qgroundcontrol/releases
安装过程用Claude code解决

在设置中可打开虚拟按钮操控
image.png
左摇杆为升降高度,右摇杆为前后左右

安装Lightning-LM

Lightning-Speed Lidar Localization and Mapping

Lightning-LM 是一个完整的激光建图+定位模块。

Lightning-LM特性:

  1. [done] 完整的3D Lidar SLAM,快速的LIO前端(AA-FasterLIO),标配
  2. [done] 3D至2D地图转换(g2p5),选配,选上的话会输出实时的2D栅格,可以保存
  3. [done] 实时回环检测,标配,选上的话会进行后端回环检测并闭环
  4. [done] 流畅的高精3D Lidar 定位,标配
  5. [done] 地图分区动态加载方案,适用大场景
  6. [done] 动静态图层分离定位,适配动态场景,可选择动态图层的策略,选配,选上的话会保存动态图层的地图内容,有三种策略可以选(短期、中期、永久),默认永久
  7. [done] 高频率IMU平滑输出,标配,100Hz
  8. GPS地理信息关联,选配 (TODO)
  9. 车辆里程计输入,选配 (TODO)
  10. [done] 轻量优化库miao以及增量式优化(来自g2o,但更轻更快,支持增量优化,不需要重新构建优化模型),标配,在回环、定位中均有用到
  11. [done] 离线与在线两种验证方案。离线可以断点调试,一致性强。在线可以多线程并发,处理速度快,可以设置动态跳帧,占用低。
  12. [done] 基于外推器和平滑器的高频率输出,平滑因子可调
  13. [done] 高性能计算:以上这些特性在纯CPU端不到一个核心就可以运行(在线定位0.8个核,建图1.2个核,32线雷达,无UI情况)
1
git clone https://github.com/gaoxiang12/lightning-lm.git

因为此算法适配的是ROS2,需要改为ROS1 noteic
此步骤采用CC来辅助实现

采用NCLT数据集测试
离线建图指令为

1
rosrun lightning run_slam_offline --config /home/ychooo/ROS_WS/Lightning_ws/src/lightning-lm/config/default_nclt.yaml --input_bag /media/ychooo/KINGIDISK/Datasets/nclt/20130110.bag

已成功运行
image.png
结束后会自动保存至data/new_map目录下

原作者提供了三种msg类型: PointCloud, PointCloud2 和 CustomMsg,因此可以兼容A-LOAM,Fast-LIO和R3live等slam算法。

结论:错误原因是 Gazebo 仿真数据中 Livox 点云的有效数据不足

根据我的分析:

  1. 你使用的是 Gazebo 仿真,/scan topic 是 livox_ros_driver/CustomMsg 格式
  2. AviaHandler 过滤条件太严格 — Gazebo 模拟器产生的 Livox 消息中 tag 和 line 字段可能不符合 Livox
    官方驱动设置的有效值(tag: 0x00 或 0x10,line: < 6)
  3. 这导致每帧点云几乎为空 → EKF 状态估计失败 → 后续处理崩溃

    建议修改 src/faster-lio/src/pointcloud_preprocess.cc 中的 AviaHandler 函数,放宽对 tag 和 line
    的过滤条件,或者改用适配仿真数据的 launch 配置。

    你想让我帮你:

  4. 修改 AviaHandler 使其兼容 Gazebo 仿真数据?

  5. 还是改用 Velodyne 配置(如果 Gazebo 发布的是标准格式)?
上一篇:
下一篇:
VMware在Ubuntu22.04驱动LivoxMid360s