
1. PX4无人机仿真基础配置第一次接触PX4仿真可能会觉得有点复杂但跟着步骤走其实很简单。我刚开始玩PX4仿真时也踩过不少坑现在把这些经验都整理出来让你少走弯路。1.1 搭建仿真环境PX4的Gazebo仿真需要先准备好开发环境。建议使用Ubuntu 18.04或20.04系统这是官方推荐的环境。安装完系统后需要给飞控源码和子目录权限chmod -R 777 PX4-Autopilot这个命令很重要我之前因为没给权限导致各种奇怪的报错。进入PX4-Autopilot目录后就可以开始各种机型的仿真了。PX4支持的机型很丰富从常见的四旋翼到水下机器人都有四旋翼make px4_sitl gazebo带光流的四旋翼make px4_sitl gazebo_iris_opt_flow固定翼make px4_sitl gazebo_plane小车make px4_sitl gazebo_rover水下机器人make px4_sitl gazebo_uuv_hippocampus我第一次跑仿真时执行make px4_sitl gazebo命令后Gazebo界面卡住了。这种情况很正常重新执行一次命令就好。PX4的仿真启动时会下载一些模型第一次运行可能会比较慢。1.2 连接QGC地面站仿真环境跑起来后下一步就是连接QGroundControl(QGC)地面站。连接方式主要有两种Ubuntu平台最简单打开QGC后勾选UDP自动连接选项就行Windows/Android平台需要手动创建UDP连接对于跨平台连接命令是这样的mavlink start -t 192.168.85.248 -u 14444这里有几个注意事项192.168.85.248要替换成你Windows电脑的实际IP端口号不要用14550这是默认端口容易冲突两边设备要在同一个局域网内我测试时发现如果QGC没收到数据很可能是防火墙挡住了UDP端口。可以临时关闭防火墙测试一下。1.3 修改Home点位置默认的Home点在某个沙漠里我们可以改成自己需要的位置。比如改成长沙的坐标export PX4_HOME_LAT28.197539 export PX4_HOME_LON112.903970 export PX4_HOME_ALT0 make px4_sitl gazebo这几个环境变量要在启动仿真前设置好。实际项目中我经常需要测试在不同地理位置的表现这个功能很实用。修改后重启仿真在地面站上就能看到新的Home点了。2. PX4高级仿真场景配置基础功能跑通后可以开始玩些高级功能了。这部分是我在实际项目中最常用的技巧。2.1 自定义仿真环境Gazebo默认的世界比较简单我们可以用更复杂的环境测试。PX4支持多种预设世界make px4_sitl gazebo_typhoon_h480 # 台风H480的复杂环境 make px4_sitl gazebo_cloudship # 飞艇的海上环境如果想完全自定义环境需要修改Gazebo的世界文件。位置在PX4-Autopilot/Tools/sitl_gazebo/worlds。我做过一个城市环境测试加入了高楼和风场对算法测试很有帮助。2.2 模拟传感器故障测试飞控的鲁棒性时经常需要模拟传感器故障。PX4提供了方便的注入接口param set SIM_GZ_USR_CMD_EN 1 # 启用用户命令 gz topic -t /gazebo/command -m gz.msgs.StringMsg -p data: force_fault imu 1这个命令会强制IMU传感器报错。类似的还可以测试GPS、气压计等传感器的故障情况。在实际项目中这种测试能发现很多潜在问题。2.3 风场和天气模拟室外无人机必须考虑风的影响。PX4的Gazebo仿真可以设置风场参数param set SIM_WIND_SPD 10 # 风速10m/s param set SIM_WIND_DIR 45 # 风向45度 param set SIM_WIND_TURB 0.5 # 湍流强度这些参数可以在仿真运行时动态调整非常适合测试飞控的抗风性能。我做过一个测试逐步增加风速直到无人机失控这样可以找到系统的极限。3. APM仿真配置指南ArduPilot(APM)是另一个流行的开源飞控它的仿真配置和PX4有些不同。3.1 启动APM仿真APM的仿真脚本在Tools目录下。基本命令格式../Tools/autotest/sim_vehicle.py -f X --console --map这里的-f参数指定机型-f X四旋翼-f Rover小车-f gazebo-irisGazebo仿真第一次运行可能会比较慢因为要编译代码。加上-c参数会强制重新编译平时不用加。3.2 连接地面站APM连接QGC的方式和PX4类似也是通过UDP。在MAVLink控制台输入output add 192.168.85.148:14550这个IP要改成你地面站设备的实际地址。APM默认用14550端口和PX4不同。一个实用的技巧是可以添加多个output同时连接多个地面站。3.3 修改Home点APM修改Home点的方式和PX4不同需要在locations.txt文件中添加位置信息。文件路径是ArduCopter/locations.txt。添加格式Changsha28.197539,112.903970,0,0然后启动时加上-L参数../Tools/autotest/sim_vehicle.py -L Changsha -f X --console --map我建议把常用的测试地点都保存在这个文件里切换起来很方便。4. 联合仿真与进阶技巧单独飞控仿真还不够实际项目经常需要和其他系统联合仿真。4.1 与ROS联合仿真通过MAVROS可以实现PX4/APM与ROS的通信。首先启动仿真然后另开终端roslaunch mavros px4.launch fcu_url:udp://:14540127.0.0.1:14557这样ROS节点就能获取无人机状态并发送控制指令了。我在做视觉导航项目时这个功能必不可少。4.2 多机仿真测试测试多机协同需要启动多个仿真实例。每个实例要用不同的端口# 第一架 make px4_sitl gazebo_iris -DGAZEBO_PORT14550 -DOUTPUT_PORT14560 # 第二架 make px4_sitl gazebo_iris -DGAZEBO_PORT14570 -DOUTPUT_PORT14580每架无人机的MAVLink端口都要不同地面站连接时也要对应好。这个功能在测试集群算法时非常有用。4.3 仿真速度控制有时候仿真太慢可以用这个技巧加速param set SIM_SPEEDUP 5 # 5倍速但要注意过高的加速可能导致物理仿真不准确。我一般控制在3倍以内既能节省时间又不影响测试效果。