仿人机器人三维实时仿真系统的研究与实现_甘志刚
2007年6月 系
统 仿 真 学 报 Jun., 2007
cosθ 0
M Ry=M
sinθ 0
01
sinθ0
0 0 (3) 0 1
转功能,用鼠标拖动来操作。由于OpenGL世界坐标系是三维空间坐标系,而Windows的屏幕坐标系是二维坐标系,因此操作时,首先需要知道鼠标的屏幕坐标相对于OpenGL世界坐标系的坐标位置。通过函数
int gluUnProject(GLdouble winx,GLdouble winy,GLdouble winz,const GLdouble modelMatrix[16],const GLdouble projMatrix[16],const GLint viewport[4],GLdouble *objx,GLdouble *objy,GLdouble *objz)
0cosθ00
可以实现鼠标的屏幕坐标到OpenGL世界坐标系的转换。其中winx、winy、winz表示windows屏幕坐标,model Matrix、projMatrix、viewport分别表示模型变换矩阵、投影变换矩阵和视口,objx、objy、objz表示在OpenGL世界坐标系中的物体坐标。得到鼠标位置之后,就可以实现平移、远近和三维旋转。
如图6所示。OpenGL的透视投影视景体为一锥形体[6],
它由远近两个裁减面及观测者(摄像机)的观测视角组成。在缺省情况下摄像机的坐标为(0, 0, 0),方向指向Z轴的负方向。要实现观测物体平移,相当于要将摄像机向相反的方向移动,这可以通过函数void glTranslated (GLdouble x, GLdouble y, GLdouble z)来实现。函数中x、y、z表示物体在x、y、z轴上平移的距离;当平移时,仅是将物体在XY平面上移动,因此参数z为0。实现远近和实现平移类似,是将摄像机沿Z轴方向平移。由于OpenGL是按照一点透视的原理将三维物体投影到二维平面上,因此符合“远小近大”的视觉效果。



绕z轴旋转的矩阵运算为
cosθ sinθ sinθcosθ
M Rz=M
00
0 0
0
0 (4) 10
01
00
3 环境作用力的模拟
由于仿人形机器人实体是在真实环境下工作,受到各种环境的制约。为了更好的验证和改进机器人的控制算法,有必要在仿真环境中模拟出真实环境下的各种作用力对机器人的影响。为此,需要对重力、支撑力和摩擦力对仿人形机器人的作用进行分析。
3.1 重心的获取
仿人形机器人是由多个刚体组成、形态可变的自动机械,所受重力等于各个部件重力之和,但是重心是随着机器人姿态而改变的。重心位置和重力对机器人的影响很大。要求出机器人的重心坐标,首先需要计算出各部件的重心坐标。部件一旦加工好,其重心位置就已经确定。假设第i个,该部件所受的重力为wi,则部件的重心坐标是(xi, yi, zi)
整个机器人的重心可以用以下公式求出:
Xg=∑wixi
i=1k
∑wi
i=1
k
Yg=∑wiyi
i=1k
k
∑wi (5)
i=1∑wi
i=1k
k
Zg=∑wizi
i=1
图6 OpenGL的透视投影视景体
式中(Xg, Yg, Zg)是整个机器人的重心坐标,k是部件的个数。机器人在运动过程中,各个部件的重心坐标是变化的,因此需要采用正向运动学方法求出各个部件重心的当前坐标。本文采用D H表示法来为仿人形机器人模型建立参考坐标系(图7)和D H参数表(表1)。以下如无特别说明,机器所涉及的坐标都是基于图7中的基坐标系ΣXYZ而言的。人正运动学模型[4]如下:
Tn=∑Ai=A1A2"An (6)
i=1n
三维场景可以绕世界坐标系的X、Y、Z轴旋转。由于世界坐标系固定不动,不随三维场景的旋转而改变,因此需要构造旋转结果矩阵M,它记录每次旋转的累积效果。然后将每次旋转的旋转矩阵R与M右乘,再将M通过函数glMult Matrixd(const GL double *m)与当前模型视图矩阵相乘,实现整个场景旋转。旋转结果矩阵M在程序启动时需初始化为
1000 0100
(1) M=
0010 0001 绕x轴旋转的矩阵运算为
00 1
0cosθ sinθ
M Rx=M
0sinθcosθ
00 0绕y轴旋转的矩阵运算为
0
0 (2) 0 1
cosθi sinθicosαisinθisinαiaicosθi sinθicosθicosαi cosθisinαiaisinθi
其中Ai= , 0sinαicosαidi
001 0
式中Ai矩阵是相邻两关节的齐次变换矩阵;θi是关节i与关节i-1的夹角;αi是关节i的扭转角;di是关节i-1沿Zi-1轴移动到关节i间的距离;ai是关节i-1沿Xi-1轴移动到关节i间的距离。由于部件的质心坐标不一定在部件的关节附体坐标系的原点,因此还需要构造平移矩阵Transn,假设第n个部件的质心坐标相对该部件关节附体坐标系的坐标为(xn, yn, zn),则 2446


