Unity3D无人航行器水下自主航行三维仿真
2021-08-24周振华
相 琳 周振华
(中国船舶第七一五研究所,杭州 310023)
本文所述仿真是将实际系统包括控制器的受控对象以及作用于该系统上的各种输入信息全部用数学模型代替,并把数学模型变成仿真模型,在计算机上利用仿真手段对实际系统软件进行测试和研究的过程。借助仿真引擎,它可以高效产生一个全栈的闭环仿真,模拟理想情况或特定环境扰动下的受控对象,并实时反馈信息。无人航行器执行任务后,在水下进行远距离自主航行时人们不能实时掌握其动态,导致航行器水下任务安全性问题极为突出。因此,航行器研制和试验过程中对内部软件进行测试和联合仿真十分必要。本次仿真的目的为软件开发、测试与评估提供了一个高效的环境。
Unity3D软件支持3D内容创作,开发生态环境良好,可扩展性强,近年来多用于虚拟仿真开发,其中应用在室内三维漫游场景的情况较多,画面渲染逼真。
1 航行器仿真模型
1.1 运动与动力学模型
如图1所示,随体坐标系O-XBYBZB是一种笛卡尔非惯性坐标系,将坐标原点O取在无人水下航行器(Unmanned Underwater Vehicle,UUV)的浮心上[1]。其中:OXB指向航行器首部;OYB指向上方(当航行器放置于地面)并垂直于OXB;OZB垂直于OXB与OYB,指向航行器右侧。
图1 坐标系示意图
根据欧拉定理,随体坐标系下的参数经过3次旋转平移即可转化为大地坐标系下的参数。假设大地坐标系与随体坐标系原点位置相同,则进行3次旋转即可。3次旋转中的旋转轴与旋转角均符合右手定则,且旋转顺序需固定[2]。随体坐标系下的线速度[vx,vy,vz]T和大地坐标系下的线速 度[v0x,v0y,v0z]T转化关系如下:
表1 航行器运动学参数
为保持数据的一一对应,规定将φ、ψ、θ的取值范围限定为:
此时,有:
同理,有:
对于航行器的运动过程,主要计算其所受的惯性类水动力、粘性类位置力和阻尼力,相关参数如表2所示。其中:x、y、z是流体动力主矢在随动坐标系3个轴方向上的分量,分别为阻力、升力和侧力;Mx、My、Mz是流体动力主矩在随动坐标系3个轴上的分量,分别为横滚力矩、偏航力矩和俯仰力矩;Cx等为无量纲因数。
表2 流体动力参数
航行器外形关于横平面XBOYB与XBOZB对称,则有:
不计航行器的惯性积项、航行过程中的质量及质量分布变化,若航行器进行小机动运动,忽略运动参数二阶项,并视质心为一阶小量,可得空间运动方程[3]:
2 Unity中开发处理
2.1 Unity中模型处理
航行器模型导入Unity中,根据需求选择材料、纹理贴图等属性,使模型外观贴近航行器外观设计[4]。另外,确认航行器模型的执行器和传感器,以便实例化到运动脚本中。此外,为航行器设置“刚体”属性,为海底地形添加“碰撞器”属性,外层设置包围盒。这样航行器与海底发生碰撞会停止,不会发生模型互相穿过的现象。
2.2 海底地形生成
采用Unity3D经典四叉树方法生成不规则三角网(TriangulatedIrregularNetwork,TIN)海底地形。如图2所示,四叉树总的思想是视点经过的时候才渲染地形,根据区域的有限个点集,将区域划分为相连的三角面网络。三角面的形状和大小取决于不规则分布的测点的密度和位置,能够避免地形平坦时的数据冗余,又能按地形特征点表示数字高程特征[5]。
图2 四叉树分化演示
如图2所示,视点(Unity中模拟人眼浏览三维仿真画面的观察点)由左下侧经过大格子时,此时远离视点的R1、R2、R4为一级分化,而靠近视点的R31~R34为二级分化,地形显示分辨率更高。一般视点越近,分化等级越高。
分化步骤操作如下。
(1)从外部导入(2n+1)×(2n+1)的正方形地形高度矩阵,建立两个数组分别存放地形顶点缓冲和渲染的索引缓冲,依据视点到网格节点的距离和计算网格地形复杂度,在视点经过时对网格进行划分,即设定视点到网格中心的距离L与正方形边长d的比值C1为设定的一个经验常量值。C1设置越大,越易划分。地形平缓程度C2表征区域地形越复杂,分割的次数越多。需要注意,C1和C2需要人为设定)。
(2)划分网格时,渲染叶子节点(没有被继续分割的点);划分完毕,遍历待生成网格的节点,根据其中心和边长生成对应网格。
(3)对生成的地形利用强制划分方法对裂缝进行修补,当分化等级相差2及以上时,对其强制划分。
三维仿真地形,如图3所示。
图3 三维仿真地形
2.3 海流模块
海流对航行器影响的力可以分解为沿航行器随体坐标系3个方向的分量。如果不考虑海流垂向交换,则海流的影响作用可分解为航行器前进X方向的作用和垂直航行器Z方向的作用[6]。因此,已知外部输入的海流方向和大小,将海流速度大小分解为航行器前进X方向的vx和垂直航行器的Z方向分速度量vz,通过动力学公式将其引入航行器总受力公式。
为方便用户测试,海流模块支持自定义输入海流参数,包含变化周期(不填默认定向流)、初始方向和速度大小。仿真测试时可选择开启海流模块,设置定常流或者周期变化流来测试UUV在海流作用下的航行测试。
3 航行器自主航行三维仿真测试
搭建仿真测试系统,按照以下步骤:
(1)建立硬件连接,开启仿真软件系统;
可手动修改航行器水动力系数,改变航行器水动力 特性;
(3)设置传感器参数,默认开启仿真惯导等传感器;
(4)设置是否添加海流、海流方向和速度大小;
(5)仿真系统正式运行。
任务启动后,仿真系统通信单元接收控制系统指令(转速和舵角指令)传给运动与动力学模型,驱动航行器模型(挂载运动脚本)在仿真系统内位置移动。仿真惯导实时反馈航行器姿态和速度参数。
航行器水下自主航行任务期间,主要关注航行控制能力和航行途中避障情况。
(1)航行器远距离水下远距离航行至指定地点时,要对前方障碍物进行合理避障。仿真系统支持前方单一或多个连续固定障碍物航行测试(如图4所示),支持手动选择障碍物生成地点,支持测试过程中通过外部触发在特定地点生成障碍物等,以满足航行过程中避障测试需求。
图4 航行前方遇到障碍物
(2)当航行器远距离三维仿真系统支持任意策略的航行下潜,如直线下潜和螺旋下潜,支持航行轨迹三维显示,如图5所示。
图5 三维轨迹显示窗口
4 结语
本文提出了一种在无人航行器研制和试验阶段用于软件联调和任务测试的三维仿真系统,通过Unity3D软件构建逼真水下三维仿真海洋环境,加入海底地形、水下障碍物和海流作用,基于无人航行器水下运动和动力学模型,可支撑无人航行器长距离水下自主航行任务测试和水下避障规划。