机器人位姿讲解

掌握乐白机器人机器人位姿讲解,助您快速进入开发状态,高效实现机器人控制与应用开发

位置和姿态

关节位置描述

乐白机器人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设置确定时,机器人的位姿也是确定且唯一的。这一计算过程即机器人正向运动学。

当指定空间位置时,情况就变得大不一样。由于机器人本身的构型,将空间位置转换为关节位置的机器人逆向运动学是多解或者无解的。机器人无法到达空间上任意一点,这是物理的限制。机器人也无法在空间两点之间任意地执行运动——这一现象在机器人处于「奇异位置」时尤其明显,此时执行空间移动命令很有可能导致算法运行失败,机器人不得不停止运动。

当机器人运动中出现如下错误提示时,请修改场景或程序中的运动命令,并通过示教或者关节移动将机器人恢复到正常位置。

奇异位置

典型的奇异位置有如下三种:

  1. 四轴平行,即第2、3、4、6关节处于平行状态。
  2. 零位,即机器人的所有关节角度都为0时。
  3. 机器人手臂在任何位置完全伸直时

正解

机器人正解就是将关节坐标转换为笛卡尔坐标

在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 关节空间位姿