发明名称 基于VRML模型的有约束协同装配工艺规划的仿真方法
摘要 本发明属于CAD协同产品设计技术领域,其特征在于:在网络环境下,设计者依托装在节点机上的三维VRML模型,以设计者与设计场景交互方式按照以下步骤实现有约束协同装配工艺规划:设定滑动转动联接约束;选定仿真装配体模型;确定开环或闭环机构中各零部件与它的前端和后端部件的约束类型;计算各零部件在运动过程中的平移和转动矩阵,再根据相应的约束计算运动过程中各零部件的位置参数;再据此生成零部件的时间—顺序—路径矩阵,按时间段形成关键帧;把各关键帧分别以逆序写入VRML各部件模型的插补器,依次在时间传感器和位置传感器之间、位置传感器和零部件造型节点间加入路由,生成仿真画面。本发明显著提高了设计效率。
申请公布号 CN100347712C 申请公布日期 2007.11.07
申请号 CN200510086613.2 申请日期 2005.10.14
申请人 清华大学 发明人 田凌;王巧玉
分类号 G06F17/50(2006.01) 主分类号 G06F17/50(2006.01)
代理机构 代理人
主权项 1.基于VRML模型的有约束协同装配工艺规划的仿真方法,其特征在于,所述装配工艺规划是指装配体动态运行和装配体安装过程的规划;所述仿真方法是在基于TCP/IP协议的网络环境中通过在各用户端的计算机配置用VRML表示的虚拟现实建模语言的格式文件后的设计者与设计环境交互的方式实现仿真的,所述的方法依次含有以下步骤:步骤1.在计算机中设定以下两种联接约束的类型:滑动联接约束,其约束表达式为:Part_1={SC(Part_2)},表示Part_1通过滑动联接约束与Part_2联接;所述Part_1、Part_2是表示滑动联接的零部件;转动联接约束,其约束表达式为:Part_1={RC(Part_2)},表示Part_1通过转动联接约束与Part_2联接;Part_2={RC(Part_1),RC(Part_3)},表示Part_2在运动过程中所受的约束条件有两个,一个是与Part_1的转动联接约束,另一个是与Part_3的转动联接约束;所述Part_1、Part_2、Part_3是表示要转动的零部件;步骤2.计算机根据要进行有约束装配仿真的对象选定有约束仿真装配体的VRML模型,该模型是要装配的各零部件的组合;步骤3.计算机指定开环机构或闭环机构中各零部件与它的前端部件和后端部件的转动联接和滑动联接的约束类型:所述开环机构是指前端部件运动不受后端部件约束的影响的机构,所述前端部件和后端部件分别表示所述开环机构的各部件联接约束关系中的位于始端和末端的部件;所述闭环机构是指在计算前端部件运动时应考虑后端部件的约束的机构;步骤4.计算机根据开环机构或闭环机构的仿真类型,基于相应滑动联接约束或转动联接约束的约束表达式,采用下述公式计算各零部件在运动中的位置参数:设:TTrn_i表示平移矩阵,TRot_i表示旋转矩阵,TTrn_i和TRot_i与所述VRML模型的位置参数的关系分别如下式所示:<math-cwu><![CDATA[<math> <mrow> <msub> <mi>T</mi> <mrow> <mi>Tm</mi> <mo>_</mo> <mi>i</mi> </mrow> </msub> <mo>=</mo> <mfenced open='[' close=']'> <mtable> <mtr> <mtd> <mn>1</mn> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> <mn>1</mn> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mn>1</mn> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mi>&Delta;x</mi> </mtd> <mtd> <mi>&Delta;y</mi> </mtd> <mtd> <mi>&Delta;z</mi> </mtd> <mtd> <mn>1</mn> </mtd> </mtr> </mtable> </mfenced> </mrow></math>]]></math-cwu><math-cwu><![CDATA[<math> <mrow> <msub> <mi>T</mi> <mrow> <mi>Rot</mi> <mo>_</mo> <mi>i</mi> </mrow> </msub> <mo>=</mo> <mfenced open='[' close=']'> <mtable> <mtr> <mtd> <msubsup> <mi>R</mi> <mi>x</mi> <mn>2</mn> </msubsup> <mo>+</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <msubsup> <mi>R</mi> <mi>x</mi> <mn>2</mn> </msubsup> <mo>)</mo> </mrow> <mi>cos</mi> <mi>&theta;</mi> </mtd> <mtd> <msub> <mi>R</mi> <mi>x</mi> </msub> <mo>&CenterDot;</mo> <msub> <mi>R</mi> <mi>y</mi> </msub> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>cos</mi> <mi>&theta;</mi> <mo>)</mo> </mrow> <mo>+</mo> <msub> <mi>R</mi> <mi>z</mi> </msub> <mo>&CenterDot;</mo> <mi>sin</mi> <mi>&theta;</mi> </mtd> <mtd> <msub> <mi>R</mi> <mi>x</mi> </msub> <mo>&CenterDot;</mo> <msub> <mi>R</mi> <mi>z</mi> </msub> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>cos</mi> <mi>&theta;</mi> <mo>)</mo> </mrow> <mo>-</mo> <msub> <mi>R</mi> <mi>y</mi> </msub> <mo>&CenterDot;</mo> <mi>sin</mi> <mi>&theta;</mi> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <msub> <mi>R</mi> <mi>x</mi> </msub> <mo>&CenterDot;</mo> <msub> <mi>R</mi> <mi>y</mi> </msub> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>cos</mi> <mi>&theta;</mi> <mo>)</mo> </mrow> <mo>-</mo> <msub> <mi>R</mi> <mi>z</mi> </msub> <mo>&CenterDot;</mo> <mi>sin</mi> <mi>&theta;</mi> </mtd> <mtd> <msubsup> <mi>R</mi> <mi>y</mi> <mn>2</mn> </msubsup> <mo>+</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <msubsup> <mi>R</mi> <mi>y</mi> <mn>2</mn> </msubsup> <mo>)</mo> </mrow> <mi>cos</mi> <mi>&theta;</mi> </mtd> <mtd> <msub> <mi>R</mi> <mi>y</mi> </msub> <mo>&CenterDot;</mo> <msub> <mi>R</mi> <mi>z</mi> </msub> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>cos</mi> <mi>&theta;</mi> <mo>)</mo> </mrow> <mo>+</mo> <msub> <mi>R</mi> <mi>x</mi> </msub> <mo>&CenterDot;</mo> <mi>sin</mi> <mi>&theta;</mi> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <msub> <mi>R</mi> <mi>x</mi> </msub> <mo>&CenterDot;</mo> <msub> <mi>R</mi> <mi>z</mi> </msub> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>cos</mi> <mi>&theta;</mi> <mo>)</mo> </mrow> <mo>+</mo> <msub> <mi>R</mi> <mi>y</mi> </msub> <mo>&CenterDot;</mo> <mi>sin</mi> <mi>&theta;</mi> </mtd> <mtd> <msub> <mi>R</mi> <mi>y</mi> </msub> <mo>&CenterDot;</mo> <msub> <mi>R</mi> <mi>z</mi> </msub> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>cos</mi> <mi>&theta;</mi> <mo>)</mo> </mrow> <mo>-</mo> <msub> <mi>R</mi> <mi>x</mi> </msub> <mo>&CenterDot;</mo> <mi>sin</mi> <mi>&theta;</mi> </mtd> <mtd> <msubsup> <mi>R</mi> <mi>z</mi> <mn>2</mn> </msubsup> <mo>+</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <msubsup> <mi>R</mi> <mi>z</mi> <mn>2</mn> </msubsup> <mo>)</mo> </mrow> <mi>cos</mi> <mi>&theta;</mi> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mn>0</mn> </mtd> <mtd> <mn>1</mn> </mtd> </mtr> </mtable> </mfenced> </mrow></math>]]></math-cwu>其中Rx,Ry,Rz为旋转域中在x,y,z方向上的旋转轴,θ为旋转域中的旋转角,Δx,Δy,Δz为平移域中在x,y,z方向上平移的值;计算机根据给定的初始位置参数,依照各个零部件的联接约束类型,计算运动后的平移矩阵或旋转矩阵,再根据各部件的联接约束关系式求得运动后的新位置,自动获得不同时间点、不同初始位置条件下各个零部件的姿态参数;步骤5.把步骤4得到的计算结果生成每个零部件的时间—顺序—路径矩阵,按时间段形成关键帧;步骤6.把表示不同关键点的关键帧分别以逆序写入步骤2中所述VRML模型中各个部件模型的插补器中,把关键点值和关键位置值写入所述插补器的关键点值(Key)和关键位置值(KeyValue)中,再添加时间传感器,在时间传感器和位置传感器之间添加路由,在位置传感器和零部件的造型节点之间添加路由,生成仿真画面。
地址 100084北京市北京100084-82信箱