通常情况下,我们对一个机器人提出的最根本问题是,它在哪?这个问题问的是机器人上每一个点的位置在哪。答案就是机器人构型(configuration):机器人上所有点的位置的表示方法。因为机器人使用的是刚性且形状已知的连杆,所以只需要少量数字就能表示机器人构型。例如,旋转的门的构型,用一个角度就能表示;平面上一点的构型,用两个坐标(x,y)就能表示;平放在桌面的硬币,用(x,y)表示硬币中心的位置,用θ表示硬币上一点的方向,三个变量就能表示其构型。

        定义:机器人的构型是机器人上每个点的位置的完整表示。表示机器人构型所需的最小实值坐标数n就是机器人的自由度(dof)。包含机器人所有构型的n维空间就是构型空间(C-space)。机器人的构型由其C-space中的一个点表示。

一、自由度(dof)

根据上述定义,自由度就是表示机器人构型所需的最小实值坐标数。也就是说,通过这几个实值坐标数就能完整表示机器人上每一点的位置。要了解C-space首先需要确定机器人的自由度。

1.1 刚体自由度

平面刚体,表示在二维平面运动的刚体,有3个自由度。空间刚体,表示在三维空间运动的刚体,显然有6个自由度。

首先考察一下平面刚体为什么有3个自由度。以放置在桌面的硬币为例如图1所示,按照自由度的定义,需要找到几个参数能完整表示硬币上所有点的位置。所以首先任意选取硬币上的一个点A,用两个参数就能完全表示A的位置,所以A点有两个自由度。然后再选一个点B,AB之间的距离为是已知的,因为考察刚体自由度的前提是刚体形状和尺寸是已知的。所以B位于以A为圆心,为半径的圆上,要确定B的位置,还需要一个参数。所以要确定A、B的位置需要3个参数。再选一个点C,已知,那么C的位置只有两种可能:以A为圆心为半径的圆与以B为圆心为半径的圆相交处,有两个相交的位置,一首一尾。也就是说,一旦确定了A、B的位置,选定了首尾,确定了常数,那么C点的位置就确定了。所以通过就可以确定C的位置。可以尝试再选一个点D,这个点带来了三个额外约束,其中有一个是冗余约束。利用另外两个独立约束,就可以类似确定C的位置一样确定D的位置。刚体上其他的点的位置都可以通过这种方法确定,所以放置在桌面的硬币通过三个参数就可以完全确定硬币上所有点的位置。所以平面刚体自由度为3。

图1 平面上的硬币

这种方法可以总结成:dof=变量个数-约束个数。

由以上推导过程可以看出,如果一直三个点的位置,那么可以刚体上其他点的位置也能知道,所以变量个数按照三个点的变量来算。平面刚体上A、B、C的坐标可以表示为,有6个变量,约束为,所以自由度为6-3=3。

这种方法也可以用于空间刚体自由度的计算。空间刚体上A、B、C的坐标可以表示为有9个变量,约束同样为,那么自由度为9-3=6。

所以在空间运动的刚体自由度为6,在平面上运动的刚体自由度为3。

1.2 机器人自由度

1.2.1 机器人关节

典型的机器人关节有六种如图2(a)所示。R表示旋转关节,P表示移动关节,H表示螺旋关节,C表示圆柱关节,U表示万向关节,S表示球形关节。图2(b)总结了各种关节类型提供的自由度和约束。f表示关节自由度个数,c表示关节带来的约束个数。

(a)

(b)

图2 典型的机器人关节

1.2.2 格鲁布勒公式

可以通过格鲁布勒公式计算带有关节和连杆机构的自由度。

        定义:如果机器人有N个连杆,基座也算一个连杆,J表示关节个数,m表示刚体自由度数(如果是平面机构m=3,空间机构则m=6),表示第i个关节的自由度,表示第i个关节的约束个数,对所有关节i,。机器人的自由度可以按如下格鲁布勒公式计算:

其中,表示除去基座之外所有刚体(连杆)的自由度,表示所有关节带来的约束个数。串联机构、并联结构都可以用这种方法计算自由度。

这种方法只能用于所有关节约束都是独立的情况。如果它们不是独立的,那么公式提供了自由度的下限。如图3所示的平行四边形连杆机构就是这种情况。连杆个数(包括基座)N=5,关节个数J=6,对于各关节,对于平面机器人m=3,按上述公式计算自由度为:3(5-1-6)+6=0,自由度为零表示这是一个纯刚性结构,但实际上该机构可以按一个自由度运动。三个平行连杆中的任何一个及其两个关节对机构的运动没有影响,所以关节约束不是独立的,先去掉一个平行连杆及其两个关节,再计算自由度为:dof=3(4-1-4)+4=1。

图3 平行四边形连杆机构

通过这个公式来计算常用的典型平面串联机构,k关节连杆平面串联机器人如图4所示,N=k+1,k个连杆加基座,J=k,,自由度为dof=3((k+1)-1-k)+k=k,对于空间多连杆串联机器人也可以同样计算自由度:dof=6((k+1)-1-k)+k=k,所以通常所说的k关节机器人也可以叫做k自由度机器人。

图4 平面串联机器人

二、构型空间

2.1 构型空间拓扑

上一节主要讲的是怎么确定构型空间的维数(也就是机器人的自由度),然而构型空间的形状也很重要。例如,同样是二维构型空间,一个点在平面上运动与在球面上运动,它们的构型空间显然是不一样的,平面可以无限延伸但球体是环绕的,它们的不同在于构型空间的形状。

构型空间形状的不同通过构型空间拓扑来表示。不严格的讲,如果一个空间可以连续变形为另一个空间,而不需要切割或粘合,那么这两个空间在拓扑上是等价的。例如一个大的球面和小的球面是拓扑等价的,但是它们与平面是不等价的,因为不通过剪切是无法将球面变成平面的。

一维圆环空间在数学上表示为,直线表示为,表示一维欧几里得空间,由于中的点通常用一个实数表示,所以通常写成。一个封闭的线段通常写成,表示包括端点a和b,封闭的线段与直线拓扑不等价,因为直线不包括端点。而一个开放的线段(a,b)与直线是拓扑等价的,因为开放线段可以缩放成直线。

对于更高维度而言,表示n维欧几里得空间,表示(n+1)维空间里的n维球面,例如表示的是在三维空间的二维球面。

需要注意的是,空间拓扑结构是空间的一个基本属性,与如何选择坐标来表示空间中的点无关。

一些C-空间可以表示为两个或多个低维空间的笛卡尔积,也就是说,这种C空间中的点可以表示为低维空间中点的并集。例如:

1.平面上的刚体的C-space可以表示成,因为其构型可以用表示。

2.一个PR机器人的C-space可以写成。通常情况下表示C-space拓扑时会忽略关节角度的限制,如果考虑到关节角度限制,C-空间是两个闭合区间的笛卡尔积。

3.一个2R机器人的C-space可以写成,其中是(n+1)维空间中的n维环面如图5所示。这里需要注意而不是。例如球面与二维环面不是等价的。

4.一个带有2R机械臂的平面刚体(比如移动机器人),其C-space可以写成

5.在上一节中讨论的三维空间刚体自由度时,其构型可以用三维点坐标、二维球面和一维圆环表示,所以其C-space可以写成:

图5 四种不同二维C-space拓扑

2.2 构型空间表示方法

为了方便计算,需要用某种代数方式对构型空间进行表示。需要注意的是构型空间的表示方式可以多种多样,但是拓扑是不变的,拓扑是构型空间的根本性质。例如,3D空间中的同一点可以具有不同的坐标表示,具体取决于参考坐标系的选择(坐标轴的原点和方向)和长度比例的选择,但无论如何选择,基本的空间拓扑结构都是相同的。

用n个坐标或参数来表示n维构型空间称为空间的显式参数化。例如,二维球面可以用经度和纬度两个参数进行表示,这就是显示表示法。也可以在三维坐标系里面用(x,y,z)表示,这叫隐式表示法。

用经纬度表示球面时,当你处于纬度90°或-90°时(南/北极),移动很小一步,就会导致经纬度坐标系的巨大变化。南/北极就是经纬度表示的球面的奇点。这些奇点的位置与球面本身无关,球面在任何地方看起来都是一样的,而一切都与它所选择的表示方法有关。尽管球面上的一点以匀速运动,但在奇点处经纬度坐标系里面的速度趋于无穷。显然这种表示方法会给实际应用带来困难。有两种方法克服这种困难:

  • 用多个显示参数化的坐标系来表示空间,每个坐标系只覆盖空间的一部分,在这一部分内没有奇点。例如,在球面定义两个经纬坐标系,其中一个纬度,经度,另一个坐标系相当于旋转了90°,在其中一个坐标系的奇点附近就用另一个坐标系来表示,从而避开奇点。

用多个坐标系来表示的优点在于,每个坐标都可以用最少的变量个数来表示。一个缺点是需要额外的空间来记录并在各坐标之间切换表示,以避免奇点。需要注意,欧几里德空间可以由一个没有奇点的单坐标系表示。

  • 隐式表示是将n维空间嵌入n维以上的欧几里德空间,就像二维单位球面可以视为嵌入三维欧几里德空间的曲面一样。隐式表示使用的是高维空间的坐标,但这些坐标会受到约束,从而减少自由度的数量。例如单位球面在三维欧几里德空间用(x,y,z)表示,约束为

这种方法的缺点是需要使用多于空间自由度的变量个数。优点是没有奇点,只需要一个坐标系就能表示整个空间。另一个优点是,为闭链机构构建显式参数化表示可能非常困难,但很容易找到隐式表示。隐式表示的一个例子是表示刚体姿态,刚体姿态只需要roll-pitch-yaw三个参数就能表示,但是这种表示存在奇点。而使用九个参数表示,即用旋转矩阵表示,其中有六个约束,这种表示方法除了无奇点之外,旋转矩阵表示法还可以使用线性代数来执行计算,例如旋转刚体或改变表示刚体姿态的参考坐标系。

三、构型与速度约束

对于闭链机器人,构型空间用隐式表示比显示表示更容易。例如,如下图所示的平面四连杆机构,只有一个自由度,可以列出如下约束方程:

其中,表示的是基座,恒定为水平的。三个约束方程有四个未知数,所有解的集合在四维关节空间中形成一条一维曲线,并构成该机构的C-space。

图6 平面四连杆机构

这种方法适用于包含一个或多个闭合回路的一般机器人,构型空间可以用表示,满足闭合环路方程:

其中是k个独立方程集,。这种约束叫做完整约束,可以减少C-space的维数。假设k个约束都是独立约束,那么C-space可以看作是嵌入的n-k维表面。

假设一个闭链机器人闭合环路方程为,各关节轨迹为,将方程的两边同时对t微分:

其中。从以上方程可以看出,关节角速度需要满足,可以将这个约束写成:。这种对速度的约束叫作Pfaffian约束。因为,可以将看作是的积分,所以完整约束又叫做可积分约束:速度的约束可以积分,得到对构型的等价约束。

如图7所示为一个硬币在平面上滚动,构型可以用接触点的坐标、转向角和旋转角表示,其C-space是,是四维的。运行方程如下:

,上述运动约束方程可以写成:

。以上约束是不可积分的,也就是说,不存在一个可微函数g,使得。这种不可积分的Pfaffian约束称为不完整约束。这种约束降低了系统可行速度的维数,但不降低构型空间的维数。

图7 在平面上滚动的硬币

四、任务空间与工作空间

任务空间和工作空间都和机器人末端执行器的构型有关,而不是整个机器人的构型。

任务空间是对机器人任务的空间描述。例如,如果让机器人在平面上写字,那么任务空间就是。任务空间是由任务决定的,与机器人无关。

工作空间是机器人末端执行器能够达到的构型的集合。工作空间的定义主要由机器人的结构决定,与任务无关。

任务空间与工作空间都是有用户定义的,用户甚至可以将有些末端执行器没有用到的自由度不表示出来。

任务空间与工作空间与机器人的构型空间是不同的。任务空间或者工作空间中的一个点,可能对应机器人的多个构型。

任务空间中的有些点可能机器人无法到达。而根据工作空间的定义,工作空间中的所有点至少对应一种机器人构型。

两种有不同构型空间的机构,可能具有相同的工作空间。两种有相同构型空间的机构,可能具有不同的工作空间。

机器人学(一):构型空间(C-Space)相关推荐

  1. 彩色空间(Color Space)

    背景 学习openCV-Python Tutorial,在Image Processing in OpenCV这一节里有提到彩色空间的转换,结合其他的一些资料对彩色空间(Color Space),彩色 ...

  2. Java堆空间(Heap Space)

    Java 堆空间(Heap Space) 概述 在Java程序中,堆是JVM内存空间中最大的一块,同时我们知道,每个线程都拥有一个虚拟机栈,但是堆不同,Java堆是被所有线程共享的一块内存区域,在虚拟 ...

  3. 2021-11-05 构型空间(关节空间)路径规划-1

    参考 构型空间概念 C-space 如何理解 用一组向量来完全描述机器人的空间状态,这组向量的集合是构型空间 集合+特定运算=空间

  4. Java 堆空间(Heap Space)

    Java 堆空间(Heap Space) 概述 在Java程序中,堆是JVM内存空间中最大的一块,同时我们知道,每个线程都拥有一个虚拟机栈,但是堆不同,Java堆是被所有线程共享的一块内存区域,在虚拟 ...

  5. linux 交换空间(space space)详解

    内存和磁盘简介 正常的linux操作系统一般有两种内存,第一种就是我们熟知的RAM(random access memory),它是用来存储一段时间内频繁使用的数据和文档,电脑是不能直接读写非内存的东 ...

  6. 构型空间(Configuration Space)(下)

    第三章 Configuration Space(下) 由于格式问题,文章内容以图片形式上传:如果喜欢本文的朋友可以去github上下载PDF版本. 第3章 Configuration Space(下) ...

  7. [图形学]切向空间(Tangent Space)

    2009年3月17日 阅读评论 发表评论     这个应该算是补遗漏,去年在MSN Space上写过一篇关于凹凸贴图的,当时写了半天其实写的一点也不明白,呵呵,因为有很多细节其实我也没搞太清楚,现在这 ...

  8. sed模式空间(pattern space)和保持空间(hold space)

    前面的基本用法已经可以满足90%的需要,人个认为想要真正掌握sed,还需要学习一下sed的高级用法,本节就详细讲解一下sed的模式空间和保持空间 前面基本用法中也有提到模式空间,即为处理文件中一行内容 ...

  9. 机器人学笔记之——空间描述和变换:姿态的其他描述方法

    0.姿态的其他描述方法 如果你也有看机器人学导论的原书的话,可能会看到这样一个东西:正交矩阵的凯莱公式.不知道你是怎么样的,反正我是一脸懵逼,有这么个东西吗?百度好像也找不到呀,最后还是靠谷歌和原书的 ...

最新文章

  1. 为什么工厂老板们从不「迷信」人工智能?
  2. 为 Virtual SAN 就绪节点和就绪块做好准备
  3. VanDyke.SecureCRT.v7.0.0.326官方英文版x86 x64 + Keymaker-ZWT
  4. Leetcode 102. 二叉树的层次遍历 解题思路及C++实现
  5. 项目用的几种机型参数调查
  6. mysql查看已打开文件数_MySQL如何计算打开文件数_MySQL
  7. MySQL timestamp的默认值怎么设置?
  8. PHP快还是HTML快,PHP_HTML-加速、再加速,web开发人员是否必须掌握复杂 - phpStudy...
  9. arduino与matlab联调出现问题
  10. 深度 | 理解深度学习中的卷积
  11. java设计模式模式组合_Java设计模式---组合模式
  12. mongovue mysql_mongo客户端mongoVUE的使用
  13. python基础:os模块
  14. SATA 模式相关概念
  15. python控制风扇_Python 语音控制普通风扇实现教程
  16. chrome 打开默认页 被篡改_chrome默认首页被修改如何解决_chrome首页被篡改的处理办法-系统城...
  17. 网站被劫持怎么办,怎么解决?
  18. 卸载安装Ubuntu18.04双系统、ROS+装机
  19. 18118 勇者斗恶龙(c++ STL sort的运用)
  20. 华为nova7se怎么看云相册_华为nova7如何开启云空间

热门文章

  1. 929. Unique Email Addresses*
  2. 基于Gate Mechanism的激活单元GTU、GLU
  3. 云顶之弈5.26服务器维护,云顶之弈手游维护 更新内容一览
  4. 在VMware上实现vsphere client的EXSI
  5. EPS QOS 体系解读
  6. ping命令指定包大小
  7. 1 Robotics: Aerial Robotics 第3+4周 课程学习记录及课后习题解答
  8. python读取docx文件_Python应用 | 读写docx文件 (值得收藏的技能)
  9. python保存高维数组array
  10. Linux 硬盘与硬件管理