【机器人位姿表示】好的、坏的、丑的机器人位姿表示

关于作者: Paul Furgale 是苏黎世联邦理工学院(ETH Zurich)自动化系统实验室的副主任。他的研究重点是移动机器人系统的长期自主性,包括在高度动态环境中长时间尺度的感知、建图、定位和规划。他是 V-Charge 的科学协调员,这是一个欧洲项目,同时也是工业/学术合作,旨在开发混合交通中的电动车自动代客泊车和充电。他于2011年获得多伦多大学航空航天研究所(UTIAS)的博士学位,在那里他开发了支持行星探测漫游者超视距样本返回的算法,作为自主空间机器人实验室(Autonomous Space Robotics Lab)的一部分。他的博士工作在加拿大高北极地区进行了实地测试,随后被整合到几个加拿大航天局的漫游者原型中。
原文链接: https://paulfurgale.info/news/2014/6/9/representing-robot-pose-the-good-the-bad-and-the-ugly

好的、坏的、丑的机器人位姿表示

2014年6月9日

上周我在 ICRA,并有幸在 Gian Diego Tipaldi 和 Cyrill Stachniss 组织的名为“机器人学中糟糕的东西及其解决方法:从构建复杂系统中学到的经验(What Sucks in Robotics and How to Fix It: Lessons Learned from Building Complex Systems)”研讨会上发言。这是一个真正特别的活动,人们坦诚地参加,挑战对方关于机器人作为科学和工程学科的看法。

我的演讲题目是"Representing Robot Pose: The good, the bad, and the ugly",在这里我试图给出一些基本建议,关于如何谈论、书写、编程机器人的姿态和位置。我看到我的实验室里的学生们试图使用开源软件包或处理数据集时,其中的机器人位姿的概念不够清晰,无法不经过试错(以及痛苦和苦难)而正确实现,导致很多有效时间被浪费了。

这里是讲座的幻灯片(https://web.archive.org/web/20221206023913/https://paulfurgale.info/s/Workshop-Rotations_v102key.pdf)。为了易于访问,我在下面写了一个简短的概述。如果有任何不清楚的地方或发现笔误,请告诉我!

概述

机器人学的实践很大一部分基本上是关于开发能够感知和与真实物理世界互动的机器。为此,我们需要谈论、书写、编程,来表示机器人姿态。大多数情况下,我们在这方面做得非常糟糕。有数百种方法可以将一些标量转换成变换矩阵——除非我们非常清楚如何做到这一点以及结果如何应用,否则我们就在互相谴责浪费时间和努力,试验不同的可能性,直到我们找到合适的一个。与其进行关于哪种表示法正确的宗教讨论,不如提出最少的文档量以避免歧义。

我写这篇文章的目的是说服你回到你的文档、论文、数据集和开源软件中,更新文本,使得帧变换的解释对用户来说完全没有歧义。换句话说,我希望你能帮助我减少世界上的痛苦。在机器人学中,我们仍然需要解决许多有趣的问题,看到学生和工程师在基础知识上挣扎几天,这让我感到痛苦,这些可以通过一些简单明了的文档来避免。

我将使用我们为软件库 “Kindr” 提出的符号。我们追溯这个符号到 H. Bremer 的书 “Elastic Multibody Dynamics – A Direct Ritz Approach”。我会尽量找时间再发一篇关于在机器人学中使用的主要风格的符号的文章。

1. 始终提供一幅坐标系图

【机器人位姿表示】好的、坏的、丑的机器人位姿表示_第1张图片
关于帧变换的任何文档都依赖于一个好的坐标系图,显示坐标系如何放置在机器人上。我遵循的约定是坐标系颜色为 x=红色,y=绿色,z=蓝色(即RGB对应xyz)。如果你不提供坐标系图,任何人都不会清楚这些坐标系如何安置在机器人上。看看这个维基百科页面(https://en.wikipedia.org/wiki/Axes_conventions ),了解陆地和航空航天车辆广泛不同的约定。

讨论向量(vectors)时,清楚提供的是哪些向量

即平移向量

Al Kelly 的关于轮式运动学的技术报告(http://www.ri.cmu.edu/publication_view.html?pub_id=6669 )介绍得很好,说明了为什么你需要三个脚标元素(three elements of decoration)来清楚地描述向量的属性。这里提供了一份图解备忘单:
【机器人位姿表示】好的、坏的、丑的机器人位姿表示_第2张图片(注: A t B C _{\mathtt{A}}\mathbf{t}_{\mathtt{BC}} AtBC中的 t \mathbf{t} t表示物理量, A \mathtt{A} A表示该物理量所在的坐标系)

很多人不相信我们总是需要三个脚标来“装饰”。我认为角速度是说明该动机的很好的例子:
【机器人位姿表示】好的、坏的、丑的机器人位姿表示_第3张图片
(注: A ω B C _{\mathtt{A}}\mathbf{\omega}_{\mathtt{BC}} AωBC表示在坐标系 A \mathtt{A} A中表示从坐标系 B \mathtt{B} B看坐标系 C \mathtt{C} C的角速度)

这些术语实际上在计算轮式机器人或机械臂运动学方程时出现,拥有足够表达的符号来简洁地写下它们非常有用。

3. 讨论方向(orientation)时,非常清楚地说明你提供的是什么方向

即旋转矩阵

在这里要考虑两个重点。首先,确保你指定了如何从你提供的任何标量转换为完整的旋转矩阵。其次,清楚地指定这是哪个旋转矩阵(例如,世界坐标系到机器人坐标系,或机器人坐标系到世界坐标系)。如果你提供像这样的文本,将会更清楚:
【机器人位姿表示】好的、坏的、丑的机器人位姿表示_第4张图片(注:旋转矩阵 C W B \mathbf{C}_{\mathtt{WB}} CWB表示机器人坐标系 F B \mathcal{F}_{\mathtt{B}} FB相对于世界坐标系 F W \mathcal{F}_{\mathtt{W}} FW的方向(记住脚标从右到左读),使得在机器人坐标系中表示的向量 B v _{\mathtt{B}}\mathbf{v} Bv可以通过 W v = C W B B v _{\mathtt{W}}\mathbf{v}=\mathbf{C}_{\mathtt{WBB}}\mathbf{v} Wv=CWBBv旋转到世界坐标系中。)

在文档中包含一些建议的短语,并在你的工作中始终使用这些短语也是很好的。这里有一个图解备忘单,带有一些建议的短语。请注意,机器人学中对这些短语没有统一意见,所以请不要期望其他人像我一样使用它们!
【机器人位姿表示】好的、坏的、丑的机器人位姿表示_第5张图片(注: C A B \mathbf{C}_{\mathtt{AB}} CAB表示坐标系 B \mathtt{B} B相对于(with respect to)坐标系 A \mathtt{A} A的旋转矩阵。 C A B \mathbf{C}_{\mathtt{AB}} CAB将坐标系 B \mathtt{B} B中的向量旋转到坐标系 A \mathtt{A} A中。)

4. 讨论位姿(pose)时,非常清楚地说明你提供的是什么位姿

即4x4的齐次变换矩阵,包含旋转矩阵和平移向量

这个建议几乎与我之前对旋转矩阵所给的建议完全相同。再次,有两个重要点需要考虑。首先,确保你指定了如何从你提供的任何标量转换为完整的变换矩阵。其次,清楚地指定这是哪个变换矩阵。这是我的建议文本:
【机器人位姿表示】好的、坏的、丑的机器人位姿表示_第6张图片

(注:变换矩阵 T W B \mathbf{T}_{\mathtt{WB}} TWB表示机器人坐标系 F B \mathcal{F}_{\mathtt{B}} FB相对于世界坐标系 F W \mathcal{F}_{\mathtt{W}} FW的位姿,使得在机器人坐标系中表示的点 B p _{\mathtt{B}}\mathbf{p} Bp可以通过
W p = T W B B p _{\mathtt{W}}\mathbf{p}=\mathbf{T}_{\mathtt{WBB}}\mathbf{p} Wp=TWBBp变换到世界坐标系中。)

我在图解示例中再次包含了一些建议的短语。
【机器人位姿表示】好的、坏的、丑的机器人位姿表示_第7张图片

(注: T A B \mathbf{T}_{\mathtt{AB}} TAB表示坐标系 B \mathtt{B} B相对于(with respect to)坐标系 A \mathtt{A} A的变换矩阵。 T A B \mathbf{T}_{\mathtt{AB}} TAB将坐标系 B \mathtt{B} B中的点变换到坐标系 A \mathtt{A} A中。对于字体,此处使用\mathbf{p}表示3维坐标( B p _{\mathtt{B}}\mathbf{p} Bp),使用\boldsymbol{p}表示4维齐次坐标( B p _{\mathtt{B}}\boldsymbol{p} Bp))

对于该示例有一些额外的说明:

  1. 再次强调,对于这些短语没有统一意见,所以请不要假设人们以同样的方式使用它们。
  2. 我引入了带有单个左下标的简化符号表示点。如果你的论文或数据集只涉及点和姿态(而不涉及向量),这可以大大简化符号。
  3. 自从我的博士论文以来,我一直使用齐次坐标来表示点。为了区分齐次坐标(4x1)和欧几里得坐标(3x1),我使用不同的字体;齐次是粗斜体,欧几里得是粗直立体。

5. 如果不是100%清楚,就要有所畏惧。使用3D绘图工具来检查你的猜测

大多数时候,如何从提供的标量转换为变换矩阵并不完全清楚。如果你不是100%确定答案,最不痛苦的做法是启动你最喜欢的3D绘图工具,绘制答案,直到事情看起来正确。然后写信给作者,向他们解释你需要什么文档才能在没有猜测的情况下做对。

编码风格建议

在自动化系统实验室(Autonomous Systems Lab),我们尝试将您在上面看到的符号直接转换为代码,以便在多人共同处理同一功能时清楚。
【机器人位姿表示】好的、坏的、丑的机器人位姿表示_第8张图片

重要的点:

  1. 为变换矩阵、点和向量定义标准符号代码。
  2. 用使用的坐标系列表对每个函数或类进行注释。
  3. 采用某种时间索引的符号。在这里,我用“kp1”表示 k+1,用“km1”表示 k-1。

你可能感兴趣的:(机器人,算法,线性代数,矩阵)