基于Qt/OpenGL 的惯性平台数字模型驱动技术
2023-04-29崔淑慧闫文民武彦伟王目凯王兆凯
崔淑慧, 闫文民, 武彦伟, 王目凯, 王兆凯
(1. 北京航天控制仪器研究所, 北京 100039;2. 中国特种设备检测研究院, 北京 100026)
0 引言
平台式惯性导航系统利用内部框架建立起隔离载体角运动的物理平台, 进而建立一个与载体角运动无关的导航坐标系, 为加速度和姿态角的测量提供坐标基准。 平台内部框架状态是保证平台式惯导系统导航与制导精度的基础, 因此框架转动状态是测试人员关注的重点。 然而平台内部结构复杂, 整机封闭测试与培训过程中, 内部框架转动情况及相对位置仅能通过框架角信息进行想象, 缺乏直观性, 导致现场讨论不便, 对现场排故和培训效果造成一定影响。
视景仿真技术可以形象、 直观、 实时地模拟空间物体的运动, 被广泛应用于机器人跟踪与模拟训练、 导弹闭环校射、 船舶航行等领域。 开放式图形库(Open Graphics Library, OpenGL) 具有强大的底层绘图功能且开发的应用程序可移植性强,Qt 内部封装OpenGL 模块可快速构建应用程序, 因此Qt/OpenGL 被广泛应用于可视化平台的开发。王晓辉等[1]基于自主研制的HAJIF 系统开发了一种专用有限元软件GUI 模块, 该模块利用Qt 技术的信号槽机制实现数据的高效率通信, 提高人机交互效率, 同时利用OpenGL 图形展示功能将有HAJIF 限元分析过程可视化。 杨义波等[2]利用Qt/OpenGL 开发了针对挖掘机的三维模型可视化软件, 通过建立动力学模型结合测量设备, 获取各部件间运动状态及末端姿态, 并基于分层控制实现了挖掘机运动的实时展示。 冯志强等[3]利用Qt/OpenGL 技术开发了具有友好用户界面的自主CAE平台, 实现了跨系统用户界面显示及多系统间数据共享。 贾康等[4]针对螺旋特征加工问题, 提出了一种基于OpenGL 可视化编程的将空间几何问题映射于图像空间的求解方法。 XIONG 等[5]利用人机交互方法基于Qt 框架设计了一套跨平台与可视化的地质模型软件, 基于OpenGL 将3D 模型实时显示,该软件适用于石油、 燃气以及矿石资源开采。ALLWRIGHT 等[6]针对多机器人构建硬件昂贵且耗时的情况, 利用Qt/OpenGL 并基于硬件测试数据实现了多机器人运动的可视化。 HU 等[7]针对机床加工和数字化制造车间管理无法连接的问题, 用Qt/OpenGL 设计了基于现场环境采集的可视化三维模型显示终端监控系统, 可实时显示模型动作和动态数据。 可见, Qt/OpenGL 技术可以实现多种工程机械运动的可视化, 但是惯性平台内部框架运动特性和测试环境与上述研究有所不同, 同时其可视化系统的相关开发尚未见报道。
因此, 为增强平台测试与培训过程中高效、舒适的人机交互功能, 提高平台调试、 排故过程中的交流效率, 基于Qt/OpenGL 开发了惯性平台内部运动部件三维视景仿真系统。 探索三维视景仿真技术在平台系统中的应用方法, 研究平台数字模型与硬件的接口调试技术以及模型高效的实时/离线驱动技术, 具有重要的科学与应用价值。
1 惯性平台基本结构及运动特性
平台式惯导系统框架是隔离平台与载体角运动和保证惯性空间稳定的关键部件, 三轴惯性平台内部框架结构如图1 所示。 如图1(a)[8]所示, 整个框架通过外环架的轴端组件固定于基座上, 内环架通过轴端组件固定于外环架上, 其轴线与外环架轴线正交; 台体也通过轴端组件固定于内环架上, 台体轴线与另外两个框架轴线正交; 三个轴端电机协同作用, 将台体稳定在惯性空间。 通常台体上安装三个正交方向的加速度计和三个正交方向的陀螺仪, 分别测量载体在三个正交方向的加速度和角加速度, 进而通过解算获取载体位置信息。 平台内部各框架转动相互耦合, 各框架位置状态难以直接描述。 平台内部框架实物图如图1(b)[9]所示, 可见惯性平台内部各仪表和电气线路较多且结构复杂。
图1 惯性平台内部框架结构Fig.1 Internal frame structure of the inertial platform
为更好地描述惯性平台内部框架的位置和运动状态, 建立如图2 所示的坐标系。 框架中心为原点O, 惯性坐标系O-XYZ各坐标轴方向设置如下:静止零位状态下, 台体轴线为X轴, 内环架轴线为Y轴, 外环架轴线为Z轴。 设置随动坐标系OX1Y1Z1固连于台体上, 以台体中心为坐标原点,以台体轴线为坐标系的X1轴。 设置随动坐标系OX2Y2Z2固连于内环架上, 以内环架轴线为坐标系的Y2轴。 设置随动坐标系O-X3Y3Z3固连于外环架, 以外环架轴线为坐标系的Z3轴。 各坐标系轴线的正向均指向轴端电机, 各框架转动的正向符合右手定则, 各框架转角范围为[0°,360°]。
图2 框架坐标系Fig.2 Coordinate systems of the frames
由惯性平台结构与工作特性可知, 外环架的转动会依次对内部框架运动产生影响。 外环架转动带动内环架和台体转动, 内环架转动带动台体转动, 而反之内环架转动不影响外环架位置, 台体转动不影响内环架与外环架位置。 各框架的运动规律可用旋转矩阵变换描述, 外环架绕Z3轴转动θ3角度后, 其上的点在O-XYZ坐标系中的位置为
内环架绕Y2轴转动θ2角度后, 其上的点在OXYZ坐标系中的位置为
台体轴绕X1轴转动θ1角度后, 其上的点在OXYZ坐标系中的位置为
2 系统实现
惯性平台数字模型离线/在线驱动技术的实现主要包括三个方面: 三维数字样机显示和运动环境搭建、 样机内部框架准确高效驱动方法以及三维模拟环境与实际惯性平台接口技术。 主要实现途径为: 首先, 基于三维CAD 软件Creo 建立模型参数和计算机图形学理论, 利用OpenGL 图形库函数搭建三维数字样机的显示和运动特性环境; 在此基础上, 将复杂平台结构进行轻量化处理, 并采用OpenGL 双缓冲机制的方式实现平台内部框架转动的实时驱动; 然后, 研究数据传输机制和模型驱动方法, 实现三维数字样机与实际平台接口技术; 最后, 完成软件与硬件的连接、 数据信号的采集与处理以及数据的实时传输, 进而驱动三维模型运动与显示。
2.1 数字样机显示与运动环境
数字样机显示与运动环境搭建的技术途径如图3 所示。 首先通过三维CAD 软件(以Creo 为例)对惯性平台进行结构设计, 建立平台的三维模型。通过模型数据创建Creo 模型与OpenGL 的接口, 基于OpenGL 对3D 平台模型进行重绘。 利用计算机图形学的变换关系, 实现模型框架的转动及动画显示。
图3 三维模型可视化环境搭建途径Fig.3 Approach to building a 3D model visualization environment
利用Creo 三维软件建立惯性平台三维CAD 模型, 模型主要包括外环架、 内环架、 台体等转动部件以及平台基座。 OpenGL 中无描述复杂形体的函数, 只能通过点、 线、 多边形等基本图形元素来建立物体模型, 因此将Creo 中创建的模型分别导出为OBJ 格式文件及其对应MTL 文件: OBJ 文件会以三角形单元信息保存模型结构信息, 如图4所示; MTL 文件保存模型的材质信息。 其中, OBJ文件存储的每行数据以v、 vn、 vt、 f 等字母开头,分别表示节点坐标、 法向向量、 uv 贴图坐标以及组成三角顶点的节点编号; MTL 文件中模型的材质信息以“Kd” 开头。 通过不同数据格式即可定义数据载入函数, 实现模型数据的读取。
图4 箱体模型网格划分Fig.4 Meshing of the box
Qt 对OpenGL 进行了多层封装, 环境模型的搭建采用Qt 开发平台自带的OpenGL 实现。 在Open-GL 中, 需要将三维模型所在的局部空间经过一系列坐标变换转换到屏幕空间进行显示, 此过程的数学表达式如下
具体过程如图5 所示: 三维模型原始坐标数据Vlocal通过左乘模型矩阵Mmodel将原始数据转换到世界坐标系下, 通常采用函数void QMatrix4x4∷rotate(float angle, const QVector3D &vector)创建模型矩阵Mmodel, 变量vector 为模型旋转轴, angle 为模型旋转角度; 然后左乘以视图矩阵Mview进一步将数据转换到观察坐标系下, 视图矩阵由函数void QMatrix4x4∷lookAt(const QVector3D &eye, const QVector3D ¢er, const QVector3D &up)创建, 参数依次为照相机所在位置向量、 模型中心位置向量以及自定义的up 向量, 参数一和参数三的叉乘为观察坐标系的Y向; 最后通过投影矩阵Mprojection变换到OpenGL 裁剪坐标系下, 进而在屏幕坐标系下正常显示模型, 投影变换采用正射投影函数void QMatrix4x4∷ortho(float left, float right, float bottom,float top, float nearPlane, float farPlane)构造, 前两个参数定义了平截头体的左右坐标, 第三、 第四个参数定义了平截头体的底部和上部, 最后两个参数定义了近平面和远平面的距离。 此外, 还需设置光照条件将三维物体映射到二维屏幕上。
图5 OpenGL 中模型显示坐标变换过程Fig.5 Coordinate translation process of model display in OpenGL
创建继承自OpenGL 原有QOpenGLWidget 和QOpenGLExtraFunctions 类的子类MyOpenGLWidget,在其构造函数explicit MyOpenGLWidget()中调用自定义函数bool loadObj2()和bool loadMTL(), 载入三维模型与材质文件节点数据, 然后通过重载以下三个函数实现模型的绘制:
void initializeGL() / /OpenGL 进行初始化函数
void resizeGL(int w, int h) / /3D 模型视图窗口设置
void paintGL() / /渲染环境及模型绘制
在void initializeGL()函数中进行OpenGL 三维建模环境初始化: 首先在初始化函数中创建并绑定顶点数组对象VAO 和顶点缓冲对象VBO; 其次通过Shader 类的构造函数实现着色器的创建并添加顶点和片段着色器; 然后在void resizeGL()函数中对OpenGL 视图窗口进行设置, 设置窗口尺寸及模型正射投影; 最后在void paintGL() 函数中对模型环境进行渲染并绘图, 函数逻辑流程如图6所示。
图6 void paintGL()函数流程图Fig.6 Flowchart of void paintGL()
2.2 数字样机高效驱动方法
惯性平台在线测试过程的数据采样周期短(只有几个毫秒), 而正常的可视化动画刷新频率较低。 为尽可能跟随硬件数据采集频率, 通过对平台系统内部复杂结构进行轻量化处理来增加动画刷新频率。 利用OpenGL 对三维平台模型进行重构, 将平台非重要部件进行线条化或点化轻量处理, 同时将基座、 框架、 台体及台体上仪表作三角形面片简化显示处理。 针对平台内部结构复杂、几何数据较多的特征, 通过采用点线显示的方式来展示模型的主要运动部件及其运动特性。 完整的平台结构包含各种紧固件、 电路板以及多种阶梯面、 阶梯孔等, 这类结构的建模数据较多, 但对观察内部框架的运动无影响, 这类结构可以忽略。 然而, 为保证内部结构的真实性, 需将部件的整体结构留存。
在模型轻量化的基础上, 通过OpenGL 双缓冲机制实现实时高速的动画显示。 在动画高频刷新时, 双缓冲技术保证了每一帧的完整展示, 通过提供两个完整的缓存硬件或软件, 使画图和显示在两个缓存中分别完成, 每画完一帧交换2 个缓存指针。 实现方法为: 在OpenGL 的glutInitDisplay-Mode(glut_double|glut_single)中设置glut_double 来标识双缓冲, glutSwapBuffers() 绘制完成后提交“画板”。 在最新的OpenGL 图形库中, 该机制可自动实行。
OpenGL 中模型运动的实现依靠坐标的变换,通过定时器不断刷新屏幕来实现模型位置的更新,进而实现各框架转动动画。 设置定时器刷新周期为4 ms, 利用槽函数进行响应, 重复更新模型,实现流程伪代码如下:
框架运动的动画实现流程如图7 所示。
图7 框架运动动画实现流程图Fig.7 Flowchart of implementation for frame motion animation
2.3 数字样机与实际平台数据接口
三维模拟环境与实际平台接口主要是测试数据的传输, 三维模型运动特性数据(主要包括框架转动速度、 转动角度、 转动方向等参数)通过外部输入, 然后将读取的数据赋值给程序内部的动画驱动参数来驱动模型运动。 外部输入方式可以为离线数据或实时数据。 离线数据的输入可以通过Qt/OpenGL 的数据读取功能直接读取已保存的数据文件实现。 实时数据的读取方式有两种: 1)读取实时保存的数据文件。 该方法的优点是只需对数据文件进行相关的筛选与读取操作, 不受硬件通信协议的限制, 通用性强; 缺点是需不断地刷新数据文件, 读取效率较低。 2)直接读取串口数据。 该方法的优点是读取效率高, 但是受通信协议的影响, 若通信协议改变, 需重新设定串口读取方式,同时需要测试过程预留串口。
为更好地兼容原平台测试软件, 实时数据采用第一种方式进行数据读取。 该读取方式需要根据现行的数据保存方式进行设定, 原测试软件对数据进行实时采集和保存, 数据保存过程中会随机切换到新文件中进行保存, 这就要求数据读取方式能够实时跟随最新文件的最新数据, 读取方式如图8 所示, 具体流程如下:
图8 实时测试数据读取方式流程图Fig.8 Flowchart of reading method for real-time test data
步骤1: 通过槽函数SLOT(showFileContents())触发定时器;
步骤2: 进入槽函数程序, 判断目前是否有打开的文件, 若否则刷新文件目录, 选择最新文件并打开, 若是则转步骤4;
步骤3: 判断已选择的文件是否读取过, 若是则进行下一步, 若否则记录该文件编号, 刷新文件内容, 然后转步骤5;
步骤4: 刷新文件内容, 并判断现读取的文件是否与之前读取的文件长度相同, 若是则转步骤7, 若否则进行一下步;
步骤5: 读取最新文件保存的最新数据并在窗口中显示读取的数据内容, 同时驱动三维模型内部框架转动;
步骤6: 判断所有文件是否读取完毕, 若否则转回步骤1, 若是则进行下一步;
步骤7: 关闭定时器, 结束测试。
3 可视化系统开发与功能验证
3.1 可视化系统组织构架
基于上述技术开发了惯性平台三维可视化测试与示教系统, 系统操作界面如图9 所示, 该系统主要包括工具栏模块、 数据显示模块以及动画仿真(模型可视化)模块。
图9 系统操作界面示意图Fig.9 Diagram of system operation interface
工具栏模块包括平台视图、 部件显示、 数据处理和动画演示等。 平台视图功能为实现平台数字模型的视图调整, 以方便观察; 部件显示主要包括基座隐藏/显示、 外环隐藏/显示、 内环隐藏/显示、 台体隐藏/显示以及全部隐藏/显示功能;数据处理主要实现历程数据的图表展示; 演示功能主要实现离线情况下数字模型的动画演示。
数据显示模块主要包括实时数据、 历程数据以及历程数据的图表显示。 实时数据主要显示三维模型外环架、 内环架与台体的当前转动角度,历程数据主要显示从开始时刻到当前时刻外环架、内环架与台体的转动角度, 图表数据主要显示从开始时刻到当前时刻三者转动角度的变化趋势。
动画仿真模块包括数字模型显示、 测试过程操作、 回放示教过程操作。 数字模型显示主要实现测试与回放过程中各框架的转动动画演示, 通过鼠标可以操作模型的旋转, 鼠标滚轮实现模型缩放; 测试过程操作主要通过按钮控件实现开始测试、 暂停测试与停止测试操作; 回放示教过程操作主要实现读取保存的框架转动历史数据, 然后驱动模型进行动画演示。
3.2 系统全功能测试验证
在软件开发阶段, 以某三轴惯性平台结构为例进行系统开发。 为验证前文的可视化环境、 数字模型高效驱动方法以及所开发测试系统的实用性, 分别针对离线的培训示教与测试回放功能以及在线测试过程功能进行验证。
离线测试功能的验证主要通过三种方法: 1)在实时数据处手动输入各框架转角, 通过调整框架按钮实现框架的转动; 对外环架、 内环架和台体分别输入90°, 观察框架转动与输入一致。2)通过点击工具栏的“动画演示/动画停止” 按钮, 实现内部框架的转动动画。 动画正常演示,随机停止演示时三框架转角均为235°, 实时数据显示栏的角度与框架转角一致, 如图10 所示。3)通过系统的回放示教功能, 即对在线测试数据进行回放, 显示界面如图9 所示, 历程数据显示与模型动画运动一致。 因此, 三种操作均实现了模型运动状态的可视化, 验证了仿真环境的正确性。
图10 离线验证Fig.10 Verification of offline test
在线测试验证在开放式三轴框架试验台上进行, 需将数字样机与试验台相连, 实现途径如图11 所示。 通过三个框架的姿态角传感器获取各框架转角数据, 传感器通过线缆与信号采集设备相连, 将测得的转角数据传输给工控机的平台测试软件进行数据处理, 并实时保存于特定文件夹下。 通过实时读取保存的转角数据并驱动框架转动, 即可观察测试过程中内部框架的转动状态。姿态角传感器的采样周期设置为5 ms。 如图12 所示, 测试过程中, 通过对比传感器采集数据与可视化测试系统读取数据, 可以发现可视化测试系统可实时读取试验台框架转角信息, 且动画正常展示, 验证了该系统在线测试的实用性与高效性。该系统已成功应用于测试部门对某平台的测试与人员培训过程, 提高了测试与培训人员的排故与交流效率。
图11 系统在线测试应用验证Fig.11 Application verification of system online test
图12 数据对比示意图Fig.12 Diagram of data comparison
4 结论
针对惯性平台整机测试过程中内部框架结构复杂及其运动状态的不可观测性, 基于Qt/OpenGL开发了一套惯性平台三维可视化在线测试与示教系统。 通过三维CAD 软件对惯性平台进行建模并提取模型结构关键信息, 然后运用Qt/OpenGL 进行框架运动特性及模型可视化编程, 实现框架运动展示功能。 主要结论如下:
1)实现了OpenGL 与三维CAD 建模软件接口,基于Qt/OpenGL 搭建了惯性平台三维数字样机显示与运动环境, 明确了数字样机的绘制及驱动方法;
2)研究了数字模型高效驱动方法, 采用数字模型轻量化与OpenGL 双缓冲机制保证了模型的高效驱动;
3)提出了在线读取最新保存数据的方法, 突破了平台数字样机与试验台在线测试接口技术, 实现了数字模型对物理平台运动的实时跟随;
4)开发了惯性平台三维可视化在线测试与示教系统, 通过离线与在线测试验证了方法的可行性以及系统的实用性, 实现了平台内部框架运动状态的可视化。