三维物体建模 - 移动机器人3D仿真软件的设计

来源:微型机与应用2011年第4期 作者:刘润丹, 王 华,2011年06月03日 11:50
[导读] 2.2 三维物体建模 ODE物理引擎提供球体、盒子、胶囊、平面和圆柱等几何体。在创建出一个几何体后,其中心一般落在仿真环境坐标系的原点上。在对移动
2.2 三维物体建模

  ODE物理引擎提供球体、盒子、胶囊、平面和圆柱等几何体。在创建出一个几何体后,其中心一般落在仿真环境坐标系的原点上。在对移动机器人进行建模时,需要使用盒子和圆柱两种几何体,盒子需要指定3个参数,即长、高、宽;对于圆柱而言,则需指定长度和半径2个参数。在动力学世界中,以Geom代表物体几何体,以Body代表虚拟场景中的对象。软件可以通过调用ODE内部函数来检测几何体和对象的对应关系,也有函数用于检测对象之间是否存在连接。下面以创建盒子物体为例,说明单个物体的建模方法。

  首先调用dBodyCreate函数创建出给定空间中的刚体对象,再调用dBodySetPosition和dBodySetRotation两个函数,调整该对象在空间中的位姿,接着调用dMassSetBoxTotal和dBodySetMass两个函数设定该对象的质量属性,最后调用dCreateBox函数创建相应尺寸的盒子几何体,并调用dGeomSetBody函数将该几何体与对象关联起来。

  在创建出单个对象后,往往需要利用各种关节将不同对象连接起来。ODE物理引擎提供5种类型的关节,分别为铰链型、球-球窝型、滑竿柱型、固定型和铰链2型等。其中铰链型为合页关节,滑竿柱型为插销关节,铰链2型则是带有轴的关节,这些关节都有内置的马达。本文选用铰链关节来连接驱动轮和机器人车体,采用固定关节构建机器人车体结构。下面以使用铰链关节连接两个对象为例,说明创建关节的方法。

  在调用dJointCreateHinge函数创建铰链关节对象后,再调用dJointAttach函数指定用该关节连接的两个物体对象,然后调用dJointSetHingeAnchor函数设定旋转轴的中心点坐标,并调用dJointSetHingeAxis设定旋转轴的方向。

  为了让刚体对象能够在仿真环境中运动起来,ODE提供了3种方法: (1)调用dBodyAddForce、dBodyAddTorque等函数给刚体施加力的作用; (2)调用dJointSetHingeParam

  函数来改变内置马达的转速,同时需指定该函数的第二个输入参数为dParamVel; (3)调用dBodySetLinearVel和dBodySetAngularVel两个函数直接给物体设定线速度和角速度。

  此外,在ODE仿真环境中,可通过两种方式来模拟弹簧-阻尼系统: (1)通过设置ERP(Error Reduction Parameter)和CFM(Constraint Force Mixing)两个参数来实现,ERP为每一仿真循环中的修正误差,取值范围为0~0.8,默认取值为0.2;CFM代表物理引擎的全局混合约束力,它反映物体表面的柔软程度,其取值范围为10e-9~1;(2)利用动力学方程来求解,即胡克定律:

  

 

  其中γ为阻尼系数,它与物体的形状以及周围性质有关。

  综上所述,典型ODE仿真过程为[6]:

  (1)生成一个动力学世界,并在该世界中创建物体;

  (2)设置物体状态(如质量、质心位置和姿态等),并在动力学世界中创建关节;

  (3)将关节与物体绑定起来,为所有的关节设置参数;

  (4)生成碰撞检测空间,并为需要作碰撞检测的物体生成碰撞几何体;创建一个容纳关节的关节组;

  (5)循环处理过程:

  ①在物体上施加力;

  ②根据需要调整关节参数;

  ③调用碰撞检测,得到碰撞点和碰撞的物体;

  ④为每个碰撞点的碰撞创建一个接触关节,并将其放入关节组;

  ⑤执行一个仿真步骤;

  ⑥清空接触关节组中的关节;

  (6)销毁动力学世界和碰撞世界。

  2.3 三维图形的绘制

  OpenGL绘制图形的基本操作步骤[4]:

  (1)设置像素格式:设定OpenGL绘制风格、颜色模式和颜色位数等重要信息。

  (2)建立模型:根据基本图元建立景物的三维模型,并对模型进行数学描述。

  (3)舞台布置:把景物放置在三维空间的适当位置,设置视点、视角和投影模型等。

  (4)效果处理:设置物体的材质,加入光照及光照条件。

  (5)光栅化:把景物及其颜色信息转化为可在计算机屏幕上显示的像素信息。

  在绘制图形时,需注意坐标系的变换,否则很容易导致绘制失败。OpenGL定义了两个坐标系:世界坐标系和当前绘图坐标系。世界坐标系是固定不变的,规定以屏幕中心为原点,面对显示终端,向右为x正轴,向上为y正轴,向终端外面为z正轴。当前绘图坐标系是绘制物体时的参考坐标系。仿真软件完成初始化后,世界坐标系与当前绘图坐标系是重合的。在调用glTranslatef、glRotate等变换函数对绘图坐标系进行平移和旋转后,绘图坐标系会在原来的基础上做出相应改变。此时,若调用gluSphere、glVertex3f等绘图函数,绘图函数是在改变之后的绘图坐标系上进行绘制。如若要让绘图坐标系与世界坐标系再次重合,可以调用glLoadIdentity函数。此外,可以调用glColor3f(r,g,b)函数设置绘图函数所使用的颜色,如果没有再次调用该函数,则绘制出的图形颜色将保持原先颜色不变,rgb三个颜色分量的取值范围为0.0~1.0。

  3 软件框架

  软件框架及其处理流程如图2所示,软件仿真循环的处理流程如图3所示,下面简述主要处理过程的实现思路及方法:

  

 

  

上一页123下一页

本文导航

相关阅读

发表评论
技术交流、积极发言! 发表评请遵守相关规定。

0 条评论

推荐阅读

每月人物

正面迎战智慧家庭:从称体重到“称”健康,芯海智慧测量全包了!

正面迎战智慧家庭:从称体重到“称”健康,芯海智慧测量全包
随着科技的发展,人们对生活质量的追求越来越高,传统的家庭生活方式已经无法满足现代人的家居生活,智慧家庭的新型生活理念成为很多人梦寐以求的...

依托AI平台,涂鸦智能开启全屋智能2.0时代!

依托AI平台,涂鸦智能开启全屋智能2.0时代!
随着物联网技术的突飞猛进,生活中越来越多的家庭设备将会联上网络,变得“智慧”起来,智慧家庭的概念成了这几年媒体、企业、用户关注的焦点,而...

每周排行

  • 型 号
  • 产品描述