推荐一个ROS2下基于Gazebo环境的开源UAV与USV联合仿真平台。平台是由两个开源项目共同搭建的。首先是UAV仿真平台,是基于PX4官方仿真平台(https://docs.px4.io/main/en/sim_gazebo_gz);其次是USV仿真平台,是基于VRX仿真平台(https://github.com/osrf/vrx)。二者开源且资料非常详尽,非常适合上手使用。
基于PX4官方仿真平台开发的控制代码可以较为方便地移植至无人机。以我使用的经验为例,根据官方手册在仿真平台写了个很简单offboard模式下的速度环控制模块实现定高及定点飞行,仿真中调试完成后,直接就可以在实际的无人机使用,非常便利。
基于VRX仿真平台的USV竞赛已经举办多届,平台多样的环境和模块能很好地满足USV开发的各种需求。
以我搭建的实际情况为例,软件信息如下:
ubuntu 22.04
ros2 humble
gazebo garden v7.9.0
vrx 2.4.1
PX4-Autopilot 1.14.0
QGC 4.4.0
使用的显卡为:RTX A6000
仿真环境的实际地点为悉尼国际帆船赛中心(sydney_regatta)。仿真水域面积为6km*6km。以下为QGC(上)与Gazebo(下)环境下该水域图示:
仿真环境渲染的效果还算不错,水域中有扰动的模拟,空中也有风力扰动的模拟(PX4官方手册提及)。以下为水域渲染和水面扰动的效果。
VRX仿真平台渲染效果
仿真环境可以进行UAV集群仿真,如以下视频所示。由于我没有写轨迹规划及控制模块,直接使用QGC控制,3辆UAV分别测试一下路径点,区域巡逻,定点导航及返航功能。
PX4+VRX仿真多UAV仿真
仿真环境可以进行USV集群仿真,如以下视频所示。同样由于我没有写轨迹规划及控制模块,简单地对几个推进器输入推力做简单地演示。视频中两艘双体艇为VRX内的模型,另一艘四推的小无人艇是基于我们设计和使用的实体小艇添加的模型。
PX4+VRX多USV仿真
仿真环境也可以进行UAV与USV联合仿真,如以下视频所示。初衷是无人机对目标无人艇的识别与跟踪。个人在USV上写了个简单的云台,基于YOLOV8实时识别无人艇目标,云台控制相机姿态使得目标保持在图像中心区域内。同时云台还能补偿UAV运动时机体倾斜造成的目标丢失的情况。无人机根据云台的姿态调节自身的姿态,使得无人机航向朝向目标方向。无人艇实时发送自身的位置,无人机根据与目标的距离控制前向的飞行速度。由于训练模型时样本不多,后面出现误识别后无人机就慢慢丢失目标了。
PX4+VRX仿真跟踪测试
显然上述是无人艇主动发送位置给无人机,并不是真正的识别与跟踪。但无人艇目标在水面的位置是可以根据其在图像上的位置解算出来的,虽然精度不高,但能满足需求。详情可参考以下博客:基于无人机吊舱单目相机的目标定位算法。曾根据该博客写了个目标定位解算的模块,结合识别模块,可以实现无人机对目标的实时识别与定位。但是没有整合到上述示例中。
仿真对硬件有一定的需求,由于环境渲染效果的关系,GPU需求比较高。但可以把渲染取消。如以下视频所示,将水面渲染插件注释并将水域以蓝色代替,同时取消天空背景模块插入,可大幅降低GPU的需求。除了视觉的观赏性降低以外并没有其余影响,各种环境内扰动的插件依然能正常工作,以进行控制算法的验证。
PX4+VRX仿真跟踪测试2
最后,简要地介绍搭建平台的思路。
一、按教程配置PX4仿真平台及QGC,并能运行教程样例;
二、按教程配置VRX仿真平台,并能运行教程样例;
三、将PX4仿真平台和VRX仿真平台的models文件复制至~/.gz/models内,确保gazebo能索引到;
四、将PX4的仿真环境文件内容替换成VRX的环境内容,即将PX2中.world文件内容替换成VRX中sydney_regatta.sdf中内容;
五、启动PX4仿真,此时载入仿真环境和无人机模型;
六、在VRX的launch文件中注释掉world载入代码,同时添加需求的USV模型,此时只载入USV模型;
七、此时算法验证环境已完成,可启动各种其它模块,如识别,控制等进行算法验证。
按照上述思路,因为每个人的软硬件环境有所差异,所以搭建过程中会遇到不同的各种小问题,但基本可以在网上搜索到解决方法。
虽然得到团队其它成员的认可与支持较少,但我个人认为这是非常好的开源仿真平台。目前需要将主要精力放在其它方向的工作上,后续如果有时间我或许会再把其完善一下,写个好点的教程方法。