法律状态公告日
法律状态信息
法律状态
2018-02-16
未缴年费专利权终止 IPC(主分类):G06F17/50 授权公告日:20130619 终止日期:20161226 申请日:20111226
专利权的终止
2013-06-19
授权
授权
2012-09-05
实质审查的生效 IPC(主分类):G06F17/50 申请日:20111226
实质审查的生效
2012-06-27
公开
公开
技术领域
本发明是基于DELMIA环境下的沉浸式虚拟维修仿真系统虚拟人控制方法,具体的说,是 一种利用DELMIA软件提供的沉浸式虚拟仿真系统,进行人体动作和行为的仿真,使用户像在 实际产品上一样对虚拟产品进行实时操作,从而可在物理样机产生之前及时地发现设计中存 在的维修问题,它属于虚拟现实技术辅助系统维修的技术领域。
背景技术
沉浸式虚拟仿真是指设计人员在沉浸式虚拟维修环境下对产品进行“虚拟地”维修,可 在物理样机生产之前及时地发现设计中存在的维修问题,进行维修性设计的分析,维修规程 的确认和辅助维修训练。利用动作捕捉系统与虚拟维修仿真软件构建沉浸式虚拟维修仿真系 统,不仅可以利用虚拟维修仿真软件中的产品数据,而且能够让用户像在实际产品上一样对 虚拟产品进行实时操作。
目前动作捕捉系统与虚拟维修仿真软件融合技术的研究进展较慢,二者还相对独立。一 方面,虚拟维修软件具有很强的仿真分析功能,但其中的人体运动建模工作较为繁琐且编辑 的动作不够真实有效;另一方面动作捕捉系统还只在动画制作等特殊领域应用较多,其配套 的软件一般只能利用三维动画复现真人运动轨迹,而不具有其他分析处理功能,也不能载入 CAD产品数据。因此,二者集成能有效的实现真人对虚拟维修仿真软件中虚拟人的控制,为 仿真分析提供更加真实有效的维修动作数据,实现真正意义上的沉浸式虚拟维修。
发明内容
(1)本发明的目的是基于DELMIA环境下的沉浸式虚拟维修仿真系统虚拟人控制方法,通过 将动作捕捉设备所捕捉到的人体动作实时地导入到专业软件提供的虚拟维修平台当中的虚拟 人上,从而可以进行沉浸式的虚拟维修活动。
(2)本发明的技术方案:
以DELMIA虚拟仿真软件和ShapeWarp无线光纤动作捕捉系统构建沉浸式虚拟维修仿真系 统,并利用DELMIA提供的Automation二次开发技术,对二者的接口设计算法做了相应研究, 实现动作捕捉系统采集的真实的维修数据对DELMIA中虚拟人动作控制,提出了DELMIA环境 下虚拟人控制的新方案,实现用户与虚拟环境的融合。
以ShapeWarp无线光纤动作捕捉系统和目前航空部门普遍采用的DELMIA虚拟仿真软件构 建沉浸式虚拟维修仿真系统,并对二者间的接口设计进行了深入研究,实现了动作捕捉系统 对DELMIA软件中虚拟人的控制。
本发明基于DELMIA环境下的沉浸式虚拟维修仿真系统虚拟人控制方法,通过如下步骤实 现:
步骤一、对动作捕捉软件的数据输出进行设置
选择ShapeRecorder作为动作捕捉软件,对其数据的输出进行必要的设置。主要的输出 设置分为实时输出和以文件方式输出。
步骤二、进行动作捕捉,通过动作捕捉设备自带的软件实时发送数据
有两种方式,一种是人员穿上动作捕捉设备,进行动作捕捉;另一种是之前进行动作捕 捉时,用设备自带的软件对动作数据进行录制,而发送数据时则通过设备自带软件打开已录 制好的动作数据文件,向外发送数据。
步骤三、接收并临时保存动作捕捉软件输出的动作数据
以UDPSocket的方式接收数据,以数组的形式临时保存当前接收到的一帧数据。为说明 方便,该数组命名为gpo数组。该数组包含从1到235共235个数据,分别以gpo(1)、gpo(2)…… gpo(235)表示。
步骤四、对动作数据进行计算
根据临时保存的当前帧数据——即gpo数组——进行计算,可以将该数据的格式转换为 DELMIA可以使用的动作数据格式,临时保存在opv数组和iAxisComponentsArray数组当中。 该步骤可以进一步细分为:a)计算人体的方向和位置;b)计算人体每一个肢节的姿势(不包 括手指);c)计算人体手指每一个肢节的姿势
步骤五、将转换完成的动作数据以Automation API的方式赋给DELMIA
步骤六、重复步骤二到步骤五
将动作数据转换完成并输入到DELMIA中的虚拟人使其动作后,此即标志着一帧动作的完 成。然后开始下一帧动作,重复步骤二到步骤五,直到不再进行动作捕捉或动作捕捉设备自 带软件不再发送捕捉到的动作数据为止。
本发明要求的设备条件:两台电脑,其中动作捕捉系统(ShapeRecorder)需要一台,虚 拟环境软件平台(delmia)需要一台,两台电脑之间要有网络连接,或者是一台电脑,动作 捕捉系统和虚拟环境平台都在同一台电脑上运行,此时电脑要有网卡。软件条件:Windows操 作系统,且配置要能够正常运行两款软件。
(3)本发明的优点:
本发明所采用的动作捕捉设备为Measurand公司的光纤式动作捕捉设备,采用的虚拟维 修软件平台为Dassault公司的DELMIA软件。Measurand公司开发了一些数据转换插件软件, 可以将其动作捕捉设备所捕捉到的人体动作实时导入到MotionBuilder软件或Virtools软件 中去。
本发明通过采用DELMIA软件本身提供的接口进行开发,更为重要的是,本发明采用模块 化设计思想,具备可扩展性,即对于不同的动作捕捉设备,通过选择相应的数据转换模块, 可以得到同样格式的动作数据,以操纵DELMIA中的虚拟人。因此,用户可以选择多种动作捕 捉设备,甚至可以同时采用不同的动作捕捉设备捕捉多人的动作,实时地导入到DELMIA中的 多个虚拟人上。
附图说明
图1为基于DELMIA环境下的沉浸式虚拟仿真流程图;
图2为Shaperecorder中的全局坐标系图;
图3为Delmia中的全局坐标系图;
具体实施方式
下面结合附图和实施例对本发明进行详细说明。
本发明首先利用Measurand公司的光纤式动作捕捉设备实时地捕捉人体的动作,并由该 设备自带的ShapeRecorder软件通过UDPSocket的方式实时向外发送数据。然后本发明利用 UDPSocket的方式接收该数据,接着进行数据的转换等计算,将包含人体动作的数据信息转 换成DELMIA可以使用的数据格式。具体实施流程图如图1所示,不过该数据DELMIA软件本 身并不能直接使用,需要通过DELMIA提供的Automation API接口,使用一系列的API函数, 对DELMIA软件进行操作。本发明是基于DELMIA环境下的沉浸式虚拟维修仿真系统虚拟人控 制方法,具体实施步骤如下:
步骤一、对动作捕捉软件的数据输出进行设置
选择ShapeRecorder作为动作捕捉软件,对其数据的输出进行必要的设置。ShapeRecorder 软件有2种数据输出方式,一种为实时输出,一种输出为文件,选择实时输出;该软件有4 种数据输出格式,分别为Global Position and Orientation格式、C3D格式、BVH格式和 MotionBuilder/Quest3D/Virtools(Quaternion)Format格式,选择Global Position and Orientation格式。对实时输出的UDPSocket的属性进行设置,如IP地址、端口号等,具体 以实施例为例。
步骤二、进行动作捕捉,通过动作捕捉设备自带的软件实时发送数据
有两种方式,一种是人员穿上动作捕捉设备,进行动作捕捉,同时该设备自带的软件实 时地发送数据;另一种是之前进行动作捕捉时,用设备自带的软件对动作数据进行录制,而 发送数据时则通过设备自带软件打开已录制好的动作数据文件,向外发送数据。这两种方式 都是可行的。均通过UDPSocket的方式发送数据。
步骤三、接收并临时保存动作捕捉软件输出的动作数据
以UDPSocket的方式接收数据。以数组的形式临时保存当前接收到的一帧数据。为说明 方便,该数组命名为gpo数组。该数组包含从1到235共235个数据,分别以gpo(1)、gpo(2)…… gpo(235)表示。
同时,再建立2个数组,这2个数组将临时保存数据转换的计算结果,为说明方便,将 这2个数组命名为opv数组和iAxisComponentsArray数组。opv数组保存人体的姿态数据, iAxisComponentsArray数组保存人体的方向和位置数据。opv数组包含从0到136共137个 数据,分别以opv(0)、opv(1)……opv(136)表示。iAxisComponentsArray数组包含从0到 11共12个数据,分别以iAxisComponentsArray(0)、iAxisComponentsArray(1)、…… iAxisComponentsArray(11)表示。
步骤四、对动作数据进行计算
根据临时保存的当前帧数据——即gpo数组——进行计算,可以将该数据的格式转换为 DELMIA可以使用的动作数据格式,临时保存在opv数组和iAxisComponentsArray数组当中, 转换的关系图如图2所示:
该步骤可以进一步细分为:
1)计算人体的方向和位置
令
Yaw=gpo(6)×3.1415926÷180
Pitch=gpo(5)×3.1415926÷180
Roll=gpo(4)×3.1415926÷180
Xp=gpo(1)
Yp=gpo(2)
Zp=gpo(3)
然后,令
cy=cos(Yaw)
sY=Sin(Yaw)
cP=cos(Pitch)
sP=Sin(Pitch)
cR=cos(Roll)
sR=Sin(Roll)
再令
iAxisComponentsArray(0)=cy×cP
iAxisComponentsArray(1)=sY×cP
iAxisComponentsArray(2)=sP
iAxisComponentsArray(3)=-sY×cR-cy×sP×sR
iAxisComponentsArray(4)=cy×cR-sY×sP×sR
iAxisComponentsArray(5)=cP×sR
iAxisComponentsArray(6)=sY×sR-cy×sP×cR
iAxisComponentsArray(7)=-cy×sR-sY×sP×cR
iAxisComponentsArray(8)=cP×cR
iAxisComponentsArray(9)=Xp
iAxisComponentsArray(10)=-Zp
iAxisComponentsArray(11)=Yp
则iAxisComponentsArray数组将临时保存人体的方向和位置数据。 2)计算人体每一个肢节的姿势(不包括手指)
假设人体的某部分有两个相邻的肢节,则这两个肢节间存在着类似于“树干——树枝” 的关系,而人体的总“树干”肢节则为人体的臀部。例如,人的左前臂和左上臂这两个肢节, 左上臂为“树干”,左前臂为“树枝”;人的臀部、腰部和胸部间,腰部既是臀部的“树枝”, 又是胸部的“树干”。
假设有某两个相邻的肢节,令“树干”肢节为a肢节,“树枝”肢节为b肢节。则gpo数 组中a肢节的翻滚角、俯仰角、偏航角数据分别为gpo(iar)、gpo(iap)、gpo(iay),b肢节 的翻滚角、俯仰角、偏航角数据分别为gpo(ibr)、gpo(ibp)、gpo(iby)。令
aR=gpo(iar)×3.1415926÷180
aP=gpo(iap)×3.1415926÷180
aY=gpo(iay)×3.1415926÷180
bR=gpo(ibr)×3.1415926÷180
bP=gpo(ibp)×3.1415926÷180
by=gpo(iby)×3.1415926÷180
然后令
cYa=cos(aY)
sYa=Sin(aY)
cPa=cos(aP)
sPa=Sin(aP)
cRa=cos(aR)
sRa=Sin(aR)
cYb=cos(by)
sYb=Sin(by)
cPb=cos(bP)
sPb=Sin(bP)
cRb=cos(bR)
sRb=Sin(bR)
再令
MaT(0)=cYa×cPa
MaT(1)=-sYa×cRa-cYa×sPa×sRa
MaT(2)=sYa×sRa-cYa×sPa×cRa
MaT(3)=sYa×cPa
MaT(4)=cYa×cRa-sYa×sPa×sRa
MaT(5)=-cYa×sRa-sYa×sPa×cRa
MaT(6)=sPa
MaT(7)=cPa×sRa
MaT(8)=cPa×cRa
Mb(0)=cYb×cPb
Mb(1)=sYb×cPb
Mb(2)=sPb
Mb(3)=-sYb×cRb-cYb×sPb×sRb
Mb(4)=cYb×cRb-sYb×sPb×sRb
Mb(5)=cPb×sRb
Mb(6)=sYb×sRb-cYb×sPb×cRb
Mb(7)=-cYb×sRb-sYb×sPb×cRb
Mb(8)=cPb×cRb
然后令
MatrixA(0)=Mb(0)×MaT(0)+Mb(1)×MaT(3)+Mb(2)×MaT(6)
MatrixA(1)=Mb(0)×MaT(1)+Mb(1)×MaT(4)+Mb(2)×MaT(7)
MatrixA(2)=Mb(0)×MaT(2)+Mb(1)×MaT(5)+Mb(2)×MaT(8)
MatrixA(3)=Mb(3)×MaT(0)+Mb(4)×MaT(3)+Mb(5)×MaT(6)
MatrixA(4)=Mb(3)×MaT(1)+Mb(4)×MaT(4)+Mb(5)×MaT(7)
MatrixA(5)=Mb(3)×MaT(2)+Mb(4)×MaT(5)+Mb(5)×MaT(8)
MatrixA(6)=Mb(6)×MaT(0)+Mb(7)×MaT(3)+Mb(8)×MaT(6)
MatrixA(7)=Mb(6)×MaT(1)+Mb(7)×MaT(4)+Mb(8)×MaT(7)
MatrixA(8)=Mb(6)×MaT(2)+Mb(7)×MaT(5)+Mb(8)×MaT(8)
其中,MatrixA是一个代表3×3矩阵的数组。这个矩阵的值代表了b肢节相对于a肢节 的方向变换,即在肢节物体坐标系3个坐标轴(也即自由度)方向上的转动的变换的叠加。 令3个自由度的转动角顺序为先α,再β,最后γ,则:
α=arctan(-MatrixA(6)÷MatrixA(8))
β=arcsin(-MatrixA(7))
γ=arctan(MatrixA(1)÷MatrixA(4))
最后,如果具体肢节的转动方向和坐标轴正轴的方向相同,则将α、β、γ临时保存在 opv(b1)、opv(b2)、opv(b3)中,其中b1和α相对应,是b肢节相对于a肢节最先转动的自 由度,同理b2和β相对应、b3和γ相对应;如果相反,则将-α、-β、-γ临时保存在opv(b1)、 opv(b2)、opv(b3)中。
3)计算人体手指每一个肢节的姿势
手指和其它肢节的计算有一些不同,一是因为进行动作捕捉时未必会捕捉两只手的数据, 二是因为动作捕捉设备自带软件输出的手指数据只包括手指关节的位置数据,不包括欧拉角 形式的、手指肢节的方向数据。所以,如果在动作捕捉时不捕捉手部的动作,则可以省略此 步骤;如果在捕捉时只捕捉一只手的动作,则只计算一只手的数据,另一只不进行计算;如 果捕捉了两只手的动作,则计算两只手的数据。具体的计算方法以右手为例进行说明,左手 参照右手。
令gpo(r)、gpo(p)、gpo(y)分别为右手的翻滚角、俯仰角和偏航角,则:
Yaw=gpo(y)×3.1415926÷180
Pitch=gpo(p)×3.1415926÷180
Roll=gpo(r)×3.1415926÷180
再令
cy=cos(Yaw)
sY=Sin(Yaw)
cP=cos(Pitch)
sP=Sin(Pitch)
cR=cos(Roll)
sR=Sin(Roll)
再令
MatrixO0_Hand(0)=cy×cP
MatrixO0_Hand(1)=sY×cP
MatrixO0_Hand(2)=sP
MatrixO0_Hand(3)=-sY×cR-cy×sP×sR
MatrixO0_Hand(4)=cy×cR-sY×sP×sR
MatrixO0_Hand(5)=cP×sR
MatrixO0_Hand(6)=sY×sR-cy×sP×cR
MatrixO0_Hand(7)=-cy×sR-sY×sP×cR
MatrixO0_Hand(8)=cP×cR
令gpo(ax)、gpo(ay)、gpo(az)分别表示手指根部关节a的x、y、z坐标,gpo(bx)、gpo(by)、 gpo(bz)分别表示手指除根部关节外离手掌较近的关节b的x、y、z坐标,则:
dx=gpo(bx)-gpo(ax)
dy=gpo(az)-gpo(bz)
dz=gpo(by)-gpo(ay)
再令
v(0)=dx×MatrixO0_Hand(0)+dy×MatrixO0_Hand(1)+dz×MatrixO0_Hand(2)
v(1)=dx×MatrixO0_Hand(3)+dy×MatrixO0_Hand(4)+dz×MatrixO0_Hand(5)
v(2)=dx×MatrixO0_Hand(6)+dy×MatrixO0_Hand(7)+dz×MatrixO0_Hand(8)
再令
opv(y)=arcsin(v(1)÷(sqr(v(0)×v(0)+v(1)×v(1))))
opv(p)=-arcsin(v(2)÷(sqr(v(0)×v(0)+v(2)×v(2))))
同时令
oneoverModule=1÷(sqr(dx×dx+dy×dy+dz×dz))
再令
VectorV0(0)=dx×oneoverModule
VectorV0(1)=dy×oneoverModule
VectorV0(2)=dz×oneoverModule
其中,opv(y)、opv(p)分别表示手指根部关节相对于手掌的偏航角、俯仰角。需注意左 手时:
opv(y)=-arcsin(v(1)÷(sqr(v(0)×v(0)+v(1)×v(1))))
计算手指除根部外的其它关节的角度的方法是:令gpo(ax)、gpo(ay)、gpo(az)分别表示 手指离手掌较近的关节a的x、y、z坐标,gpo(bx)、gpo(by)、gpo(bz)分别表示手指离手掌 较远的关节b的x、y、z坐标,令
dx=gpo(bx)-gpo(ax)
dy=gpo(az)-gpo(bz)
dz=gpo(by)-gpo(ay)
再令
oneoverModule=1÷(sqr(dx×dx+dy×dy+dz×dz))
再令
VectorV1(0)=dx×oneoverModule
VectorV1(1)=dy×oneoverModule
VectorV1(2)=dz×oneoverModule
最后令
opv(p)=arccos(VectorV0(0)×VectorV1(0)+VectorV0(1)×VectorV1(1)+ VectorV0(2)×VectorV1(2))
opv(p)即为a关节的弯曲角度。
同时,再令
VectorV0(0)=VectorV1(0)
VectorV0(1)=VectorV1(1)
VectorV0(2)=VectorV1(2)
将其进行迭代运算,可直至求出手指最末端关节的角度。
步骤五、将转换完成的动作数据以Automation API的方式赋给DELMIA
DELMIA提供了两种主要的方式可对其进行二次开发,一种是出售CAA开发包,但价格非 常昂贵,甚至比DELMIA软件还要贵;另一种是DELMIA本身免费提供的Automation API方式, 本发明即采用此方式。通过该方式,DELMIA提供了一系列函数,可以对其进行调用、操作。 其中,可以操作DELMIA里虚拟人的姿态的函数为SetPostureValues函数,其参数即为opv 数组;可以操作虚拟人方向和位置的函数为SetPosition函数,其参数即为 iAxisComponentsArray数组。
赋值后,DELMIA中的虚拟人的动作即和动作捕捉设备自带软件输出的人体动作相一致。 由于动作捕捉设备所捕捉的人体动作和其自带软件记录、输出的人体动作之间有可能存在一 定的误差,当这种误差小到肉眼可以忽略不计的时候,DELMIA中的虚拟人的动作即和穿着动 作捕捉设备的人员的实际动作相一致。
步骤六、重复步骤二到步骤五
将动作数据转换完成并输入到DELMIA中的虚拟人使其动作后,此即标志着一帧动作的完 成。然后开始下一帧动作,重复步骤二到步骤五,直到不再进行动作捕捉或动作捕捉设备自 带软件不再发送捕捉到的动作数据为止。
实施例
本实施例以Measurand公司的光纤式动作捕捉设备所捕捉到的一帧动作数据为例进行说 明。其自带软件ShapeRecorder所捕捉到的人体动作如错误!未找到引用源。所示。
该设备包含了两只手套,所以可以捕捉到两只手的动作。接收到的动作数据临时保存在 gpo数组中,共有从1到235共235个数据,如表1所示。
表1 gpo数据列表
计算后得到的iAxisComponentsArray数组如表2所示。
表2 iAxisComponentsArray数据列表
计算后得到的opv数组如表3所示。
表3 opv数据列表
计算后得到的DELMIA中的虚拟人的动作与动作捕捉系统是一致的。
用无线光纤动作捕捉系统在DELMIA虚拟环境下实现沉浸式虚拟维修,虚拟人的操作数据 完全来自真人的维修操作动作,具有更强的真实性,从而使得维修性分析、评估结果也更加 有效。这样也就促使维修性设计工作的开展不再依赖于物理样机或实际装备,可以在产品设 计同时并行考虑维修性问题,发现可能存在的维修性设计缺陷,提出改进建议,进而可以在 装备设计阶段就对原始设计方案进行修改,避免对定型产品进行维修性再设计带来的产品再 设计的麻烦与经济损失。
机译: 视频通信环境中基于手势的虚拟人体模型实时控制方法,包括在终端设备中记录人的视频序列
机译: 在工业环境下基于颜色识别来控制操作的机器控制方法,通过将摄像机安装在机器人上,仅通过区分颜色就可以轻松完成操作任务
机译: 无线锁定环境下基于事务的交易类型复制控制方法