机器人位姿讲解
掌握乐白机器人机器人位姿讲解,助您快速进入开发状态,高效实现机器人控制与应用开发
位置和姿态
关节位置描述
乐白机器人LM3为六轴(六个关节)机器人,每个关节的旋转量组成关节位置描述(简称关节位置),可以用六元组表示:
(j1, j2, j3, j4, j5, j6)
其中 ji 表示第 i 个关节的旋转角度,单位为弧度(rad)。
在 Lua API 中,用指定索引键的关联数组表示。
在 Lua SDK 中,用数字顺序索引的数组表示。
例如对于关节位置
(j_1=0.024, j_2=-15, j_3=pi, j_4=math.pi/2, j_5=3math.rad(30), j_6=0)
在 Lua API 中,可以表示为:
{j1=0.024, j2=math.rad(-15), j3=math.pi, j4=math.pi/2, j5=math.rad(30), j6=0}
在 Lua SDK 中,可以表示为:
{0.024, math.rad(-15), math.pi, math.pi/2, math.rad(30), 0}
关节描述的范围理论上是无限制的,具体的限制范围取决于具体的应用场景及可能产生的自干涉。
笛卡尔空间位姿描述
乐白机器人末端的笛卡尔位置和姿态(简称空间位置或位姿)用六元组表示:
(x, y, z, alpha, beta, gamma)
其中 $(x, y, z)$ 表示空间笛卡尔坐标位置,单位为米(m)。 $(\alpha, \beta, \gamma)$ 表示旋转姿态,单位为弧度(rad)。
在 Lua API 中,用数字顺序索引的数组表示。
在 Lua SDK 中,用指定索引键的关联数组表示。
例如对于笛卡尔空间位姿
(x=0.24,\mathrm{m}, y=0, z=0, \alpha=\frac{\pi}2, \beta=30^\circ, \gamma=0.024,\mathrm{rad})
在 Lua API 中,可以表示为:
{0.2, 0, 0, math.pi/2, math.rad(30), 0.024}
在 Lua SDK 中,可以表示为:
{x=0.2, y=0, z=0, rz=math.pi/2, ry=math.rad(30), rx=0.024}
对于描述坐标系(位姿)${B}$,我们用到如下描述:
- X-Y-Z固定角。首先将坐标系${B}$和已知参考坐标系${A}$重合。先将${B}$绕$\hat{X}_A$旋转$\gamma$角,再绕$\hat{Y}_A$旋转$\beta$角,最后绕$\hat{Z}_A$旋转$\alpha$角。
- Z-Y-X欧拉角。首先将坐标系${B}$和已知参考坐标系${A}$重合。先将${B}$绕$\hat{Z}_B$旋转$\alpha$角,再绕$\hat{Y}_B$旋转$\beta$角,最后绕$\hat{X}_B$旋转$\gamma$角。
- RPY旋转角。X-Y-Z固定角也可定义为RPY旋转角,即回转角$R$(roll)、俯仰角$P$(pitch)和偏转角$Y$(yaw)。首先将坐标系${B}$和已知参考坐标系${A}$重合。先将${B}$绕$\hat{X}_A$旋转 roll 角,再绕$\hat{Y}_A$旋转 pitch 角,最后绕$\hat{Z}_A$旋转 yaw 角。
机器人运动学
机器人运动,当指定关节位置时,只要不产生自干涉(即自己打到自己),理论上是可以达到任何位置的。当一组关节位置确定,以及TCP设置确定时,机器人的位姿也是确定且唯一的。这一计算过程即机器人正向运动学。
当指定空间位置时,情况就变得大不一样。由于机器人本身的构型,将空间位置转换为关节位置的机器人逆向运动学是多解或者无解的。机器人无法到达空间上任意一点,这是物理的限制。机器人也无法在空间两点之间任意地执行运动——这一现象在机器人处于「奇异位置」时尤其明显,此时执行空间移动命令很有可能导致算法运行失败,机器人不得不停止运动。
当机器人运动中出现如下错误提示时,请修改场景或程序中的运动命令,并通过示教或者关节移动将机器人恢复到正常位置。
奇异位置
典型的奇异位置有如下三种:
- 四轴平行,即第2、3、4、6关节处于平行状态。
- 零位,即机器人的所有关节角度都为0时。
- 机器人手臂在任何位置完全伸直时
正解
机器人正解就是将关节坐标转换为笛卡尔坐标
在lua api中,使用这种方式
cpose = kinematics_forward(joints)
通过机器人正向运动学将关角度转成笛卡尔位置和姿态。
参数
- joints 关节角度:{j1=0, j2=1.57, j3=-1.57, j4=0, j5=3.14, j6=3.14}
- 返回 {x, y, z, Rz, Ry, Rx, ok=true}
- 如 {-0.36435443592898153, 0.25548551781114875, 0.1477188562117689, 0.27649950521632694, 0.913569441486944, -2.9826903521006582, ok=true}
- ok 是否成功 true:成功 false:失败
在lua sdk中,使用这种方式
cart = lebai:kinematics_forward(pose)
通过机器人正向运动学将关角度转成笛卡尔位置和姿态。
参数
- pose 位姿 返回
- cart 笛卡尔空间位姿
反解
机器人反解就是将笛卡尔坐标转换为关节坐标
在lua api中,使用这种方式
jpose = kinematics_inverse(vector, joints)
通过机器人逆向运动学反解,将笛卡尔位置和姿态转换成关节角度。计算结果与当前 TCP 设置和当前关节位置有关。
参数
- vector。工具空间的位置和姿态。
- joints。关节空间参考位置。可选,默认为当前反馈关节位置。当反解出现多解时,会取距离 joints 最近的一个解。 返回 {j1=a, j2=b, j3=c, j4=d, j5=e, j6=f, ok=true}
- 对应关节空间 如 {j1=0, j2=1.57, j3=-1.57, j4=0, j5=3.14, j6=3.14, ok=true}
- ok 是否成功 true:成功 false:失败
在lua sdk中,使用这种方式
joints = lebai:kinematics_inverse(pose, joints)
通过机器人逆向运动学反解,将笛卡尔位置和姿态转换成关节角度。计算结果与当前 TCP 设置和当前关节位置有关。
参数
- pose 位姿
- joints 关节空间参考位置。可选,默认为当前反馈关节位置。当反解出现多解时,会取距离 joints 最近的一个解。 返回
- joints 关节空间位姿