关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > 移动机器人3D仿真软件的设计

移动机器人3D仿真软件的设计

作者:时间:2011-06-03来源:网络收藏

技术研究中,为了提高控制算法的开发效率,提出三维方案并加以实现。该采用ODE物理引擎生成动力学世界和实现碰撞检测,提高了速度和精确度,同时采用OpenGL绘制三维图形,改善了图形显示效果。实例证明,该具有一定的实用价值。

本文引用地址:http://www.eepw.com.cn/article/162000.htm

  1 软件特性

  (1)采用基于面向对象技术实现,软件操作简单,易于维护和功能扩展;

  (2)可以导入x格式和3ds格式的三维模型文件;

  (3)允许物体同时实现多个操作,在每个运动方向都有加速度、减速度和最大速度等运动属性;实现碰撞检测、机器人和虚拟场景的图形化显示;

  (4)支持实时调试功能; 动画和仿真计算结果同步且真实对应;绘制仿真环境的二维地图和物体运动轨迹。

  (5)提供与外部软件连接的接口,即可以通过ODBC与外部数据库相连,或通过Socket接口与外部设备相连,实现进程之间的通信;

  (6)软件接口的多样性和扩展性,即可通过游戏手柄、键盘来输入控制信息、模型参数和仿真参数等;仿真数据的保存输出。

  

  其中,速度比例系数k=0.035,线速度单位为m/s,角速度单位为rad/s。

  

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所示,下面简述主要处理过程的实现思路及方法:

  


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭