张乐乐,戴永寿,李立刚
(中国石油大学(华东)海洋与空间信息学院,山东青岛 266580)
随着水资源的广泛开发与利用,物资运输、人员搜救、环境保护等多方面任务需求愈加旺盛,无人船已成为最佳任务平台[1-3]。为适应多变的水面环境,各国正在从障碍物检测、避障导航等方面加速无人船技术的研发[4]。然而,海上恶劣环境与高昂出海成本极大提高了相关算法的研发与测试难度,导致无人船相关技术研发周期漫长,开发效率低下。因此,用于替代出海实验的无人船仿真测试软件平台的开发与实现已经成为无人船技术高效发展的重要基石[5-8]。
为利于在实验室环境中开展无人船关键测控算法的离线仿真测试验证,降低实船实验成本,缩短算法开发使用周期,利用虚拟现实技术,设计开发了一款可在实验室内对相关算法测试验证的无人船仿真测试平台。
为保障本平台在实验过程复现时的准确性,算法效果统计时的精准性,平台应具备与现实场景相对应的仿真环境并模拟船舶在海上的真实受力情况;能够对无人船及海面障碍物模型进行统一调度和管理;具备测试算法的嵌入接口,在对算法进行测试验证的同时,将船舶运动过程中的关键数据以图表的形式渲染到可视化窗口,便于研究人员查看和记录;统一存储和管理实验数据。此外,为对算法性能进行评价,该平台还应具有算法优劣的评价指标。根据上述分析,平台的具体功能如图1 所示。
图1 无人船避障导航算法仿真测试平台功能分析图
根据无人船避障导航算法仿真测试平台的功能需求分析,将平台划分为五个主要的功能模块:海面环境仿真模块、物理效应计算模块、插件管理模块、决策控制模块、可视化渲染模块。平台的整体架构如图2 所示。
图2 无人船避障导航算法仿真测试平台架构
在图2 中,可视化渲染模块主要负责监听用户输入和场景渲染,海面环境仿真模块负责搭建海面场景,物理效应计算模块根据模型受力情况计算对象的变化状态,决策控制模块负责进行调度决策,插件管理模块用于管理和动态加载待测算法插件。根据平台实际功能和架构,设计了图3 所示的工作流程图。
图3 无人船避障导航算法仿真测试平台工作流程图
当软件启动后,各个功能模块开始初始化,可视化渲染模块开始监听等待用户输入,插件管理模块加载需要测试的算法插件,决策控制模块根据物理效应计算模块和插件管理模块给出的信息进行调度决策,将最新的仿真状态渲染到可视化界面中,完成一个周期的状态更新。
为实现无人船避障导航算法仿真测试平台的基本功能需求,方便研究人员对需要测试的算法进行优劣评价,选用C#语言、Unity 3D 平台进行开发。通过搭建模型受力计算架构实现物体受力模拟,并应用插件动态加载技术将避障导航算法适配到Unity 3D 平台,保障待测算法在平台中的稳定运行。
为在虚拟世界中模拟现实物体的受力和运动情况,该平台基于Unity 3D 提供的物理引擎功能进行物体的碰撞检测和现实受力模拟[9-11]。物体在现实世界中会受到诸多力的影响,如重力、摩擦力等,Unity 3D 中提供的物理引擎可以将这些力添加给虚拟模型,模拟虚拟模型在现实世界中的物理情况。在该平台中主要使用物理引擎中的碰撞检测功能和刚体物理学解算功能,在虚拟世界中,要保证两模型在发生碰撞后不会穿“模”而过,就必须为模型添加碰撞体组件。只有添加了碰撞器组件的模型,才能够被虚拟世界感知到模型边界,保障在模型运动过程中,如果发生碰撞,可以被软件感知并作出回应。三维模型只有添加刚体属性才能被物理引擎控制,在受到外力时产生真实世界的运动,该平台在基于物理引擎的刚体物理学解算功能上,搭建了模型受力计算架构用以模拟物体现实受力。
根据平台工作需要,设计了如图4 所示的模型受力计算架构图,在图4 中,Model 类是软件中定义的模型管理类,用于统一存储管理平台中的三维模型。当物体发生碰撞事件时,不但要受到物体间碰撞时产生的相互作用力,还有其本身所受到的重力和浮力,因而设计了作用力收集工具,作用力收集工具负责收集碰撞时物体受到的相互作用力以及物体本身的重力、浮力,并结合无人船上一时刻的状态,通过计算给出无人船下一时刻的坐标变换,完成物体下一时刻的状态更新。
图4 模型受力计算架构图
为在软件平台中对无人船避障导航算法进行测试验证,需要从待测算法的封装、DLL 插件的读取、软件平台与DLL 插件交互三方面展开工作,使待测算法适配到软件平台并正常运行。
待测算法的封装方面,由于软件平台聚焦于算法的测试验证而不关注算法实现原理,因此将待测算法封装为独立的动态链接库(Dynamic Link Library,DLL)插件[12-13],降低算法程序与平台程序间的耦合性,提高平台对多种算法的兼容性。
DLL 插件的读取方面,在软件平台中应用C#反射技术动态[14-16]读取DLL 插件中的函数方法,完成对待测算法的调用。C#反射是操作DLL 插件元数据的类库,其可以在类未知的情况下,通过规范化的插件接口,操作并获取类中的字段、属性和方法。
软件平台与DLL 插件交互方面,为提高DLL 插件读取接口的复用性,对同一类别的待测算法接口进行通用化设计。首先,在接口内部单独封装只读接口类,用于对待测算法插件的名称、版本等属性信息进行标识,以帮助区分不同版本的待测算法;其次,为了适应多种同类待测算法插件中输入参数数量的差异,使用可接收不确定数量参数的“params”关键字与数据基类“object”相结合的方式,实现对不同参数数量的待测算法的参数传递;最后,在避障导航算法验证模块,单独开辟路径规划算法插件与路径跟踪控制算法插件的返回值存储空间,用于存储DLL 插件输出的无人船期望路径点与期望航向航速,便于软件平台后续调用待测算法返回值进行算法效果的评价与渲染。
可视化场景渲染是按照一定帧率将仿真对象的状态渲染到可视化窗口中,在无人船避障导航算法仿真测试平台中,为给用户更好的仿真体验,绘制了逼近真实的近岸虚拟海洋环境。同时在避障导航算法验证模块设计算法有效性评价指标,便于比较算法优劣。
三维模型是仿真平台的重要组成部分,模型的精细程度直接影响到平台的视觉效果和真实程度,在实现平台的具体功能前,先完成平台所需的各类三维模型的绘制工作,并导入Unity 3D 平台,搭建出模拟真实环境的虚拟海洋场景。
搭建虚拟近岸海洋场景所需要的三维模型主要有无人船三维模型、天空、海浪、岛屿以及海上可能出现的各类障碍物。Unity 3D 平台自带的资源库可以满足本平台基本的模型需求[17]。因此,除无人船模型外,其余模型均为在资源商店下载后导入平台进行参数配置后直接用于开发。
为了更加真实的还原无人船在海上运行的实际情况,平台中的无人船三维模型是依据无人船实物绘制而成,利用solidworks 建模软件搭建无人船模型。无人船是由多个零件组合而成的整体,其零件的组合关系复杂。在该软件中,主要展示无人船的被控性能和运动情况,因此,建模时不需要过多考虑各个零件之间的组合关系[18-19]。图5 与图6 为无人船实船与三维模型图。
图5 无人船实物
图6 无人船三维模型图
将无人船模型导入Unity 3D 后,继续导入海浪、障碍物等环境模型,调整各个模型的尺寸比例及位置,设置灯光、相机等,完成软件的环境场景搭建工作。
为了快速评价避障导航算法的优劣,在所设计的软件平台中提供相关算法评价指标的计算方法[20]。
在路径规划算法的评价指标方面,给出路径长度、转向次数、算法运行时间三个算法有效性评价指标。算法运行时间为程序实际运行时间,路径长度D表示为:
转向次数S表示为:
Si表示为:
其中,路径规划算法插件共给出n个路径点,(xi,yi)为第i个路径点坐标。
在路径跟踪控制算法的评价指标方面,使用平均跟踪误差作为算法有效性评价指标。平均跟踪误差M用无人船在各时刻实际航行位置到期望航线最短距离的均值表示,如下:
其中,m为无人船沿期望航线运动过程中采样到的航行点迹数量,(xj,yj)为第j时刻无人船实际位置,ki为无人船实际位置所对应期望航线的斜率,bi为无人船实际位置所对应期望航线的截距,ki、bi表示为:
无人船避障导航算法仿真测试验证平台包含路径规划算法验证模块与路径跟踪控制算法验证模块,为验证平台有效性,分别对两大模块进行性能测试。
为验证路径规划算法验证模块的有效性,将已开发完成的A*算法动态链接库导入该模块中进行测试,软件平台能够正常读取算法插件,运行效果如图7 所示。
图7 路径规划算法模块测试效果
进一步将算法在Matlab 中进行仿真实验,得到算法评价指标,两系统中给出的算法评价指标如表1所示。
表1 算法在多平台的评价指标对比表
结合图表可得,所设计软件平台显示效果更加直观。与Matlab 相比,二者给出的评价指标基本吻合,软件平台的路径规划算法验证模块准确可行。
为对路径跟踪控制算法验证模块进行有效性测试,将开发完成的LOS 引导率算法动态链接库导入软件平台进行测试,算法插件能够正常读取,运行效果如图8 所示。
进一步将软件平台得到的评价指标与实船实验结果相对比,两者的算法评价指标如表2 所示。
表2 算法在多平台的评价指标对比表
结合表2 可知,考虑到海浪对无人船航行的干扰,实船实验与软件平台给出的评价指标误差在可接受范围内,评价指标合理有效。且软件平台能够便捷快速地复现算法验证过程,实验结果易于观察,算法效果对比直观。
根据无人船实船进行建模,并利用Unity 3D 引擎构建虚拟了近岸海洋场景,在虚拟海洋试验场中对无人船运动过程中的关键算法进行测试,一方面,通过虚拟场景对无人船运动过程中的避障导航算法进行测试验证并展示,减缓了大量海上实验极其耗费人力物力等资源的问题,另一方面,通过虚拟可视化技术对实验过程及其关键参数进行复现,为无人船技术的学习与推广提供了可视化平台。
目前,该仿真测试验证平台已应用在实验室无人船相关算法的测试验证中,实践结果表明,该套系统可以有效地验证避障导航算法有效性,直观地展示算法的优劣,为算法的优化提供数据支持,同时节省了大量物力财力,具备良好的工程应用价值。