0 前言

接觸機器人已經有一定的時間了(其實也不是很長),一直想把這方面的知識和經驗總結一下。主要是想為自己做個整理,如果那裡有錯誤或者有問題的地方,還請大家指正、’指點和交流。

這裡所說的機器人主要指的是串聯的機械臂。我們對機器人的描述主要關注的是末端的狀態,可以從兩個方面出發:關節空間和笛卡爾空間。例如:我想用左手拿一個杯子,我的身體不動,只移動胳膊和手(這跟機械臂很像),描述手的狀態,我可描述每個關節轉了多少度(關節空間),也可以說我的手心(末端的一個點)的空間位置和方向(笛卡爾空間)。

1 關節空間描述

關節空間,需要確定每個關節的零位,然後計算當前位置和零位的差值(關節分為平動關節和轉動關節)。

如上圖所示(SCARA機械臂),末端關節為平動關節(伸縮關節),前面的是轉動關節(旋轉關節)。

2 笛卡爾空間描述

笛卡爾空間,需要規定一個參考系,我們定義基礎坐標系{A}為:X軸向外,Y軸向右,Z軸向上。如下圖:

2.1 位置、姿態和框

位置是一個向量,使用空間點的坐標進行描述,如:P(x,y,z)

姿態(方向)有很多種描述方法描述,這裡主要介紹利用旋轉矩陣的描述方法 。首先我們在被描述的物體上要建立一個可以隨物體的方向改變的坐標系{B},那麼對於{B}的X、Y、Z三個坐標軸在{A}中的描述可以表示物體的姿態。因為由三個向量組成,可以寫成一個3x3的矩陣R = {X,Y,Z},我們稱它為姿態矩陣。其中X,Y,Z{B}的坐標軸在{A}的坐標軸上的投影。的具體信息在下一節說明。

框(frame)是位置和姿態的組合,即 {R,P},框的描述在下面可以用來推出齊次矩陣;

2.2 旋轉矩陣

在描述末端位姿時,我們通常在每個關節末端建立一個直接坐標系,依次地推求出末端和基座(基座標系)之間的相對位姿。因此,需要熟悉不同坐標系之間的轉換。

设在{xyz} 坐标系下向量的坐标为(x,y,z),在{noa} 坐标系下向量的坐标为(n,o,a),向量的两种表示形式(這是同一向量在不同坐標系下的描述):

其中x,y,z和n,o,a是向量分別在兩個坐標系的坐標軸上的投影。坐标(n,o,a)變換到坐标(x,y,z)的關係可以通過,坐標系{noa} 取長度為n,o,a的三個軸向量向{xyz} 坐标系投影計算得到。這裡可以利用線性代數的知識簡化計算,兩坐標系之間的關係可以用一個3x3的矩陣乘法計算:在描述末端位姿時,我們通常在每個關節末端建立一個直接坐標系,依次地推求出末端和基座(基座標系)之間的相對位姿。因此,需要熟悉不同坐標系之間的轉換。设在{xyz} 坐标系下向量的坐标为(x,y,z),在{noa} 坐标系下向量的坐标为(n,o,a),向量的两种表示形式:

因為,左右兩側的矩陣均為正交單位陣,所以逆為矩陣的轉置,得到R:

觀察定義式(右邊的矩陣),我們可以知道R是n,o,a在x,y,z上的投影,即R是坐標系{noa}在坐標系{xyz}中的姿態。

矩陣R也是單位正交陣(可以通過上面的定義式證明)。這裡還可以看出坐標系之間的轉化是相對的過程,如果A通過R變為B則B通過R的逆(轉置)變為A。

特殊化上面矩陣,得到下面繞坐標軸旋轉的變換矩陣(繞轉軸逆時針方向為正向):

這三個矩陣是稱為基礎旋轉,可以用來構造旋轉矩陣(下面會經常用到)。左乘上面的矩陣,就可以把旋轉後的坐標系中的向量,描述到原坐標系下。

2.2 旋轉合成

下面的算式,我們規定上角標表示描述使用的參考系(一般情況下標在左上角,這裡我為了公式編寫方便放在右上角),所以P0是P在坐標系{0}下的描述),R的下角標表示被描述的坐標系,通過上一節我們知道R01除了表示坐標系{1}在坐標系{0}中的描述外,它還是將向量在坐標系{1}中的描述轉化到坐標系{0}中描述是左乘的矩陣,則有:

聯立式子可以得到:

可以得到結論:旋轉的合成可以分解成成一系列旋轉,每個旋轉都是相對前一個旋轉進行定義,按給定的旋轉顺序右乘旋轉矩陣進行合成。

注意:旋轉的合成是矩陣乘法,不滿足交換律,一般兩個旋轉不能交換。

2.3 其次變換

首先來處理位置描述的轉化,上面我們得到了姿態之間的關係(姿態代表的是方向,平移不影響結果),下面我們來描述不同坐標系下的位置描述間的轉化關係。

現在我們考慮一個點在不同坐標系下的描述(這裡不是一個向量)。如上圖,在{xyz}一個點的位置用向量P1表示,它同樣可以用兩個向量的和的形式表示(注意這些向量都是在{xyz}中的描述),即:

        

通過上一節我們可以得出P2向量在{noa}坐標系中描述和{xyz}坐標系中描述的關係:

可以的到點在{ona}坐標系和{xyz}坐標系中描述的轉換關係 :

剛體在空間中的位置可以通過剛體上某一適當的點相對參考坐標系的位置來表示(平移)。而方向可以通過固連在剛體上的坐標系連描述。這裡利用o來代表坐標系間的位置關係,得到轉化后的公式(和上面公式相同):

寫成矩陣形式如下:

我們稱這個4x4的矩陣為其次矩陣(有些地方用T表示,這裡用A表示連續的兩個坐標系的變換,T表示多個變換的合成)。

對應的逆變換為:

對應的矩陣形式為:

可以看出來A01就是坐標系{noa}在左邊系{xyz}下的位姿,因此一個齊次矩陣可以表示兩個坐標系轉化,同時也表示坐標系的描述。對應的連續的變化可以使用一系列的矩陣乘法表示。

注意:其次矩陣不是正交單位陣(可以從上面求逆的過程看出來)。

2.4 算子

為了後面計算運動學是方便,我們需要定義算子。這裡的算子是用來計算特殊運動(同樣用來可以描述相對位姿)的其次矩陣,有這些矩陣和便是狀態的矩陣做乘法就可以實現運動的描述。

平移算子是用來描述平移運動的。分別按x,y,z三軸平移的運動算子如下:

旋轉算子是用來描述旋轉運動的。分別按x,y,z三軸旋轉的運動算子如下:

上面的計算為旋轉矩陣的推廣,將平移和旋轉統一用齊次矩陣表示出來。

2.5 總結

到此,我們可以對一個機械臂的抹點在笛卡爾坐標系下進行描述了,具體步驟如下:

        1,確定參考坐標系,一般是大地上的一點記為{B}

2,在每個關節上固連一個坐標系{R1},...{Rn}

3,通過其次變換,將末端坐標系{Rn}(或者記為{T})的描述轉化到{B}中;

3 其他描述方法

雖然旋轉矩陣可以直觀的描述出的卡爾空間的姿態,但是它包含了大量的冗餘信息,正交和單位約束給它帶來6個約束。因此,只需要3個參數就可以描述空間中的姿態。

3.1 角度

旋轉的最簡單表示,可以通過三個角度來描述:

將表示繞一個坐標軸進行的基本旋轉矩陣(2.2節)看成是單個角度的函數。一般的旋轉可以通過3個基本旋轉適當的組合實現(需要保證兩個連續旋轉不是繞平行軸進行)。27種組合中可以確定12中不同的描述集合。這12中描述按照每次旋轉的相對參考系不同分為兩種不同的計算(左乘和右乘),因此一共有24組。一般稱相對固定不變坐標系的描述為固定坐標角描述,另一種基於上次旋轉生成的新坐標系的描述稱為歐拉角描述。下面介紹其中的兩種。

3.1.1 ZYZ角

利用ZYZ角描述結果可以通過如下基本旋轉合成得到:

● 將參考坐標系繞z 軸旋轉角度φ,這一旋轉可以用Rz(φ)來描述;

● 將當前坐標系繞y’ 軸旋轉角度θ,這一旋轉可以用Ry’(θ)來描述;

● 將當前坐標系繞x’’ 軸旋轉角度ψ,這一旋轉可以用Rx’’(ψ)來描述;

最終坐標系的姿態通過相對當前坐標系的旋轉合成得到,因此可以通過右乘基本旋轉矩陣來計算:

3.1.1 RPY角

另一組歐拉角源於(航空)航海領域中的方向表示,是ZYX角,也稱滾動-俯仰-偏航角,用來指示飛行器姿態的典型改變。這是的角度表示相對固連在飛行器質心的固定坐標系的旋轉。按照滾動-俯仰-偏航角得到的旋轉結果可以通過下面步驟獲得:

● 將參考坐標系繞x 軸旋轉角度ψ,這一旋轉可以用Rx(ψ)來描述;

● 將當前坐標系繞軸旋轉角度θ,這一旋轉可以用Ry(θ)來描述;

● 將參考坐標系繞軸旋轉角度φ,這一旋轉可以用Rz(φ)來描述;

最終坐標系的姿態通過相對固定坐標系的旋轉合成得到,因此可以通過左乘基本旋轉矩陣來計算:

3.1.1 總結

觀察上面兩組不同的描述,發現他們每次旋轉相對的坐標系不同。

ZYZ角是相對當前坐標系的旋轉,使用右乘在右邊;RPY是相對一個固定坐標系的旋轉,使用左乘。姿態轉換矩陣都是左乘在被描述的姿態上的,只是他們計算的順序不同所以看起來變成了左乘和右乘。

注意:兩種旋轉的乘法方向不同(表示的參數也可能不同),但無論使用那種方式表示,對應的旋轉矩陣是唯一的。

3.2 角和軸(軸角)

繞空間中某一軸旋轉指定角度的姿態的非最簡形式,可以用4個參數表示,在逆運動學和規劃中會用到。

領向量r為關於參考坐標系{xyz}的旋轉軸的單位向量,下面推導繞旋轉角度θ與旋轉矩陣的關係。我們通過繞參考坐標系坐標軸的基本旋轉進行合成。

定義θ的方向繞r 逆時針方向為正。一個旋轉方法為,首先將r 軸旋轉與z 軸一致,然後繞z 軸旋轉θ度,最後將向量的方向旋轉到和初始相同(這裡始終使相對固定坐標系的旋轉):

● 使r 與z 一致,方法是先繞z 轉 -α角,再繞y 轉 -β角;

● 繞z 軸轉 θ角;

● 使r 與初始方向一致,方法是先繞y 轉 β角,再繞x 轉α角;

得到下面的公式:

通過r 的分量可以使用三角函數消去其中的α和β,得到下面矩陣的詳細描述:

其中sθ和cθ是三角函數sinθ和cosθ的縮寫,對應三角函數如下:

這裡需要注意R矩陣擁有如下性質:

即,繞 -r 旋轉 -θ與繞 r 旋轉 θ沒有區別,因此這種表示不唯一。

注意:當θ為0時,單位向量r是任意的。

3.3 四元數

角和軸表達的不足可以通過一個不同的四參數表達式加以克服,即單位四元數。定義為{η,ε}其中:

η為四元數的標量部分,而ε = [εx,εy,εz]’ 稱為四元數的向量部分,他們存在以下約束條件:

四元數在軸角中的(-r)與(rθ)是取值不同,用四元數表示旋轉矩陣如下:

這裡還可以得到兩個結論:

1. 四元數{η,ε}對應旋轉矩陣的轉置(逆)的四元數為{η,-ε};

2. 兩個四元數合成公式如下(兩個旋轉矩陣相乘后對應的四元數):

4 參考文獻

《机器人学导论:分析控制及应用》(美)尼库 著

《机器人学导论》(美)克来格 著

《机器人学导论》(美)约翰 J 卡雷格 著

《机器人学:建模、规划与控制》布鲁诺·西西里安诺、洛伦索·夏维科、路易吉·维拉尼 、朱塞佩·奥里奥洛 著

機器人學總結(1) —— 機器人的描述相关推荐

  1. 機器人學總結(3) —— 雅克比:速度和靜力

    0 前言 前面介紹了機器臂的描述和(正)運動學,這次我們來說微分運動學.運動學是通過關節角度(長度)求解末端笛卡爾位姿的過程.看到微分應該會想到這裡處理的是速度之間的關係,微分運動學是通過關節速度(角 ...

  2. 機器人學總結(2) —— (正)運動學

    0 前言 前面我們對機器人的描述做了說明,本節介紹運動學.運動學是通過關節參數求解末端的笛卡爾參數的過程.這裡說的運動學一般也叫正運動學,因為他的逆過程叫逆運動學(通過笛卡爾參數求解關節參數.) 機械 ...

  3. 機器人學總結(4) —— 逆運動學

    0.前言 逆運動學,是通過操作空間(笛卡爾空間)的位姿,求解關機空間的關節參數的過程.把它放在雅克比後面,是因為有些逆運動學算法需要用到雅克比矩陣.處理逆運動學的方法很多,我們這裡介紹一些常用的方法. ...

  4. 潭州python学院12306案例_人工智慧時代來臨,潭州教育開設Python課程帶學員入門機器學習...

    當今時代,隨著人工智慧科技的飛速發展,人工智慧逐漸深入社會生活生産的方方面面.根據<2019中國人工智慧發展報告>相關數據顯示,人工智慧行業的融資規模呈上升趨勢.在當紅的人工智慧領域,機器 ...

  5. java书籍 李清华_201772020113 李清華《面向對象程序設計(java)》第18周學習總結...

    1.實驗目的與要求 (1) 綜合掌握java基本程序結構: (2) 綜合掌握java面向對象程序設計特點: (3) 綜合掌握java GUI 程序設計結構: (4) 綜合掌握java多線程編程模型: ...

  6. 大一上學期學習生活情況總結

    在本學期各科都已結課的某個夜裏,我開始寫我的這份總結.說實話,我真的很喜歡夜的這種安靜--靜能生慧. 我是高二下學期開始與計算機結緣,好吧,接觸的比較晚啦.但這並不妨礙我對它的興趣.從基礎的開始,到W ...

  7. java %3cbr%3e字符替换,Java 網絡編程之 (完全總結)

    TCP TCP,傳輸控制協議(Transmission Control Protocol),是面向連接的通信協議.它提供兩台計算機之間的可靠無差錯的數據傳輸.應用程序通過 TCP 進行通訊時,數據源和 ...

  8. 工作總結工作展望(PPT)

    今天中午都沒有休息,為了趕工下午的工作總結&工作展望報告,報告寫萬了,內容如下: 1.報告目錄 2.組織功能概況 3.現有系統狀況及服務對象 4.2009專案狀況 5.WIN/LOSS 6.個 ...

  9. 數據庫ORACLE轉MYSQL存儲過程遇到的坑~(總結)

    ORACLE數據庫轉MySQL數據庫遇到的坑 總結 最近在做Oracle轉mysql的工程,遇到的坑是真的多,尤其是存儲過程,以前都沒接觸過類似的知識,最近也差不多轉完了就總結一下.希望能幫到一些人( ...

最新文章

  1. android 虚方法,尝试在空对象引用上调用虚方法’android.view.View android.view.View.getRootView()’...
  2. UNIX中的Select函数
  3. netstrem获取302后的地址,可用来截图,加载实际跨域文件
  4. boost::uuids::entropy_error相关的测试程序
  5. How to be a great Project Director
  6. JAVA_WEB--jsp概述
  7. 【bzoj1911】 Apio2010—特别行动队
  8. 一个很不错的开发管理中文个人网站
  9. php动态生成页面结构,PHP 动态生成静态HTML页面示例代码
  10. C#利用QrCode.Net生成二维码(Qr码)
  11. 配置zabbix当内存剩余不足10%的时候触发报警
  12. Photoshop CS2 视频教程-PS自定义形状工具(转)
  13. IOS - 苹果微信不打开收不到新消息提醒怎么办?
  14. Excel-VBA 快速上手(三、数组和字典)
  15. 20sccm_SCCM安装及配置过程总结
  16. 身份证图像识别api
  17. Seq2Seq模型中的集束搜索(Beam Search)
  18. 软考 案例分析__预测
  19. Pillow的使用-Image篇
  20. 财务自由之路--笔记

热门文章

  1. Nike的虚拟运动鞋,致敬Air Force 1
  2. native转ascii工具(复制成html文件即可用)
  3. Android篇:2019初中级Android开发社招面试解答(下)
  4. 解决在VMware上安装windows10全屏有黑边的问题
  5. 采用面向对象方法开发软件,通常需要建立三种形式的模型
  6. 有哪些实用的礼物、520礼物清单推荐
  7. 请查收你的专注力挑战
  8. js insertBefore
  9. python中.find函数的使用方法及实例_python 如何使用find和find_all爬虫、找文本的实现...
  10. 什么软件能给图片去雾