转载请先后台留言,大家一起支持原创,推动机器人使用和发展
本公众号对各类ABB机器人应用,仿真,毕业设计提供技术支持,详细后台留言
本公众号诚挚希望与各机器人培训机构,机器人使用单元合作,提供技术支持,详细后台留言
1. 机器人空中点位表示方法通常是x,y,z,a,b,c,其中a,b,c表示该点的旋转姿态。
定义
分别为绕Z轴、Y轴、X轴的旋转角度,如果用Tait-Bryan angle表示,分别为Yaw、Pitch、Roll。2. 通过用于描述坐标系各轴相对于参考系统的方向的旋转矩阵,描述坐标系的姿态(诸如工具的姿态)(参见下图)。
旋转后的坐标系轴(x,y,z)为矢量,其可以用参考坐标系表示如下:
x = (x1, x2, x3)
y = (y1, y2, y3)
z = (z1, z2, z3)
这意味着参考坐标系中x矢量的x轴向分量将为x1,y轴向分量将为x2,以此类推。
这三个矢量可在一个矩阵(旋转矩阵)中组合,各矢量由此构成一栏:
四元数仅仅是一种描述此旋转矩阵的更为简洁的方式;根据旋转矩阵的各元素,计算四元数:
3. 综合以上,可以得到欧拉角--四元数的转化如下
4 可以得到四元数--欧拉角的转化如下
arctan和arcsin的结果是
,这并不能覆盖所有朝向(对于角的取值范围已经满足),因此需要用atan2来代替arctan5. ABB机器人提供了欧拉角与四元数转化的相关函数,其中
object.rot := OrientZYX(anglez, angley, anglex) 函数为欧拉角-四元数函数,注意函数中的顺序为rz,ry,rx
anglex := EulerZYX(X, object.rot); 函数为四元数-欧拉角函数,此处举例提取绕X旋转角度,也可提取绕Y和绕Z旋转角度。
6. 在RAPID端可以自己编写函数,得到欧拉角与四元数转化函数,如下
FUNC orient eulerAnglesToQuaternion(num hdg,num pitch,num roll)
//返回四元数
VAR num cosRoll;
VAR num sinRoll;
VAR num cospitch;
VAR num sinpitch;
VAR num cosheading;
VAR num sinheading;
VAR orient orient1;
cosRoll:=Cos(roll*0.5);
sinRoll:=Sin(roll*0.5);
cosPitch:=Cos(pitch*0.5);
sinPitch:=Sin(pitch*0.5);
cosHeading:=Cos(hdg*0.5);
sinHeading:=Sin(hdg*0.5);
orient1.q1:=cosRoll*cosPitch*cosHeading+sinRoll*sinPitch*sinHeading;
orient1.q2:=sinRoll*cosPitch*cosHeading-cosRoll*sinPitch*sinHeading;
orient1.q3:=cosRoll*sinPitch*cosHeading+sinRoll*cosPitch*sinHeading;
orient1.q4:=cosRoll*cosPitch*sinHeading-sinRoll*sinPitch*cosHeading;
RETURN orient1;
ENDFUNC
FUNC num quaternionToEulerAngles(\switch X|switch Y|switch Z,orient orient1)
//返回欧拉角
VAR num q0
VAR num q1;
VAR num q2;
VAR num q3;
q0:=orient1.q1;
q1:=orient1.q2;
q2:=orient1.q3;
q3:=orient1.q4;
IF present(x) return atan2(2*(q2*q3+q0*q1),q0*q0-q1*q1-q2*q2+q3*q3);
IF present(y) return asin(2*(q0*q2-q1*q3));
IF present(z) RETURN atan2(2*(q1*q2+q0*q3),q0*q0+q1*q1-q2*q2-q3*q3);
//roll=atan2f(2. f*(q2q3+q0q1),q0q0-q1q1-q2q2+q3q3);
//pitch=asinf(2. f*(q0q2-q1q3));
//yaw=atan2f(2. f*(q1q2+q0q3),q0q0+q1q1-q2q2-q3q3);
ENDFUNC
********************************
如何获取更多经典文章?
联系客服