1. 环境准备与工具链搭建1.1 操作系统与基础依赖推荐使用Ubuntu 18.04 LTS作为开发环境这是目前PX4和ROS Melodic最稳定的支持版本。实测在Ubuntu 20.04上会遇到Gazebo版本兼容性问题而Ubuntu 22.04则需要手动降级多个关键组件。安装完成后首先执行sudo apt update sudo apt upgrade -y sudo apt install -y git cmake python3-pip python3-dev特别提醒如果系统已安装Anaconda建议在.bashrc中注释conda初始化代码避免后续Python环境冲突。我就曾因为conda环境导致PX4编译时找不到empy模块折腾了整整一天。1.2 ROS Melodic完整安装ROS作为无人机仿真的神经系统需要完整安装桌面版sudo sh -c echo deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main /etc/apt/sources.list.d/ros-latest.list sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update sudo apt install ros-melodic-desktop-full安装完成后务必执行环境变量配置echo source /opt/ros/melodic/setup.bash ~/.bashrc source ~/.bashrc验证安装是否成功打开新终端输入roscore应该能看到ROS master启动日志。我习惯用rosdep update提前更新依赖数据库避免后续编译时卡在依赖解析环节。2. PX4固件与仿真环境配置2.1 PX4源码编译推荐使用阿木实验室的Prometheus_PX4分支这个版本针对国内开发者做了优化git clone https://gitee.com/amovlab/prometheus_px4.git cd prometheus_px4 git submodule update --init --recursive编译前有个关键步骤安装Python依赖时务必使用--user参数避免污染系统环境sudo -H python3 -m pip install --user toml empy jinja2 packaging首次编译建议使用jMAVSim轻量级模拟器验证基础功能make px4_sitl jmavsim如果看到终端显示无人机模型和地面站连接提示说明基础环境已就绪。我在第一次编译时遇到bloaty组件下载失败手动解决方案如下git clone --recursive https://github.com/google/bloaty.git /tmp/bloaty cd /tmp/bloaty cmake -GNinja . ninja bloaty sudo cp bloaty /usr/local/bin/2.2 Gazebo仿真环境集成Gazebo是物理仿真核心需要单独安装ROS插件sudo apt install ros-melodic-gazebo-ros-pkgs ros-melodic-gazebo-ros-controlPX4与Gazebo的版本匹配是关键。实测Gazebo 9与PX4 v1.11兼容性最好。如果遇到模型加载失败检查~/.gazebo/models目录是否存在缺失时可手动复制cp -r prometheus_px4/Tools/sitl_gazebo/models ~/.gazebo/编译Gazebo仿真目标时推荐使用多线程加速make px4_sitl gazebo_p450 -j$(nproc)常见报错处理当出现[Err] [REST.cc:205] Error in REST request时这是Gazebo尝试在线下载模型导致的解决方案mkdir -p ~/.gazebo/models wget -P ~/.gazebo/models/ http://models.gazebosim.org/model.tar.gz3. ROS与PX4通信桥梁3.1 MAVROS安装与配置MAVROS是ROS与PX4通信的核心节点sudo apt install ros-melodic-mavros ros-melodic-mavros-extras wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh sudo bash ./install_geographiclib_datasets.sh验证MAVROS连接roslaunch mavros px4.launch fcu_url:udp://:14540127.0.0.1:14557在另一个终端使用rostopic echo /mavros/state查看连接状态connected应为True。如果遇到权限问题记得将用户加入dialout组sudo usermod -a -G dialout $USER3.2 自定义消息与节点开发Prometheus项目提供了丰富的消息类型建议将其工作空间与PX4环境集成git clone https://gitee.com/amovlab/Prometheus.git cd Prometheus ./compile_all.sh编译完成后在.bashrc中添加echo source $(pwd)/devel/setup.bash ~/.bashrc创建一个简单的控制节点示例demo_control.cpp#include ros/ros.h #include mavros_msgs/PositionTarget.h int main(int argc, char **argv) { ros::init(argc, argv, demo_control); ros::NodeHandle nh; ros::Publisher pos_pub nh.advertisemavros_msgs::PositionTarget( /mavros/setpoint_raw/local, 10); mavros_msgs::PositionTarget pos; pos.position.x 5; pos.position.y 5; pos.position.z 5; pos.coordinate_frame mavros_msgs::PositionTarget::FRAME_LOCAL_NED; ros::Rate rate(20); while(ros::ok()) { pos_pub.publish(pos); rate.sleep(); } return 0; }在CMakeLists.txt中添加add_executable(demo_control src/demo_control.cpp) target_link_libraries(demo_control ${catkin_LIBRARIES})4. 多模拟器协同调试技巧4.1 Gazebo与RViz联合可视化安装RViz可视化工具sudo apt install ros-melodic-rviz ros-melodic-rviz-imu-plugin创建启动文件prometheus_gazebo.launchlaunch !-- PX4 SITL -- include file$(find prometheus_gazebo)/launch/sitl.launch arg nameworld value$(find prometheus_gazebo)/worlds/empty.world/ /include !-- MAVROS -- include file$(find mavros)/launch/px4.launch arg namefcu_url valueudp://:14540127.0.0.1:14557/ /include !-- RViz -- node pkgrviz typerviz namerviz args-d $(find prometheus_gazebo)/config/rviz_config.rviz/ /launch4.2 传感器数据融合实战以激光雷达SLAM为例需要安装RTAB-Mapsudo apt install ros-melodic-rtabmap-ros修改PX4启动配置加载激光传感器export PX4_SIM_MODELp450_lidar make px4_sitl gazebo_p450在ROS端启动SLAM节点roslaunch rtabmap_ros rtabmap.launch \ rgb_topic:/camera/rgb/image_raw \ depth_topic:/camera/depth/image \ camera_info_topic:/camera/rgb/camera_info \ frame_id:base_link4.3 硬件在环测试连接真实飞控进行HITL测试使用USB连接Pixhawk飞控启动QGroundControl地面站在终端运行make px4_sitl none -j8在QGC中配置HITL Config参数SYS_HITL 1HIL_ACT_FUNC 1 (PWM输出)实测中我发现USB延迟会影响控制效果改用数传电台后稳定性显著提升。如果遇到舵机无响应检查PWM_OUT参数是否与硬件匹配。