这部分内容其实和水下目标跟踪的软件框架没啥联系,但既然上一篇文章提到了水下环境的仿真,结合近期的一点小尝试,也谈谈对水下slam仿真可行性的一些构想。
在水下光学传感器基本上效果非常差。声学设备一方面专业性比较强(换句话说就是很小众),另一方面传感器价格非常高,更雪上加霜的是进行一次数据采集所需耗费的时间人力物力成本很大,然而不能保证能得到理想的数据。最后各个机构或个人花费如此大代价得到的数据也很少有开源出来的,也可以理解。因此在水下方向的研究都面临一个数据稀缺的问题。
早前在做slam小车的时候就接触过gazebo里进行虚拟仿真。但是鉴于陆地上的实验平台搭建和调试简单,有什么需求直接在真实平台实现就可以了,所以也没有做更深入的了解。
那么转到水下上,在水下实际测试工作量较大的前提下,理论上在仿真的环境里搭建实验平台,获取实验数据,能为水下slam算法的研究提供极大的便利。
实际上我感觉仿真难点在于水下环境的搭建,无论是水体复杂的动力学特性对机器人的影响,还是水体对各类信号造成的影响,这些都是很难模拟的。再者,水下声学设备使用得比较多,专业性太强,比较小众,可能会缺少针对性的仿真模块。比如我需要前视声呐的仿真,而且限定在Gazebo&ROS的环境能使用。一些专业声学方向研究者或许会单独开发前视声呐的仿真模块进行研究,但不一定能在Gazebo&ROS的仿真环境使用。然而对应SLAM算法的研究者来说,前视声呐只是系统里的传感器之一,更关心的是获得点阵数据,而不是从声学原理对前视声呐进行研究,提高前视声呐仿真模块的质量。水下通信更是一个大问题就不展开说了。
目前开源的水下仿真平台也有,比如上一篇文章提到的uuv_simulator。能模拟部分水体的动力学特性,也有一些水下的传感器模块,如前视、侧扫等,但这些传感模块我认为仿真和实际差距应该还是挺大。当然基于欧盟的swarm项目使得其机器人模型非常丰富。其实也就是提供了推进器模块和尾翼模块,能自由设计水下机器人。许多研究机构基于此结合拥有的实际机器人构建了水下机器人模型进行了开源,对于算法研究者来说在不是自己的研究领域采用拿来主义是解决问题的一个途径。当然uuv_simulator里也集成了很多水下机器人的控制算法供研究者使用或优化。
随便选择ECA A9这个AUV的模型跑一下例程,让其在水下绕圈巡航,可以采集其搭载的传感器模块的数据,效果大致如下:
csdn传短视频有点麻烦,测试视频效果可以移步:
https://zhuanlan.zhihu.com/p/358369810
目前,我个人觉得水下slam如果能实现,声光融合将是很好的解决途径。当然融合是以声学为主,光学辅助。毕竟正常情况下水下光学基本和瞎子差不多,能获得的信息基本没有,水质特别好的情况另说。
我们都知道声学成像原理和光学成像原理是不同的,陆地slam那一套是不能直接搬到水下的。再吐槽一下,目前我感觉slam技术并没有走出实验室得到大规模应用。我也不太认为水下slam技术能实现定位,但或许能在探测上做些文章,三维重建什么的,对水下弱观测的环境还是有很大的意义。需要指出的是,slam技术和实时三维重建是有非常相似却也有些许不同的。在水下slam这方向有两个机构我认为做得非常好,我也就不翻译机构名了,在下面列出来,感兴趣的可以去关注一下他们的成果及进展。
1、University of South Carolina,Autonomous Field Robotics Laboratory(AFRL)
2、Carnegie Mellon University, Robot Perception Lab(RPL)
现在回到最开始的问题,如果要研究水下slam的算法,总得有数据。假如没有一个实验平台(ROV/AUV+惯导+dvl+usbl+前视+双目…),或者数据采集回来后算法实验过程中突然又发现新情况需要新的数据,又或者根本就不能好好规划应采集什么数据进行研究。水下采集数据可是非常折腾的。先行的仿真确实是一种解决的方法。
实际上对多波束前视声呐(我个人认为是水下slam主要信息源)仿真模块也是有的,如巴西机器人研究所的一个项目
https://github.com/romulogcerqueira/sonar_simulation
。但是其不能和水下机器人以及其它传感器结合起来。
这时就有一个非常优秀的开源计划,是美国海军研究生院主导的旨在为水下机器人自主算法验证提供仿真平台的dave项目(
https://github.com/Field-Robotics-Lab/dave
)。项目基于uuv_simulator和ds_sim,详情请仔细参阅其wiki。
Dave项目不仅添加了水下滑翔机等模型,也添加了水下机械臂模块,而且除了uuv_simulator和ds_sim里的传感器模块,Dave项目还添加自行开发的了USBL,DVL,多波束前视声呐,水下3D激光雷达等等。算是目前比较全的水下仿真平台。
之前粗略地搭了一个小平台,bluerov搭载IMU,双目相机和多波束前视声呐。其中IMU仿的IMU型号为ADIS16448(带噪声模拟),前视声呐仿的型号为blueview P900,双目直接使用gazebo自带的双目模块。如下:
输出如下:
csdn传短视频有点麻烦,测试视频效果可以移步:
https://zhuanlan.zhihu.com/p/358369810
右边的屏幕输出的双目图像,前视图像和IMU的数据,同时是能获取前视声呐原始点阵数据的,便于算法的研究。同时gazebo里是能获取机器人在世界坐标系下的绝对位置,可以与算法解算出来的位置做比较,成为算法性能评估的一个依据。
接下来需要考虑的就是仿真与实际的差异究竟有多大了。如果仿真得到的环境等同于最理想的实际环境,其就能为算法开发提供支持。换个角度思考,算法在最理想的环境都没有效果,如何能在恶劣的实际水下环境中起作用。但是,如果仿真模块,尤其是传感器模块从原理上就是错的,就会对算法的开发提供干扰。期待能有一个仿真平台能在仿真和实际环境中实现一定程度的统一。就如本系列文章基于ROS搭建简易软件框架实现水下目标跟踪一样,在仿真中开发的算法改动几乎可以原封不动地移植至实际环境中。
不管怎么样,目前可以先搭建平台,配置好需要的传感器,录制数据包,先跑跑成熟的slam框架看看效果,再考虑如何从声学成像的角度出发对算法进行优化,实现水下应用。