机器人学——1.0-位置与姿态概述

摘要:
机器人和计算机视觉中的一个基本要求是能够表示物体在环境中的位置和方向。坐标系的位置和方向总称为位姿,图形上表示为一组坐标轴。我们利用运算符“⊕oplus⊕”表示相对位姿的合成。对于其他问题,我们需要用三维坐标系来表示三维世界中的物体,如飞行机器人、水下机器人的位姿或者机器人手臂夹持的工具末端。另一个摄像头是不固定的,它固接到机器人上,与机器人有固定的相对位姿,并估计出物体相对于该摄像头的位姿。

机器人和计算机视觉中的一个基本要求是能够表示物体在环境中的位置和方向。这些物体包括机器人、摄像机、工件、障碍物和路径。

空间中的点是数学中一个熟悉的概念,它可以被描述为一个坐标向量,也被称为一个约束向量,如图 (a) 所示。向量表示点相对于某个参考坐标系的位移。一个坐标系或笛卡儿坐标系统,是由一组正交轴构成的,这些轴相交于一个被称为原点的点。
用向量表示一个点
更多时候我们需要考虑组成物体的一组点。我们认为物体是刚性的,构成它的点相对于物体坐标系保持固定的相对位置,如图 (b) 所示。然而我们表示物体位置和方向时并不是描述其上单独的点,而是用该物体坐标系的位置和方向来描述。坐标系有自己的标记,比如这里的 {B}{B} ,其坐标轴 xBx_ByBy_B 采用坐标系的标记作为其下标。

坐标系的位置和方向总称为位姿,图形上表示为一组坐标轴。相对于一个参考坐标系的某个坐标系的相对位姿用符号 ξxi 表示。下图显示了两个坐标系 {A}{A}{B}{B} ,以及 {B}{B} 相对于 {A}{A} 的相对位姿 AξB^Axi_B 。前面的上标表示参考坐标系,下标表示被描述的坐标系。我们也可以认为 AξB^Axi_B 描述了一组动作——对 {A}{A} 施加平移和旋转使它转化为 {B}{B} 。如果没有初始上标,我们默认位姿的变化是相对于用 OO 表示的世界坐标系的。在图中的 PP 点可用任何一个坐标系表示。用式子表示为
Ap=AξBBp(1) ag{1} ^Ap={}^Axi_B cdot {}^Bp
等式右侧表示从 {A}{A}{B}{B} 然后到 PP 的动作。运算符“cdot”将一个向量转换为一个新的向量,它们是用一个不同的坐标系来描述的相同点。

在这里插入图片描述
相对位姿一个重要的特点是它们可以被合成或组合。如下图所示情况为例,如果一个坐标系可以被其他坐标系用相对位姿描述,那么它们的关系可以记为
AξC=AξBBξC ^Axi_C={}^Axi_B oplus{} ^Bxi_C

用语言可以表述为,{C}{C} 相对于 {A}{A} 的位姿可由 {B}{B} 相对于 {A}{A} 的位姿和 {C}{C} 相对于 {B}{B} 的位姿合成得到。我们利用运算符“oplus”表示相对位姿的合成。此时,点 PP 可以被表示为
Ap=(AξBBξC)Cp ^Ap= left( ^Axi_B oplus{} ^Bxi_C ight) cdot {}^Cp

在这里插入图片描述
在MATLAB中,“ξxi”、“cdot”、“oplus”,这些抽象的符号都可以被实现为标准的数学对象和运算符。

在前面的例子中主要讨论了二维坐标系的情况,能适用于一大类机器人的问题,特别是在平面世界里作业的移动机器人。对于其他问题,我们需要用三维坐标系来表示三维世界中的物体,如飞行机器人、水下机器人的位姿或者机器人手臂夹持的工具末端。

在相对位姿的合成中,我们可以通过确认运算符oplus两侧的上标和下标字母匹配来检验相对坐标系是否正确。我们可以去掉中间的上、下标字母,只留下左右两头加圈显示的上、下标字母。

下图给出了一个更复杂的三维变换的例子,其中每个实体上都固接了一个三维坐标系,并表示出了它们之间的相对位姿。固定摄像头从固定的视角观察物体,并估计物体相对于摄像头本身的位姿。另一个摄像头是不固定的,它固接到机器人上,与机器人有固定的相对位姿,并估计出物体相对于该摄像头的位姿。
在这里插入图片描述
另一个表示空间关系的方式是有向图,如下图所示。图中的每个节点代表一个位姿,每条边代表一个相对位姿。 从 XXYY 的箭头记作 XξY^Xxi_Y,表示 YY 相对于 XX 的位姿。前面我们提到过可以用运算符 oplus 来复合成相对位姿,这里可以用它写出一些空间关系:
ξFFξB=ξRRξCCξB xi_F oplus{}^Fxi_B=xi_R oplus{}^Rxi_C oplus{}^Cxi_B
ξFFξR=OξR xi_F oplus {}^Fxi_R={}^Oxi_R

每个方程表示了图中的一个闭环。方程等号两侧的每一边各表示一条网络的通路,即一组按照从头到尾顺序连接的边(箭头线)。等式两边的起始节点和结束节点必须相同。
在这里插入图片描述
位姿表示的一个非常有用的属性是其代数运算能力。以上面第二个闭环方程为例,它表示机器人的位姿等同于两个相对位姿的合成:从世界坐标系到固定摄像机的相对位姿,以及从固定摄像机到机器人的相对位姿。

在数学对象术语中,位姿组构成了一个群,即一系列对象的集合,它支持一种运算结果仍属于该群的关联二元运算符(复合算子),一种求逆运算和一种单位元素。在这里,该群是二维或三维的特殊欧几里得群,分别记作SE(2)SE(2)SE(3)SE(3)

我们可以通过在等式两边同时加上一个逆 ξFxi_F 来消除 ξFxi_F,记作
ξFξFFξR=ξFξRFξR=ξFξR egin{array}{r} ominus xi_Foplusxi_Foplus{}^Fxi_R=ominusxi_Foplusxi_R \[1em] ^Fxi_R=ominusxi_Foplusxi_R end{array}
其结果就是机器人相对于固定摄像机的位姿。

下面是几个代数运算规则:
ξ0=ξ,ξ0=ξξξ=0,ξξ=0 egin{array}{rr} xioplus 0=xi,& xi ominus 0 = xi \ xi ominus xi = 0,& ominus xi oplus xi = 0 end{array} 其中 00 表示一个零相对位姿。一个位姿可以有逆位姿:
XξY=YξX ominus {}^Xxi_Y={}^Yxi_X 该逆位姿在图中可表示为从 YYXX 的一条箭头线。相对位姿可以被复合或合成,之前已经说明,不再赘述。
需要注意的是位姿的代数运算规则不同于一般的代数运算规则,位姿复合运算中各个项的位置不能交换:
ξ1ξ2ξ2ξ1 xi_1 oplus xi_2 e xi_2 oplus xi_1 ξ1ξ2=0xi_1oplusxi_2=0时才可以互换位置。可以用相对位姿将一个点从一个坐标系中的一个向量转换为另一个坐标系中的另一个向量,这里也不再赘述。

那么,什么是 ξxi ?它可以是支持上述代数运算的任何数学对象,并适用于我们身边常见的问题。它还取决于我们讨论的是二维还是三维的问题。以后我们将讨论一些对象,其中包括向量以及一些更奇特的数学对象,如齐次变换矩阵、正交旋转矩阵和四元数等。所有这些数学对象都适用于MATLAB的编程环境。

回顾

  1. 一个点用坐标向量来表示,它代表该点在参考坐标系中的位移;
  2. 一个刚体可以由其上的一组点代表,该刚体可以用单独一个坐标系描述,并且组成它的点可以用它们在该坐标系中的位移来表示;
  3. 一个物体在坐标系中的位置和方向称为它的位姿;
  4. 一个相对位姿表示一个坐标系相对于另一个坐标系的位姿,记作代数变量 ξxi
  5. 一个点可以用不同坐标系中的不同坐标向量来描述,向量之间通过坐标系相对位姿来转换,其运算符为“cdot”;
  6. 用相对位姿写成的代数表达式是可以进行代数运算的。

免责声明:文章转载自《机器人学——1.0-位置与姿态概述》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果Java序列化(转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

智能对话机器人实战开发案例剖析(1)- 体系结构和分类

一、前言 人工智能时代,以智能对话机器人为最核心的技术应用方向之一,实现人机之间通过自然语言的沟通和交流,是智能人机对话机器人的核心目标之一。尤其是Google Assistant 语音助手近期的卓越表现,如何开发智能对话机器人系统,成为一个新的热点。本文是系列文章的第一部分,旨在较少智能对话系统的进行一个全面和具体的介绍。相关内容已同步录制成视...

适合初学者的ROS机器人教程(2): Ubuntu下ROS使用Gazebo和Rviz对UR5机器人建模

作者:知乎@Ai酱 本文的前提是:默认你已安装ROS和Gazebo和Rviz,并且使用Ubuntu。Gazebo显示不出东西?检查下/home/用户名/.gazebo/models下面常见的模型有木有拷贝进去有数以百计的基本模型。 安装UR5的包 $ sudo apt-get install ros-kinetic-ur-gazebo ros-...

ROS机器人开发实践学习笔记3

摘要: 刚刚开始学习ROS,打算入机器人的坑了,参考教材是《ROS及其人开发实践》胡春旭编著 机械工业出版社 华章科技出品。本来以为可以按照书上的步骤一步步来,但是,too young to simple啊,程序员的苦逼日子开始了,特地记录如下。 今天居然发现,不是linux没有安装成功,只是没有办法找到boot/efi下的引导文件,充分利用Manjaro...

.NET 搭建简单的通知服务

搭建简单的通知服务 Intro 很多情况下,我们都会遇到一些需要进行通知报警的场景,比如说服务器资源监控报警,抢到火车票后通知用户进行付款。 原来主要是用的钉钉群里的机器人来做的通知,周末看到原来做 【Server 酱】的大佬写了一个简单的基于企业微信的微信推送,代码是 PHP 的非常简单,可以参考:https://github.com/easychen/...

ABB机器人功能程序(FUNC)

定义:功能程序能够返回一个特定数据类型的值,在其他程序中当做功能来调用。 功能程序的使用范围非常的广,熟练者可以根据不同的需求创建相对应的功能程序,功能程序固定格式:以FUNC开始,return结束。在ABB学习中很多同学都对功能程序一知半解,甚至在真正使用的时候无从下手。 在学习ABB期间,遇到过几种使用情况,特把它们整理归纳在一起,以便加深理解。  ...

MoveIt运动规划-1

按照帮助文档Setup Assistant Tutorial中的描述,用moveit_setup_assistant图形界面一步步配置机器人,最后生成机器人的配置文件保存到指定的文件夹中。 以UR5机器人为例,将生成的配置文件保存在ur5_moveit_config文件夹中。生成的config文件夹中包含了一些机器人和求解器相关的配置文件,launch文件...