CN111390908B - 一种基于网页的机械臂虚拟拖动方法 - Google Patents
一种基于网页的机械臂虚拟拖动方法 Download PDFInfo
- Publication number
- CN111390908B CN111390908B CN202010221277.2A CN202010221277A CN111390908B CN 111390908 B CN111390908 B CN 111390908B CN 202010221277 A CN202010221277 A CN 202010221277A CN 111390908 B CN111390908 B CN 111390908B
- Authority
- CN
- China
- Prior art keywords
- mechanical arm
- joint
- virtual
- webpage
- dragging
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 67
- 230000003993 interaction Effects 0.000 claims abstract description 19
- 238000013461 design Methods 0.000 claims abstract description 15
- 230000008859 change Effects 0.000 claims abstract description 8
- 238000004891 communication Methods 0.000 claims abstract description 7
- 230000009471 action Effects 0.000 claims description 22
- 210000002310 elbow joint Anatomy 0.000 claims description 14
- 210000000323 shoulder joint Anatomy 0.000 claims description 13
- 210000003857 wrist joint Anatomy 0.000 claims description 12
- 230000002452 interceptive effect Effects 0.000 claims description 11
- 238000004364 calculation method Methods 0.000 claims description 9
- 239000012636 effector Substances 0.000 claims description 8
- 230000008569 process Effects 0.000 claims description 7
- 238000009877 rendering Methods 0.000 claims description 7
- 239000011159 matrix material Substances 0.000 claims description 6
- 230000004044 response Effects 0.000 claims description 5
- 230000001419 dependent effect Effects 0.000 claims description 4
- 210000000707 wrist Anatomy 0.000 claims description 4
- 238000012163 sequencing technique Methods 0.000 claims description 3
- 238000007726 management method Methods 0.000 description 17
- 238000005516 engineering process Methods 0.000 description 7
- 210000001503 joint Anatomy 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 4
- 238000011161 development Methods 0.000 description 3
- 230000000903 blocking effect Effects 0.000 description 2
- 230000008676 import Effects 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 239000007921 spray Substances 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000003466 welding Methods 0.000 description 1
Images
Classifications
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B25—HAND TOOLS; PORTABLE POWER-DRIVEN TOOLS; MANIPULATORS
- B25J—MANIPULATORS; CHAMBERS PROVIDED WITH MANIPULATION DEVICES
- B25J9/00—Programme-controlled manipulators
- B25J9/16—Programme controls
- B25J9/1602—Programme controls characterised by the control system, structure, architecture
- B25J9/1605—Simulation of manipulator lay-out, design, modelling of manipulator
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B25—HAND TOOLS; PORTABLE POWER-DRIVEN TOOLS; MANIPULATORS
- B25J—MANIPULATORS; CHAMBERS PROVIDED WITH MANIPULATION DEVICES
- B25J9/00—Programme-controlled manipulators
- B25J9/16—Programme controls
- B25J9/1656—Programme controls characterised by programming, planning systems for manipulators
- B25J9/1658—Programme controls characterised by programming, planning systems for manipulators characterised by programming language
Landscapes
- Engineering & Computer Science (AREA)
- Robotics (AREA)
- Mechanical Engineering (AREA)
- Automation & Control Theory (AREA)
- Software Systems (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明是一种基于网页的机械臂虚拟拖动方法。所述方法为建立七自由度机械臂模型,并搭建网页3D虚拟场景;确定虚拟拖动的实现方式和流程;基于机械臂臂角参数法对机械臂进行运动学建模,并基于关节权重的距离变化最小原则确定最优解;根据网页模块化编程实现异步加载,进行拖动目标、模型、显示和运算的分层设计;基于网页单向数据流架构和状态管理的鼠标交互方法,进行示教数据记录和动画复现;基于websocket通信协议发送示教数据,实现控制真实机械臂。本发明改善机械臂人机交互的性能,提高虚拟示教软件的跨平台性和可扩展性。
Description
技术领域
本发明涉及机械臂虚拟拖动技术领域,是一种基于网页的机械臂虚拟拖动方法。
背景技术
随着机器人技术的快速发展,机械臂的应用也越来越广泛。一方面,从家居服务、工厂作业到农用军事、潜海航天,机械臂所承担的任务日趋复杂,得益于三维仿真技术和硬件能力的迅速提高,使基于虚拟现实的机械臂交互成为一种有效的操控方式;另一方面,原则上对于大多数的机械臂操作任务,操作者都可以通过示教再现方式来控制机械臂工作,从而提高机械臂执行任务的稳定性、准确性和工作效率。
现阶段最常用的机器人示教编程方式包括由人工导引机器人末端执行器(安装于机器人关节结构末端的夹持器、工具、焊枪、喷枪等),或用示教盒(一种与机械臂控制系统相连接的手持装置,用以对机器人进行编程或使之运动)完成程序的编制,来控制机器人完成预期的动作。但是,这类示教方式通常要在离线方式下进行,并且对操作人员的专业性和熟练程度有较高的要求;同时,对于极端环境下作业的机器人来说,操作者无法通过人工导引等方式进行示教。然而,通过虚拟模型示教操作,能够很好地实现任务仿真和在线控制。因此,研究机械臂虚拟示教技术,不仅能够提高机械臂的易用性,还能在特殊工作场景下进行遥操作,对于机械臂的推广应用具有至关重要的意义。
传统的机械臂虚拟现实技术多采用OpenGL或Open Inventor等进行编程来实现虚拟场景的构建和人机交互。然而,OpenGL编程难度较大,开发周期较长;而Open Inventor并非开源,开发成本较高。此外,一些机器人企业的相关成熟软件专用性比较强,不适合扩展研究。近年来,随着互联网技术的飞速进步,Web功能日渐强大,新一代浏览器在二维和三维图形显示方面的能力得到巨大提升,WebGL也因此成为了当前在网页上进行三维游戏场景构建的标准。同时,JavaScript编程语言的功能也逐渐完善,形成了一个封装了底层WebGL的Three.js三维图形工具包,对于网页三维图形开发提供了良好的接口。网页可以在任何具有现代浏览器的操作系统上打开,轻量便捷。
发明内容
本发明为改善机械臂人机交互的性能,提高虚拟示教软件的跨平台性和可扩展性,本发明提供了一种基于网页的机械臂虚拟拖动方法,本发明提供了以下技术方案:
一种基于网页的机械臂虚拟拖动方法,包括以下步骤:
步骤1:建立七自由度机械臂模型,并搭建网页3D虚拟场景,所述网页3D虚拟场景基于Web图形工具Three.js实现;
步骤2:确定虚拟拖动的实现方式和流程,所述虚拟拖动的实现方式包括鼠标拖动虚拟模型末端和鼠标拖动对应关节角度的交互滑条,设计了末端拖动交互标记;
步骤3:基于机械臂臂角参数法对机械臂进行运动学建模,并基于关节权重的距离变化最小原则确定最优解;
步骤4:根据网页模块化编程实现异步加载,进行拖动目标、模型、显示和运算的分层设计;
步骤5:基于网页单向数据流架构和状态管理的鼠标交互方法,进行示教数据记录和动画复现;
步骤6:基于websocket通信协议发送示教数据,实现控制真实机械臂。
优选地,所述鼠标拖动对应关节角度的交互滑条具体为:通过Three.js提供的dat.Gui.js设计具有关节限位的滑块,用鼠标拖动滑块来实现。
优选地,鼠标拖动虚拟模型末端具体为:将鼠标在虚拟三维空间中的位姿作为机械臂逆解程序的输入量,通过Three.js的TransformControls.js解析鼠标拖动的目标点的位姿,实时输入给逆解程序;逆解程序输出机械臂在末端位姿下的各个关节的绝对角度位置;通过Three.js提供的dat.Gui.js切换鼠标拖动机械臂末端的控制模式,移动控制模式下,姿态值默认原值不变,旋转控制模式下,位置值默认原值不变;姿态旋转通过欧拉角RPY表示。
优选地,确定鼠标输入的末端目标点位姿是否在机械臂的可达工作空间内,当在机械臂的可达工作空间内则进行逆解,输出末端位姿和关节角度值;当不在机械臂的可达工作空间内,则将有解值再一次赋给关节变量,防止无解时JavaScript在无解时而导致虚拟图形无法正常显示,通过单向数据流数据状态管理记录每一次的运算值,实现示教点的记录。
优选地,所述步骤3具体为:
其中:0lbs=[0,0,-dbs]T,3lse=[0,dse,0]T,4lew=[0,0,-dew]T,7lwt=[0,0,-dwt]T;
求基坐标{0}中手腕w点相对于肩部s点的向量0xsw
上述0lbs为肩关节s相对于基座b的位置向量在坐标系{0}中的表示,3lse为肘关节e相对于肩关节s的位置向量在坐标系{3}中的表示,4lew为腕关节w相对于肘关节e的位置向量在坐标系{4}中的表示,7lwt为末端执行器t相对于腕关节w的位置向量在坐标系{7}中的表示;dbs、dse、dew和dwt分别为基座与肩关节、肩关节与肘关节、肘关节与腕关节、腕关节与末端执行器之间的距离;其中,0lbs和7lwt已知。令0usw为0xsw的单位向量:0usw=0xsw/||0xsw||;令[0usw×]为0usw的反对称矩阵,通过下式表示[0usw×]:
根据肘关节角θ4与臂角无关,利用余弦定理求解3R4,通过下式进行求解:
左右两边对应项相等:先解关节2角度θ2,进而计算出关节1角度θ1;
当奇异情况为|θ2|<ε或|θ6|<ε时,此时sin|θ2|=0,0R3退化,通过下式表示退化后的0R3:
得到θ1+θ3=arctan(0R3(2,1),0R3(1,1)),按运动距离比例分配可得到θ1和θ3,θ5和θ7同理;
采用JavaScript编写运动学正逆解类class kinematic,以1°为步长,计算定义的臂角从-π到+π所有的逆解,保存下来,基于权重分配的距离最小原则,选择一组最优解作为示教路径点,通过下式表示最优解:
其中,D为路径最小解的总距离,ωi表示第i个关节的权重因子,θnow表示计算的关节角度,θthen表示记录的上一个状态下的关节角度。
优选地,所述步骤4根据网页模块化编程实现异步加载具体为:
根据JavaScript语言提供require.js模块化异步加载工具,通过require.js解决html中的script造成的排序依赖问题,通过require.js定义了模块module,通过require语句调用js文件中的Robot.js,并通过module.exports将公共接口暴露;
在网页的主程序html文件中,由于Hmi.js程序调用了所有程序,就用Hmi.js程序中暴露的Hmi类新建对象并添加到<script>中;
在requirejs.config中通过baseUrl声明所调用文件的格式为js脚本,在路径paths:中添加全局依赖文件State和Kinematic;
据网页模块化编程实现异步加载,进行拖动目标、模型、显示和运算的分层设计。
优选地,所述步骤4中进行拖动目标、模型、显示和运算的分层设计具体为:将拖动目标跟随、模型描述、场景显示和运算程序进行分层设计,在THREERobot_1.js中编写机械臂模型,在THREEScene_1.js中编写页面虚拟相机渲染和显示程序,在Robot.js中调用运动学正逆解运算,在Target.js中解析鼠标拖动事件并跟随目标。
优选地,所述步骤5:基于网页单向数据流架构和状态管理的鼠标交互方法,进行示教数据记录和动画复现具体为:通过State.js状态管理工具配合require.js模块化工具,在单向数据流的基础上记录示教数据,State.js具有一个Dispatcher存储调度中心,Dispatcher存储和视图View是有着不同输入输出的独立节点,Action动作是一个简单对象,视图View触发动作Action,并作为用户交互的响应将在整个系统传递,存储管理store的状态state只能由action改变,state的形式为js基本类型、数组或对象,而state变化时需要返回全新的对象,改变内部state是通过dispatch一个action,一个存储中返回一个状态属性,将多个源对象的所有可枚举属性复制到目标对象。
优选地,所述步骤6具体为:基于websocket通信协议发送示教数据,实现控制真实机械臂,单向数据流将不同对象或者变量的新旧状态记录在状态管理器的对象logger和mid中,通过dat.gui按钮存储并回放虚拟示教的路径点信息,通过websocket以客户端或者服务端的形式将路径点信息发送给真实机械臂的控制器。
本发明具有以下有益效果:
本发明运用基于WebGL的Three.js在浏览器上构建网页三维虚拟场景,提出了基于网页的机械臂虚拟拖动示教方法。本发明所述方法首先搭建七自由度机械臂的虚拟模型,提出以臂角参数法为基础的冗余机械臂运动学逆解算法,基于一种权重定义求取了逆运动学最优解,并实现机械臂运动学类;本发明所述方法应用网页模块化编程思想对网页工程进行优化并分层设计,实现异步加载,有效地避免传统复杂网页渲染时由于单线程而导致的网页页面阻塞问题,提升网页交互界面的流畅性即鼠标拖动交互的体验感;本发明所述方法提出以网页单向数据流为架构对交互过程中的动态数据进行传递、存储、监听等以实现交互状态管理,能够记录虚拟模型的运算数据状态以实现过程回放。本发明为基于网页的虚拟机器人程序实现了更好的交互功能,使基于网页进行虚拟示教方便可行,而且基于网页使虚拟示教在任意安装了现代浏览器的系统上都可以实现,提高了示教系统的跨平台性。
附图说明
图1为基于网页的机械臂虚拟拖动方法流程图;
图2-(a)为机械臂的改进DH坐标系图;图2-(b)为Three.js结构树,图2-(c)为机械臂节点连接图;图2-(d)为组合相机原理图;
图3为机械臂鼠标拖动虚拟示教方案流程图;
图4-(a)为臂角定义,图4-(b)为机械臂运动学臂角法流程图;
图5为模块化异步加载模式下的软件分层架构图;
图6为网页单向数据流状态管理示意图;
图7-(a)为websocket示意图,图7-(b)为机械臂虚拟示教网页界面,图7-(c)为关节操作和末端状态显示的小部件,图7-(d)为路径存储再现的小部件。
具体实施方式
以下结合具体实施例,对本发明进行了详细说明。
具体实施例一:
根据图1所示,本发明提供一种基于网页的机械臂虚拟拖动方法,
步骤1:建立七自由度机械臂模型,并搭建网页3D虚拟场景,所述网页3D虚拟场景基于Web图形工具Three.js实现;
步骤2:确定虚拟拖动的实现方式和流程,所述虚拟拖动的实现方式包括鼠标拖动虚拟模型末端和鼠标拖动对应关节角度的交互滑条;
所述鼠标拖动对应关节角度的交互滑条具体为:通过Three.js提供的dat.Gui.js设计具有关节限位的滑块,用鼠标拖动滑块来实现。
鼠标拖动虚拟模型末端具体为:将鼠标在虚拟三维空间中的位姿作为机械臂逆解程序的输入量,通过Three.js的TransformControls.js解析鼠标拖动的目标点的位姿,实时输入给逆解程序;逆解程序输出机械臂在末端位姿下的各个关节的绝对角度位置;通过Three.js提供的dat.Gui.js切换鼠标拖动机械臂末端的控制模式,移动控制模式下,姿态值默认原值不变,旋转控制模式下,位置值默认原值不变;姿态旋转通过欧拉角表示。
确定鼠标输入的末端目标点位姿是否在机械臂的可达工作空间内,当在机械臂的可达工作空间内则进行逆解,输出末端位姿和关节角度值;当不在机械臂的可达工作空间内,则将有解值再一次赋给关节变量,防止无解时JavaScript在无解时而导致虚拟图形无法正常显示,通过单向数据流数据状态管理记录每一次的运算值,实现示教点的记录。
确定鼠标输入的末端目标点位姿是否在机械臂的可达工作空间内,当在机械臂的可达工作空间内则进行逆解,输出末端位姿和关节角度值;当不在机械臂的可达工作空间内,则将有解值再一次赋给关节变量,防止无解时JavaScript在无解时而导致虚拟图形无法正常显示,通过单向数据流数据状态管理记录每一次的运算值,实现示教点的记录。
步骤3:基于机械臂臂角参数法对机械臂进行运动学建模,并基于关节权重的距离变化最小原则确定最优解;
所述步骤3具体为:
步骤3.1:基于机械臂臂角参数法对机械臂进行运动学建模,机械臂的前三个关节和后三个关节的轴线分别相交于一点,因此前三个关节和后三个关节分别等价于一个虚拟的球形关节,分别表示为s和w。对于所采用7自由度拟人机械臂,给定臂的末端相对于基系{0}的目标姿态和位置矩阵其中:0lbs=[0,0,-dbs]T,3lse=[0,dse,0]T,4lew=[0,0,-dew]T,7lwt=[0,0,-dwt]T;求基坐标{0}中手腕w点相对于肩部s点的向量0xsw:
上述0lbs为肩关节s相对于基座b的位置向量在坐标系{0}中的表示,3lse为肘关节e相对于肩关节s的位置向量在坐标系{3}中的表示,4lew为腕关节w相对于肘关节e的位置向量在坐标系{4}中的表示,7lwt为末端执行器t相对于腕关节w的位置向量在坐标系{7}中的表示;dbs、dse、dew和dwt分别为基座与肩关节、肩关节与肘关节、肘关节与腕关节、腕关节与末端执行器之间的距离;其中,0lbs和7lwt已知。令0usw为0xsw的单位向量:0usw=0xsw/||0xsw||;令[0usw×]为0usw的反对称矩阵,通过下式表示[0usw×]:
根据肘关节角θ4与臂角无关,利用余弦定理求解3R4,通过下式进行求解:
左右两边对应项相等:先解关节2角度θ2,进而计算出关节1角度θ1;
当奇异情况为|θ2|<ε或|θ6|<ε时,此时sin|θ2|=0,0R3退化,通过下式表示退化后的0R3:
得到θ1+θ3=arctan(0R3(2,1),0R3(1,1)),按运动距离比例分配可得到θ1和θ3,θ5和θ7;
采用JavaScript编写运动学正逆解类class kinematic,以1°为步长,计算定义的臂角从-π到+π所有的逆解,保存下来,基于权重分配的距离最小原则,选择一组最优解作为示教路径点,通过下式表示最优解:
其中,D为路径最小解的总距离,ωi表示第i个关节的权重因子,θnow表示计算的关节角度,θthen表示记录的上一个状态下的关节角度。
步骤4:根据网页模块化编程实现异步加载,进行拖动目标、模型、显示和运算的分层设计;
根据JavaScript语言提供require.js模块化异步加载工具,通过require.js解决html中的script造成的排序依赖问题,通过require.js定义了模块module,通过require语句调用js文件中的Robot.js,并通过module.exports将公共接口暴露;
在网页的主程序html文件中,由于Hmi.js程序调用了所有程序,就用Hmi.js程序中暴露的Hmi类新建对象并添加到script中;
在requirejs.config中通过baseUrl声明所调用文件的格式为js脚本,在路径paths:中添加全局依赖文件State和Kinematic;
据网页模块化编程实现异步加载,进行拖动目标、模型、显示和运算的分层设计。
将拖动目标跟随、模型描述、场景显示和运算程序进行分层设计,在THREERobot_1.js中编写机械臂模型,在THREEScene_1.js中编写页面虚拟相机渲染和显示程序,在Robot.js中调用运动学正逆解运算,在Target.js中解析鼠标拖动事件并跟随目标。
步骤5:基于网页单向数据流架构和状态管理的鼠标交互方法,进行示教数据记录和动画复现;
所述步骤5:基于网页单向数据流架构和状态管理的鼠标交互方法,进行示教数据记录和动画复现具体为:通过State.js状态管理工具配合require.js模块化工具,在单向数据流的基础上记录示教数据,State.js具有一个Dispatcher存储调度中心,Dispatcher存储和视图View是有着不同输入输出的独立节点,Action动作是一个简单对象,视图View触发动作Action,并作为用户交互的响应将在整个系统传递,存储管理store的状态state只能由action改变,state的形式为js基本类型、数组或对象,而state变化时需要返回全新的对象,改变内部state是通过dispatch一个action,一个存储中返回一个状态属性,将多个源对象的所有可枚举属性复制到目标对象。
步骤6:基于websocket通信协议发送示教数据,实现控制真实机械臂。
所述步骤6具体为:基于websocket通信协议发送示教数据,实现控制真实机械臂,单向数据流将不同对象或者变量的新旧状态记录在状态管理器的对象logger和mid中,通过dat.gui按钮存储并回放虚拟示教的路径点信息,通过websocket以客户端或者服务端的形式将路径点信息发送给真实机械臂的控制器。
具体实施例二:
结合图2首先,机械臂的3D模型通过SolidWorks软件(或其他三维建模软件)建立,改进的DH坐标系图如图2(a),主要参数如D-H参数表1所示:
表1、DH参数
i | θ<sub>i</sub>(deg) | d<sub>i</sub>(mm) | a<sub>i</sub>(mm) | α<sub>i</sub>(deg) | 运动范围(deg) |
1 | Θ<sub>1</sub>(0) | -164 | 0 | 0 | [-45,175] |
2 | Θ<sub>2</sub>(0) | 0 | 0 | -90 | [-105,85] |
3 | Θ<sub>3</sub>(0) | -450.5 | 0 | 90 | [-115,115] |
4 | Θ<sub>4</sub>(0) | 0 | 0 | -90 | [0,125] |
5 | Θ<sub>5</sub>(0) | -357.5 | 0 | 90 | [-115,115] |
6 | Θ<sub>6</sub>(0) | 0 | 0 | -90 | [-85,85] |
7 | Θ<sub>7</sub>(0) | -369 | 0 | 90 | [-115,115] |
在SolidWorks中装配好之后在基座中心添加一个参考坐标系(以区别于世界坐标系),然后在另存为选项中选择输出所建立的坐标系,作为以后机械臂的基坐标系。设置后另存为.stl格式,SolidWorks会根据机械臂的不同装配部件逐个生成stl文件。
在本实施方法中,Three.js应用时只需在html文件的<head>元素中添加脚本路径<script src="js/three.js"></script>。要渲染物体到网页中,需要3个必需组件:场景(scene)、摄相机(camera)和渲染器(renderer)。在Threejs中场景就只有一个,用THREE.Scene来表示。场景是所有物体的容器,场景中的所有物体都要加入场景中才能显示出来,用add实现。要构建一个场景,只要new一个对象,具体实现代码如下:
var scene=new THREE.Scene()
此外,Three.js还包含其他重要的组件,如物体网格对象(Mesh)、灯光元素(Light)、几何体对象(Geometry)、材料对象(Material)、色彩元素(Colour)和贴图元素(Texture)等。它们的结构关系如图2(a)。
Three.js提供了很多外部模型导入的接口。本方法在网页主文件html的脚本中包含接口文件<script src="javascript/STLLoader.js"></script>,在描述三维场景的js文件中的场景模型初始化程序里面创建loader变量,用于模型导入,代码主要为:
var loader=new THREE./STLLoader();
在Three.js程序中通过上述接口导入SolidWorks生成的stl格式文件后,会自动解析装配体模型的位姿关系,以在网页上显示正确的装配体三维图像。在这个基础上,把用Mesh网格元素描述的模型添加到Object3D容器中,以确定机械臂各个关节的连接关系。虚拟场景中父节点运动可以带动子节点运动,反之则不行。因此,对于相邻的两个关节,靠近基座的一个关节永远是远离基座的一个关节的父节点(通过add命令语句完成)。另外,所有关节都是场景scene的子节点,如图2(b)。整个机械臂模型相对世界坐标系的位姿,可以通过修改基座模型父节点Object3D对象的方法position.set或rotation.set实现。
Three.js需要虚拟相机才能将三维模型在网页上渲染出来。Three.js库主要提供了两种常用的摄像机:透视投影摄像机和正交投影摄像机。其中透视投影摄像机的效果更贴近真实世界;而正交投影摄像机中对象渲染出来的尺寸都是一样的。为了使三维场景尽可能的与市面上的三维建模软件一样方便操作者查看,在本实施方法中,提出了组合虚拟相机显示的方法:即在模型显示大小适中时,运用透视相机,在模型显示远小时,切换到正交相机。结合OrbitControls.js或TrackballControls.js,可以实现网页上虚拟图形的放大缩小、任意方向旋转和场景的上下左右移动等鼠标基本交互。本方法采用html5-Web图形库提供的一个新解决方案——requestAnimationFrame()的自循环调用,来显示渲染动画并降低CPU占用率。
结合图3,机械臂关节角度的直接操作是通过Three.js提供的dat.Gui.js设计具有关节限位的滑块,用鼠标拖动滑块来实现。另外,鼠标拖动虚拟机械臂末端的示教技术则是将鼠标在虚拟三维空间中的位姿作为机械臂逆解程序的输入量。通过Three.js的TransformControls.js解析鼠标拖动的目标点(一般为末端执行器中心)位姿,实时输入给逆解程序。逆解程序输出机械臂在该末端位姿下的各个关节的绝对角度位置。其中,通过Three.js提供的dat.Gui.js切换鼠标拖动机械臂末端的控制模式(translate或rotate),移动控制模式下,姿态值默认原值不变,旋转控制模式下,位置值默认原值不变。姿态旋转通过欧拉角表示。程序首先判断鼠标输入的末端目标点位姿是否在机械臂的可达工作空间内,若在则进行逆解,输出末端位姿和关节角度值;若不在则将上次的有解值再一次赋给关节变量,防止无解时JavaScript在无解时而导致虚拟图形无法正常显示。通过单向数据流数据状态管理记录每一次的运算值,从而实现示教点的记录。
结合图4,运动学逆解是采用了臂角法,建模对象是一个SRS拟人型七自由度机械臂。鼠标拖动末端期望点的位姿默认是相对于世界坐标系的,要通过位姿变换矩阵变换到机械臂基坐标下。臂角的定义如图4(a)所示。下面简述臂角法计算逆解的方法:
如图4(a)所示,以θ3=0时所对应臂平面为参考平面;对于逆解,已知末端位姿,相当于给定相对于基系{0}的目标位姿其中:0lbs=[0,0,-dbs]T,3lse=[0,dse,0]T,4lew=[0,0,-dew]T,7lwt=[0,0,-dwt]T;求0xsw:
其中:已知关节连杆参数0lbs、7lwt。令0usw为0xsw的单位向量:0usw=0xsw/||0xsw||;令[0usw×]为0usw的反对称矩阵,通过下式表示[0usw×]:
利用余弦定理求解3R4,通过下式进行求解:
利用(1)中所计算的0xsw,左右两边相等,即求出θ4确定后,3xsw=3lse+3R4 4lew,展开后z方向上为0,则令3xsw=[p3,q3,0]T,又令0xsw=[p0,q0,r0]T,带入公式
左右两边对应项相等:先解θ2,进而计算出θ1。
当奇异情况为|θ2|<ε或|θ6|<ε时,此时sin|θ2|=0,0R3退化,通过下式表示退化后的0R3:
得到θ1+θ3=arctan(0R3(2,1),0R3(1,1)),按运动距离比例分配可得到θ1和θ3,θ5和θ7;
采用JavaScript编写运动学正逆解类,以1°为步长,计算定义的臂角从-π到+π所有的逆解,保存下来,基于权重分配的距离最小原则,选择一组最优解作为示教路径点,通过下式表示最优解:
其中,D为路径最小解的总距离,ωi表示第i个关节的权重因子,θnow表示计算的关节角度,θthen表示记录的上一个状态下的关节角度。
结合图5,JavaScript语言提供require.js等模块化异步加载工具,require.js可以解决html程序中过多的script造成的排序依赖问题。本方法通过require.js定义了模块module,通过require语句调用其它js文件,如Robot.js,并通过module.exports将此文件中的公共接口暴露出去。代码实现如下:
在网页的主程序html文件中,由于Hmi.js程序调用了所有程序,就用Hmi.js程序中暴露的Hmi类新建对象并添加到<script></script>中,如下:
require(['Hmi'],function(Hmi){
let hmi=new Hmi()
});
同时,在requirejs.config中通过baseUrl声明所调用文件的格式为js脚本,在路径paths:中添加全局依赖文件State和Kinematic,如下:
requirejs.config({baseUrl:'js',
paths:{State:'../vendor/state/State',Kinematic:'Kinematic'},});
如图5本实施方法还将拖动目标跟随、模型描述、场景显示和运算程序进行分层设计,在THREERobot_1.js中编写机械臂模型,在THREEScene_1.js中编写页面虚拟相机渲染和显示程序,在Robot.js中调用运动学正逆解运算,在Target.js中解析鼠标拖动事件并跟随目标。模块化异步加载和分层设计既便于代码复用、维护,又能够防止单线程的JavaScript语言导致网页渲染页面发生阻滞,避免降低交互体验感。
结合图6,提出单向数据流响应的状态管理方法,有效减少重复代码,比传统的数据绑定更简单,不容易产生像全局变量污染命名空间的情况,可以降低程序的耦合风险。State.js状态管理工具配合require.js模块化工具,可以在单向数据流的基础上记录示教数据。如图6所示,State.js具有一个Dispatcher存储调度中心,Dispatcher存储和视图View是有着不同输入输出的独立节点,Action动作是一个简单对象,只是包含新的数据和一个标识符类型的属性。视图View也会触发动作Action,并作为用户交互的响应将在整个系统传递。一个存储管理store的状态state只能由action改变,state的形式可以为js基本类型、数组或对象等,而state变化时需要返回全新的对象,改变内部state是通过dispatch一个action。一个存储中返回一个状态属性Object.assign(),它将多个源对象的所有可枚举属性复制到目标对象。本实施方法约定使用一个字符串类型的type字段(大写字母组成)来表示所执行的动作,如CHANGE_TARGET。
本发明的依赖模块主要包括Robot.js、Target.js、THREERobot.js、THREEScene.js、RobotGui.js、TargetGui.js等,在模型描述、目标描述以及相应的gui模块,除了require必要的基本依赖模块,还会设置该存储的初始状态。例如Robot.js的初始状态表示如下:
在单向数据流中,机械臂逆解的动作action表示如下:
拖动虚拟机械臂末端目标位姿Target,使机械臂跟随运动的方法用如下语句表示:
结合图7,向数据流将不同对象或者变量的新旧状态记录在状态管理器的对象logger和mid中,通过dat.gui按钮存储并回放虚拟示教的路径点信息如图7(d),并通过websocket以客户端/服务端的形式(如图7(a))将路径点信息发送给真实机械臂的控制器。其中,网页作为机械臂控制的客户端。图7(b)(c)(d)即为网页虚拟示教软件的主要部分。
以上所述仅是一种基于网页的机械臂虚拟拖动方法的优选实施方式,一种基于网页的机械臂虚拟拖动方法的保护范围并不仅局限于上述实施例,凡属于该思路下的技术方案均属于本发明的保护范围。应当指出,对于本领域的技术人员来说,在不脱离本发明原理前提下的若干改进和变化,这些改进和变化也应视为本发明的保护范围。
Claims (6)
1.一种基于网页的机械臂虚拟拖动方法,其特征是:包括以下步骤:
步骤1:建立七自由度机械臂模型,并搭建网页3D虚拟场景,所述网页3D虚拟场景基于Web图形工具Three.js实现;
步骤2:确定虚拟拖动的实现方式和流程,所述虚拟拖动的实现方式包括鼠标拖动虚拟模型末端和鼠标拖动对应关节角度的交互滑条,开发了末端拖动交互标记;
步骤3:基于机械臂臂角参数法对机械臂进行运动学建模,并基于关节权重的距离变化最小原则确定最优解;
所述步骤3具体为:
其中:0lbs=[0,0,-dbs]T,3lse=[0,dse,0]T,4lew=[0,0,-dew]T,7lbswt=[0,0,-dwt]T;求基坐标{0}中手腕w点相对于肩部s点的向量:
其中,0lbs为肩关节s相对于基座b的位置向量在坐标系{0}中的表示,3lse为肘关节e相对于肩关节s的位置向量在坐标系{3}中的表示,4lew为腕关节w相对于肘关节e的位置向量在坐标系{4}中的表示,7lwt为末端执行器t相对于腕关节w的位置向量在坐标系{7}中的表示;dbs、dse、dew和dwt分别为基座与肩关节、肩关节与肘关节、肘关节与腕关节、腕关节与末端执行器之间的距离;
令0usw为0xsw的单位向量:0usw=0xsw/||0xsw||,[0usw×]为0usw的反对称矩阵,通过下式表示[0usw×],:
根据θ4与臂角无关,利用余弦定理求解3R4,通过下式进行求解:
左右两边对应项相等:先解关节2角度θ2,进而计算出关节1角度θ1;
当c2p3-s2q3=0时,向量0xsw与关节1轴线重合,自运动时,只有关节1发生变化,
当奇异情况为|θ2|<ε或|θ6|<ε时,此时sin|θ2|=0,0R3退化,通过下式表示退化后的0R3:
得到θ1+θ3=arctan(0R3(2,1),0R3(1,1)),按运动距离比例分配可得到θ1和θ3,θ5和θ7;
采用JavaScript编写运动学正逆解类class kinematic,以1°为步长,计算定义的臂角从-π到+π所有的逆解,保存下来,基于权重分配的距离最小原则,选择一组最优解作为示教路径点,通过下式表示最优解:
其中,D为路径最小解的总距离,ωi表示第i个关节的权重因子,θnow表示计算的关节角度,θthen表示记录的上一个状态下的关节角度;
步骤4:根据网页模块化编程实现异步加载,进行拖动目标、模型、显示和运算的分层设计;
所述步骤4根据网页模块化编程实现异步加载具体为:
根据JavaScript语言提供require.js模块化异步加载工具,通过require.js解决html中的script造成的排序依赖问题,通过require.js定义了模块module,通过require语句调用js文件中的Robot.js,并通过module.exports将公共接口暴露;
在网页的主程序html文件中,由于Hmi.js程序调用了所有程序,就用Hmi.js程序中暴露的Hmi类新建对象并添加到script中;
在requirejs.config中通过baseUrl声明所调用文件的格式为js脚本,在路径paths:中添加全局依赖文件State和Kinematic;
据网页模块化编程实现异步加载,进行拖动目标、模型、显示和运算的分层设计;
所述步骤4中进行拖动目标、模型、显示和运算的分层设计具体为:将拖动目标跟随、模型描述、场景显示和运算程序进行分层设计,在THREERobot_1.js中编写机械臂模型,在THREEScene_1.js中编写页面虚拟相机渲染和显示程序,在Robot.js中调用运动学正逆解运算,在Target.js中解析鼠标拖动事件并跟随目标;
步骤5:基于网页单向数据流架构和状态管理的鼠标交互方法,进行示教数据记录和动画复现;
步骤6:基于websocket通信协议发送示教数据,实现控制真实机械臂。
2.根据权利要求1所述的一种基于网页的机械臂虚拟拖动方法,其特征是:所述鼠标拖动对应关节角度的交互滑条具体为:通过Three.js提供的dat.Gui.js设计具有关节限位的滑块,用鼠标拖动滑块来实现。
3.根据权利要求1所述的一种基于网页的机械臂虚拟拖动方法,其特征是:鼠标拖动虚拟模型末端具体为:将鼠标在虚拟三维空间中的位姿作为机械臂逆解程序的输入量,通过Three.js的TransformControls.js解析鼠标拖动的目标点的位姿,实时输入给逆解程序;逆解程序输出机械臂在末端位姿下的各个关节的绝对角度位置;通过Three.js提供的dat.Gui.js切换鼠标拖动机械臂末端的控制模式,移动控制模式下,姿态值默认原值不变,旋转控制模式下,位置值默认原值不变;姿态旋转通过欧拉角表示。
4.根据权利要求1所述的一种基于网页的机械臂虚拟拖动方法,其特征是:确定鼠标输入的末端目标点位姿是否在机械臂的可达工作空间内,当在机械臂的可达工作空间内则进行逆解,输出末端位姿和关节角度值;当不在机械臂的可达工作空间内,则将有解值再一次赋给关节变量,防止无解时JavaScript在无解时而导致虚拟图形无法正常显示,通过单向数据流数据状态管理记录每一次的运算值,实现示教点的记录。
5.根据权利要求1所述的一种基于网页的机械臂虚拟拖动方法,其特征是:所述步骤5:基于网页单向数据流架构和状态管理的鼠标交互方法,进行示教数据记录和动画复现具体为:通过State.js状态管理工具配合require.js模块化工具,在单向数据流的基础上记录示教数据,State.js具有一个Dispatcher存储调度中心,Dispatcher存储和视图View是有着不同输入输出的独立节点,Action动作是一个简单对象,视图View触发动作Action,并作为用户交互的响应将在整个系统传递,存储管理store的状态state只能由action改变,state的形式为js基本类型、数组或对象,而state变化时需要返回全新的对象,改变内部state是通过dispatch一个action,一个存储中返回一个状态属性,将多个源对象的所有可枚举属性复制到目标对象。
6.根据权利要求1所述的一种基于网页的机械臂虚拟拖动方法,其特征是:所述步骤6具体为:基于websocket通信协议发送示教数据,实现控制真实机械臂,单向数据流将不同对象或者变量的新旧状态记录在状态管理器的对象logger和mid中,通过dat.gui按钮存储并回放虚拟示教的路径点信息,通过websocket以客户端或者服务端的形式将路径点信息发送给真实机械臂的控制器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010221277.2A CN111390908B (zh) | 2020-03-26 | 2020-03-26 | 一种基于网页的机械臂虚拟拖动方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010221277.2A CN111390908B (zh) | 2020-03-26 | 2020-03-26 | 一种基于网页的机械臂虚拟拖动方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111390908A CN111390908A (zh) | 2020-07-10 |
CN111390908B true CN111390908B (zh) | 2022-05-17 |
Family
ID=71417351
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010221277.2A Active CN111390908B (zh) | 2020-03-26 | 2020-03-26 | 一种基于网页的机械臂虚拟拖动方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111390908B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112338921A (zh) * | 2020-11-16 | 2021-02-09 | 西华师范大学 | 一种基于深度强化学习的机械臂智能控制快速训练方法 |
CN112472298B (zh) * | 2020-12-15 | 2022-06-24 | 深圳市精锋医疗科技股份有限公司 | 手术机器人及其控制装置、控制方法 |
CN112936226B (zh) * | 2021-01-29 | 2023-09-05 | 清华大学 | 并混联机器人末端笛卡尔空间的刚度建模方法 |
CN113119131B (zh) * | 2021-05-08 | 2022-08-16 | 北京壹点灵动科技有限公司 | 机器人的控制方法、装置、计算机可读存储介质及处理器 |
CN113290560A (zh) * | 2021-05-27 | 2021-08-24 | 乐聚(深圳)机器人技术有限公司 | 机器人运动控制方法、装置、电子设备及存储介质 |
CN114282685A (zh) * | 2021-12-26 | 2022-04-05 | 东南大学 | 一种基于虚实结合的装配操作数据集构建系统及方法 |
CN114700932A (zh) * | 2022-04-29 | 2022-07-05 | 清华大学 | 面向机械臂仿真到实际运动的逆运动学建模方法及装置 |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008033419A (ja) * | 2006-07-26 | 2008-02-14 | Honda Motor Co Ltd | ロボット教示用cad装置及びロボット教示方法 |
CN101261783A (zh) * | 2008-04-11 | 2008-09-10 | 浙江工业大学 | 一种《计算机组成原理》仿真实验系统 |
CN103278164A (zh) * | 2013-06-13 | 2013-09-04 | 北京大学深圳研究生院 | 一种复杂动态场景下机器人仿生路径规划方法及仿真平台 |
CN103926845A (zh) * | 2014-04-17 | 2014-07-16 | 哈尔滨工业大学 | 空间机器人视觉伺服捕获运动目标的地面模拟系统及模拟方法 |
CN104742120A (zh) * | 2015-03-31 | 2015-07-01 | 佛山市新鹏机器人技术有限公司 | 一种具备动力的拖动示教机械手 |
CN108356796A (zh) * | 2018-01-12 | 2018-08-03 | 宁波易拓智谱机器人有限公司 | 一种可适配多种工业机器人的示教系统 |
CN108356817A (zh) * | 2018-01-12 | 2018-08-03 | 宁波易拓智谱机器人有限公司 | 一种基于3d模型的示教方法 |
CN108694258A (zh) * | 2017-04-10 | 2018-10-23 | 中国石油化工股份有限公司 | 用于施工方案预演优化的钻井井下虚拟仿真方法及系统 |
CN109202895A (zh) * | 2017-07-06 | 2019-01-15 | 富士通株式会社 | 设计支持装置、设计支持方法及存储设计支持程序的介质 |
CN109213306A (zh) * | 2017-06-30 | 2019-01-15 | 沈阳新松机器人自动化股份有限公司 | 一种机器人远程控制平台及其设计方法 |
CN109746913A (zh) * | 2018-12-29 | 2019-05-14 | 深圳市大象机器人科技有限公司 | 一种机器人姿势保持拖动示教的方法及系统 |
KR20190100696A (ko) * | 2018-02-21 | 2019-08-29 | 주식회사 이노인텍 | 웹 기반 로봇 프로그래밍 시스템 및 방법 |
CN110497412A (zh) * | 2019-08-26 | 2019-11-26 | 中科新松有限公司 | 基于网页和移动端的机器人图形化编程交互系统 |
WO2020007305A1 (zh) * | 2018-07-03 | 2020-01-09 | 上海节卡机器人科技有限公司 | 拖动示教系统和方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9308647B2 (en) * | 2014-06-03 | 2016-04-12 | Bot & Dolly, Llc | Systems and methods for instructing robotic operation |
CN107186709A (zh) * | 2017-05-08 | 2017-09-22 | 深圳市睿科智联科技有限公司 | 一种协作机器人控制方法及系统 |
JP6810093B2 (ja) * | 2018-04-25 | 2021-01-06 | ファナック株式会社 | ロボットのシミュレーション装置 |
-
2020
- 2020-03-26 CN CN202010221277.2A patent/CN111390908B/zh active Active
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008033419A (ja) * | 2006-07-26 | 2008-02-14 | Honda Motor Co Ltd | ロボット教示用cad装置及びロボット教示方法 |
CN101261783A (zh) * | 2008-04-11 | 2008-09-10 | 浙江工业大学 | 一种《计算机组成原理》仿真实验系统 |
CN103278164A (zh) * | 2013-06-13 | 2013-09-04 | 北京大学深圳研究生院 | 一种复杂动态场景下机器人仿生路径规划方法及仿真平台 |
CN103926845A (zh) * | 2014-04-17 | 2014-07-16 | 哈尔滨工业大学 | 空间机器人视觉伺服捕获运动目标的地面模拟系统及模拟方法 |
CN104742120A (zh) * | 2015-03-31 | 2015-07-01 | 佛山市新鹏机器人技术有限公司 | 一种具备动力的拖动示教机械手 |
CN108694258A (zh) * | 2017-04-10 | 2018-10-23 | 中国石油化工股份有限公司 | 用于施工方案预演优化的钻井井下虚拟仿真方法及系统 |
CN109213306A (zh) * | 2017-06-30 | 2019-01-15 | 沈阳新松机器人自动化股份有限公司 | 一种机器人远程控制平台及其设计方法 |
CN109202895A (zh) * | 2017-07-06 | 2019-01-15 | 富士通株式会社 | 设计支持装置、设计支持方法及存储设计支持程序的介质 |
CN108356817A (zh) * | 2018-01-12 | 2018-08-03 | 宁波易拓智谱机器人有限公司 | 一种基于3d模型的示教方法 |
CN108356796A (zh) * | 2018-01-12 | 2018-08-03 | 宁波易拓智谱机器人有限公司 | 一种可适配多种工业机器人的示教系统 |
KR20190100696A (ko) * | 2018-02-21 | 2019-08-29 | 주식회사 이노인텍 | 웹 기반 로봇 프로그래밍 시스템 및 방법 |
WO2020007305A1 (zh) * | 2018-07-03 | 2020-01-09 | 上海节卡机器人科技有限公司 | 拖动示教系统和方法 |
CN109746913A (zh) * | 2018-12-29 | 2019-05-14 | 深圳市大象机器人科技有限公司 | 一种机器人姿势保持拖动示教的方法及系统 |
CN110497412A (zh) * | 2019-08-26 | 2019-11-26 | 中科新松有限公司 | 基于网页和移动端的机器人图形化编程交互系统 |
Non-Patent Citations (4)
Title |
---|
Dey, U. ; Cheruvu Siva, K..Kinematic Analysis and Simulation of a 6 DOF Robot in a Web-Based Platform Using CAD File Import.《Intelligent Systems Design and Applications. 17th International Conference on Intelligent Systems Design and Applications (ISDA 2017). Advances in Intelligent Systems and Computing (736)》.2017, * |
七轴打磨机器人离线编程系统设计与实现;邹学涌;《中国优秀硕士学位论文全文电子期刊网》;20181215;全文 * |
基于Three.js的飞行仿真系统设计;冯姣等;《计算机测量与控制》;20200225;全文 * |
工业机器人在线控制和远程监测系统设计与实现;陈亮等;《机电工程技术》;20190919;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111390908A (zh) | 2020-07-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111390908B (zh) | 一种基于网页的机械臂虚拟拖动方法 | |
EP1288867B1 (en) | Method for generating motion | |
CN111230880A (zh) | 一种离线编程中的复杂曲面加工轨迹生成方法 | |
KR20160002329A (ko) | 로봇 시뮬레이터 및 로봇 시뮬레이터의 파일 생성 방법 | |
CN107901039A (zh) | 基于Python的桌面级机器人离线编程仿真系统 | |
Manring et al. | Augmented reality for interactive robot control | |
EP3673334B1 (en) | Method for engineering autonomous system with reusable skills | |
Braumann et al. | Real-time robot simulation and control for architectural design | |
Minoufekr et al. | Modelling of CNC Machine Tools for Augmented Reality Assistance Applications using Microsoft Hololens. | |
Safaric et al. | Control of robot arm with virtual environment via the internet | |
He et al. | Haptic-aided robot path planning based on virtual tele-operation | |
Alvarez et al. | VRMDS: an intuitive virtual environment for supporting the conceptual design of mechanisms | |
Braun et al. | A customizable, multi-host simulation and visualization framework for robot applications | |
Redondo Verdú et al. | Mixed reality for industrial robot programming | |
Alfrink et al. | Enhanced interaction with industrial robots through extended reality relying on simulation-based digital twins | |
Piccinelli et al. | Trajectory planning using mixed reality: an experimental validation | |
Naskar et al. | Development of a Digital Twin Interface for a Collaborative Robot | |
Li et al. | An effective construction method of modular manipulator 3D virtual simulation platform | |
CN111862297A (zh) | 基于Coin3D的协作机器人可视化仿真示教方法 | |
Washington et al. | Programming by Demonstration using Mixed Reality and Simulated Kinematics | |
Zhang et al. | A visual tele-operation system for the humanoid robot BHR-02 | |
Torguet et al. | Multi-user interactions in the context of concurrent virtual world modelling | |
Faeth et al. | Cutting, deforming and painting of 3d meshes in a two handed viso-haptic vr system | |
Naskar et al. | Development of a Digital Twin Interface for a Collaborative Robot Check for updates | |
Fronchetti et al. | RoboART: Artistic Robot Programming in Mixed Reality |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |