| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> 数字孪生系统中的坐标系协调问题解决方案 -> 正文阅读 |
|
[游戏开发]数字孪生系统中的坐标系协调问题解决方案 |
实际问题描述在数字孪生系统中,仿真模型与现实实体通过数据交互相互映射。与现实实体不同的是,仿真模型位于塞博空间,标识其位置和姿态的量都是基于数字空间定义的坐标系。例如,Unity3D开发平台中,每一个仿真场景都存在唯一确定的世界坐标系。而现实实体无论是处于制造、装配、还是维护阶段,都必然有其依赖的工艺坐标系。数据模型中包含的状态数据、工艺数据、以及生产流程数据,与虚实世界坐标系有着紧密的交互关系。因此,对于每一个数字孪生系统,理清好虚实世界中坐标系之间的关系,是系统设计的关键一步。 环轨自动钻铆机仿真模型的建立过程中也不可避免地遇到了上述问题。比如,Unity3D开发平台与真实现场采用不同的笛卡尔坐标系、仿真模型的产品坐标系与世界坐标系不吻合等情况下,将用于实际加工的离线编程导入到仿真模型中模拟验证时,该如何处理加工点信息?以及如何将处理方法优化为可持续更新的功能模块,便于之后的升级与调整? 思路分析坐标变换是工程中用来处理坐标系之间对应关系的重要手段,常见的坐标变换方法有平移变换和旋转变换。Unity3D开发平台中设置的是笛卡尔左手坐标系,而真实加工现场使用的是笛卡尔右手坐标系,因此实现虚实场景之间加工点坐标位置的对应,需要引入手系转换方法。另外,在Unity3D中创建或者导入模型时,模型的坐标中心不总是与其内部的世界坐标系中心贴合,因此模型所在的相对坐标系和绝对的世界坐标系之间存在转换关系,需要引入局部转世界坐标转换矩阵将二者对应起来。将模型向Unity3D导入的过程中,依次经过左右手坐标系转换、局部转世界坐标转换,由于矩阵运算不满足交换律,加工点坐标在转换运算中需要注意先后顺序,具体形式如下图1。 ?图1 坐标转换简单示意图 局部转世界坐标转换矩阵是由Unity3D中矩阵类Matrix4x4实例化的对象,该矩阵包含位移、旋转和伸缩信息。点的手系转换只存在旋转变换,并且只需将某一个轴分量取反。一般取X轴为反,可以简化模型在Unity3D中位姿调整的步骤。为满足矩阵乘法的运算规则,将手系转换矩阵由3x3扩充至4x4,因此将点的手系转换矩阵定义为? ?项目方案设计1、整体设计 本项目搭建一个可以解决数字孪生系统中坐标系协调问题的功能模块,主要功能有模型导入、加工点位置坐标转换、参考坐标系设定等,辅助功能有调用MySQL数据库、模型初始化设定、UI界面控制、加工点位置验证等。 ? 图2 主要功能之间逻辑关系图? 2、详细设计
加工点位置坐标转换作为该模块的核心部分,主要的功能效果是输入离线编程加工点位置坐标,输出该加工点在Unity3D仿真平台中的位置坐标;或者输入离线编程加工点位置坐标,并为加工件设定参考坐标系,输出该加工点在参考坐标系下的位置坐标。 该功能块的输入端调用MySQL数据库读取待加工点位置坐标;输出端调用加工点验证功能块展示加工效果,也可以与环形轨道自动钻铆机运动仿真模块相连。首先将MySQL数据库中的加工点位置坐标读取到Unity3D仿真模型中,并且将待加工点信息显示在UI界面上。其次将加工点位置坐标依次进行坐标转换,确定其在Unity3D仿真模型中的位置。最后调用加工点验证功能,将加工点实例化呈现在蒙皮模型上。 图3 坐标转换功能逻辑关系图 ? ? ? ? 2.蒙皮模型的动态导入 一般来说,在Unity3D设计模式下可以编辑仿真模型,而仿真模型在运行的时候是无法更改升级的,不满足可持续升级更新的功能要求。以环形轨道自动钻铆机为例,数字孪生系统要求虚实空间的状态时刻保持同步,即要求仿真模型同真实设备做柔性化的调整。环轨系统柔性轨道部分可以适应多种飞机蒙皮类型的加工,因此要求仿真模型中也可以随之更改蒙皮模型,即蒙皮模型的动态导入和更改。 蒙皮模型动态导入是数字孪生坐标系协调功能模块的衍生部分,主要的功能效果是允许操作人员将模型从计算机资源管理器实时导入到仿真模型中。为了优化蒙皮模型的导入效果,特别添加了模型设定初始化等辅助功能块。 模型动态导入,具体的方法实现流程如下图3。 图4 蒙皮模型动态导入实现方法 在蒙皮模型动态导入过程中,添加了辅助函数,比如显示当前加载进度、对导入模型进行初步位置调整、在模型导入结束后UI界面实现导入模型的名字。这些辅助函数用Update函数反复循环调用的,满足条件就运行执行,具体实现模式如下图4。 图5 FBX文件动态导入时辅助函数运行逻辑图 ? ? ? ?3.设定参考坐标系 设定参考坐标系功能是由C#语言中Switch语句和Unity3D中Dropdown组件结合实现的,并将其设计为一个独立的功能模块,可由其他功能调用。 设定参考坐标系是连接坐标转换和模型动态导入的重要桥梁。坐标转换功能在默认情况下,是将加工点离线编程中的位置坐标转换为Unity3D中世界坐标系下的位置坐标,而且加工点位置验证功能的实现效果是指绝对位置,与加工件的参考坐标系没有关系。但实际环形轨道自动钻铆机在运动仿真模块中的参考坐标系是小车坐标系,各轴运动量是由小车坐标系下的加工点位置坐标反解出来的,因此在利用坐标转换功能时,需要将待加工件的参考坐标系设定为小车坐标系。 实际的环轨自动钻铆机仿真模型共涉及设备坐标系、产品坐标系、小车坐标系、末端坐标系、相机坐标系等五个坐标系,而加工点位置验证、运动仿真模块以及之后补充开发的蒙皮零件自动装配等不同功能,都需要提前设定加工件的参考坐标系。 图 5 参考坐标系设定功能逻辑示意图 解决方案和实现效果由于涉及到动态仿真操作,在坐标转换中,也出现了很多顺序操作,比如: 这句代码中需要访问导入模型的名称,因此在模型导入之前是无法运行坐标点数据转换的脚本。下图4中的四个功能块(“请导入FBX格式模型”与“模型加载进度”是一个功能), 功能实现流程如流程图5所示 图4 《Unity3D-Dynamic Loading FBX New》项目中的UI界面 图5 《Unity3D-Dynamic Loading FBX New》UI界面操作流程 向Unity项目中动态导入FBX格式模型导入蒙皮零件Skin.FBX 图6 模型文件导入框 ?图7 未导入蒙皮的基座 ?图8 导入后蒙皮的基座 ?图 9 加载进度条设置、加载模型名称显示 ?为导入模型设置坐标系图10 设置界面? ? ?? ?图11 坐标系成功设置提示 读取加工点坐标验证结果是否正确?图12 数据库查找结果 ?图13 蒙皮待加工点验证情况(√) |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/13 15:07:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |