基于主动控制的双足机器人一般可以抽象为有可驱动关节相互连接的一系列刚性连杆构成的机械系统,机器人控制一般最终将生成的连杆末端轨迹映射为各个关节的旋转角度,并根据当前各关节角度估计机器人状态以实现反馈控制。子连杆和父连杆通过关节连接在一起,需要注意的是关节只有旋转运动。
通常要建立全局(世界)坐标系和局部坐标系。我们在父连杆、子连杆及关节上分别建立坐标系,子连杆的原点一般设定在其质心(COM)位置,子连杆距离关节的原点距离不变。假设X点在子连杆坐标系中的坐标为Xs,父连杆坐标系中的坐标为Xp,父连杆的位姿为(Pp,Rp),下面证明子连杆局部坐标和父连杆局部坐标之间的关系:
X=Pp+RpXp
Xp=Prs+RrsXs
其中(Prs,Rrs)为子连杆相对于父连杆的位姿,所以有:
X=Pp+Rp(Prs+RrsXs)
=Pp+RpPrs+RpRrsXs
即子连杆的位姿为:
Ps=Pp+RpPrs
Rs=RpRrs
因而在计算子连杆的位姿时,要首先知道其相对位姿(Prs,Rrs)。
假设父连杆与子连杆通过n个关节连接,每个关节只能做旋转运动,组合关节可以看成是一个个关节重叠在一起,可以看出0关节旋转带动1关节旋转,1关节旋转带动2关节旋转,......(n-2)关节旋转带动(n-1)关节旋转,(n-1)关节旋转带动子连杆旋转,一般来说,后一关节与前一关节的旋转轴是垂直的,所有关节的旋转轴都是汇聚在一点的,(n-1)关节可以看成是固结在子连杆上。在父连杆的关节处建立一个局部辅助坐标系,其一轴与0关节的旋转轴重合,在子连杆上关节处建立一个局部辅助坐标系,其一轴与(n-1)关节的旋转轴的重合;在每一个关节上建立一个辅助坐标系,其一轴与其旋转轴重合。一般来说关节转动时,带动子连杆旋转,关节坐标其原点为子连杆与父连杆连接处。
假设初始子连杆坐标系原点相对于子连杆辅助坐标系的偏移为b,关节相对父连杆的偏移为a(父坐标系下表示),则有:
父连杆辅助坐标系的坐标Xg与0关节辅助坐标系坐标X0关系为:Xg=R0X0
0关节辅助坐标系的坐标X0与1关节辅助坐标系坐标X1关系为: X0=R1X1
1关节辅助坐标系的坐标X0与2关节辅助坐标系坐标X2关系为: X1=R2X2
...............................
(n-2)关节辅助坐标系的坐标Xn-2与(n-1)关节辅助坐标系坐标X(n-1)关系为: Xn-2=Rn-1Xn-1
(n-1)关节辅助坐标系坐标X(n-1)与子关节辅助坐标Xl系关系为: Xl=Xn-1
则有:因而在计算子连杆的位姿时,要首先知道其相对位姿(Prs
,Rrs
)。
假设父连杆与子连杆通过n个关节连接,每个关节只能做旋转运动,组合关节可以看成是一个个关节重叠在一起,可以看出0关节旋转带动1关节旋转,1关节旋转带动2关节旋转,......(n-2)关节旋转带动(n-1)关节旋转,(n-1)关节旋转带动子连杆旋转,一般来说,后一关节与前一关节的旋转轴是垂直的,所有关节的旋转轴都是汇聚在一点的,(n-1)关节可以看成是固结在子连杆上。在父连杆的关节处建立一个局部辅助坐标系,其一轴与0关节的旋转轴重合,在子连杆上关节处建立一个局部辅助坐标系,其一轴与(n-1)关节的旋转轴的重合;在每一个关节上建立一个辅助坐标系,其一轴与其旋转轴重合。一般来说关节转动时,带动子连杆旋转,关节坐标其原点为子连杆与父连杆连接处。
假设初始子连杆坐标系原点相对于子连杆辅助坐标系的偏移为b,关节相对父连杆的偏移为a(父坐标系下表示),则有:
父连杆辅助坐标系的坐标Xg与0关节辅助坐标系坐标X0关系为:Xg=R0X0
0关节辅助坐标系的坐标X0与1关节辅助坐标系坐标X1关系为: X0=R1X1
1关节辅助坐标系的坐标X0与2关节辅助坐标系坐标X2关系为: X1=R2X2
...............................
(n-2)关节辅助坐标系的坐标Xn-2与(n-1)关节辅助坐标系坐标X(n-1)关系为: Xn-2=Rn-1Xn-1
(n-1)关节辅助坐标系坐标X(n-1)与子关节辅助坐标Xl系关系为: Xl=Xn-1
则有:
Xg=R0X0
=R0(R1X1)
=R0R1X1
......
=R0R1......RnRn-1Xn-1
=(R0......Rn-1)(b+R's,jXs)
=Rj(b+R's,jXs)
而父连杆辅助坐标系坐标与父连杆局部坐标关系为:
Xp=a+R'j,pXg
=a+R'j,pRjb+R'j,pRjR's,jXs
所以:
Prs=a+R'j,pRjb
Rrs=R'j,pRjR's,j
其中Rj表示关节旋转矩阵,R's,j表示子坐标系子连杆辅助关节坐标系中的姿态矩阵,一般为R'j,p表示父连杆辅助坐标系在父坐标系中的姿态转矩阵,一般姿态转矩阵是不变化的,前后两个坐标系如果是平行的话,这个就是单位矩阵,则变换公式会更简单。
另外如果i个关节与(i-1)关节之间的坐标轴不平行的话,Ri=R'iRaxis,=其中R‘i表示i轴相对于(i-1)轴的旋转,Raxis表示轴的旋转.如果限定旋转轴总是关节坐标系的x轴,则:
| 1 0 0 |
Raxis= | 0 cosθ -sinθ |
| 0 sinθ cosθ |
其中θ是该关节的转角。
另外,关节处一般为组合关节,即实现了1~3自由度,通过1~3电机,分别实现Roll,Pitch和Yaw三种动作。Nao机器人一般每个关节实现2个自由度,除了胯关节以外,其余关节姿态都是三轴对应,即姿态矩阵为单位矩阵。对于胯关节,第一个轴是沿Y_Z方向的。采用欧拉角控制的方式要注意“万向节死锁问题” ,这可能也就是为什么Nao大部分关节为1~2自由度,而胯关节处其中之一有倾斜的原因吧。
在实现这三个旋转轴时一定是使它们两两垂直,所以在初始化时Rj为单位矩阵,a,b很容易获得,而连杆姿态转换矩阵也比较容易。
一般三个关节的原点是重合的,各个子关节转轴是相互垂直的,子连杆连接到组合关节处时可以看成通过一个个关节然后连接到父连杆上的,将其看成固定转换顺序
所以Rj=RRollRpitchRYaw
| 1 0 0 | | cosβ 0 sinβ | | cosγ -sinγ 0 |
= | 0 cosα -sinα | * | 0 1 0 | * | sinγ cosγ 0 |
| 0 sinα cosα | | -sinβ 0 cosβ | | 0 0 1 |
综上,描述子连杆时需要的内容如下:
a---关节原点在父连杆下的位置
b---子连杆原点在关节坐标下的位置
R'j,p---初始时关节相对于父连杆的姿态
R's,j---初始时子连杆相对于关节的姿态
Roll---子连杆绕X旋转角度
Pitch---子连杆绕Y旋转角度
Yaw---子连杆绕Z旋转角度
Rj---关节旋转矩阵
Prs---子连杆相对父连杆位置
Rrs---子连杆相对父连杆姿态
Ps---子连杆的全局位置
Rs---子连杆的全局姿态
前4项内容()不需要计算,系统初始化时设置;
5、6、7项是关节的旋转角度;
后5项内容根据关节旋转矩阵及父连杆位姿的不同进行计算。
如何获得子坐标系相对于父坐标系的姿态矩阵?
姿态矩阵为一个3X3的矩阵,
xX yX zX
R= xY yY zY
xZ yZ zZ
将子坐标系x轴上单位长度向量向父坐标系三个轴投影的xX,xY,xZ
将子坐标系y轴上单位长度向量向父坐标系三个轴投影的yX,yY,yZ
将子坐标系z轴上单位长度向量向父坐标系三个轴投影的zX,zY,zZ
每个关节可动作顺序可变的前提是:其姿态变换矩阵可交换,即矩阵A,B有AB=BA,而当A , B 均为准对角矩阵(准对角矩阵是分块矩阵概念下的一种矩阵。即除去主对角线上分块矩阵不为零矩阵外,其余分块矩阵均为零矩阵),且对角线上的子块均可交换,则A , B 可交换。
矩阵可交换的条件