1. 程式人生 > >【機器人學】機器人開源專案KDL原始碼學習:(6)笛卡爾空間軌跡規劃、圓弧過渡、姿態插值、梯形速度、pathlength

【機器人學】機器人開源專案KDL原始碼學習:(6)笛卡爾空間軌跡規劃、圓弧過渡、姿態插值、梯形速度、pathlength

  本文的內容是對另一篇文章(連結)的補充,對Trajectory_example.cpp涉及到的原理作一些簡單的講解,主要內容是:
  (1)機器人路徑規劃圓弧過渡的原理;
  (2)機器人路徑規劃梯形波的原理;
  (3)機器人末端姿態插值的方法(角-軸);
  (4)KDL使用了pathlength的概念並簡述插值的方法。

1 圓弧過渡

  機械臂末端從起點A到終點F,中間需要經過若干個中間點(B-E)。首先將所有的點,按順序用線段連線起來,若兩段相鄰的線段出現較大的轉折,則對兩段線段作圓弧過渡。


這裡寫圖片描述

圖1 初步用線段連線

這裡寫圖片描述


圖2 圓弧過渡

  程式見Path_RoundedComposite::Add(const Frame& F_base_point)

2梯形波的原理

  以一維空間裡的位移規劃為例,若要使質點從起點到終點滿足梯形的速度規律,需要知道的引數為(1)兩點之間的位移的距離 ;(2)最大的速度的值 ;(3)加速度的值 ;由於引數選擇的差異,可能會出現以下兩種波形如圖3,一種是完整的梯形波,一種是不完整的梯形波:


這裡寫圖片描述


圖3 兩種梯形波

L
(t)=a1+a2t+a3t2b1+b2t+b3t2c1+c2t+c3t2t<t1t1<t<t2t2<t<duration
式(1)
其中:
a3=a2;a2=0;a1=s0;b3=0;b2=a2+2a3t12b3t1;b1=a1+(a2+a3t1)t1(b2+b3t1)t1;c3=a2;c2=b2+2b3t22c3t2;c1=b1+(b2+b3t2)t2(c2+c3t2)t2;

  兩種情況都可以使用式(1)來對t時刻的位移值進行計算,這也是插值的基礎。
  程式見:

void VelocityProfile_Trap::SetProfile(double pos1,double pos2);

 double VelocityProfile_Trap::Pos(double time) const

3姿態插值

  對位移進行插值比較清晰,對剛體的姿態插值則是難點。KDL使用“角-軸”的方法對剛體的姿態進行插值。
角-軸表示姿態:我們知道,給定兩個在笛卡爾空間中具有相同原點不同姿態的起始座標系和終點座標系,總可以確定一個單位向量,使得可以通過起始座標系繞單位向量的軸,旋轉一個合適的角度得到終點座標系。
  令 Ri Rf 分別表示起始座標系和終點座標系的旋轉矩陣,那麼這兩個座標系之間的旋轉矩陣可以通過(2)式來計算得出:

R=RTiRf=r11r21r31r12r22r32r13r23r33(2)

  如果使用矩陣 Rt(t) 來表示 Ri

相關推薦

機器人學機器人開源專案KDL原始碼學習6空間軌跡規劃圓弧過渡姿態梯形速度pathlength

  本文的內容是對另一篇文章(連結)的補充,對Trajectory_example.cpp涉及到的原理作一些簡單的講解,主要內容是:   (1)機器人路徑規劃圓弧過渡的原理;   (2)機器人路徑規劃梯形波的原理;   (3)機器人末端姿態插值的方法(角-軸);   (4)KDL

機器人學機器人開源專案KDL原始碼學習8KDL的精髓

  首先說一下我的心得: 1. 我認為KDL的精髓是Spatial Vector,結合C++等面向物件的語言可以寫出較好的軟體。 2. 直接閱讀KDL程式碼不適合初學者學習機械臂動力學。 3. 要學習機械臂動力學的話應首先閱讀使用3維向量推導公式的文獻,也就是線速度和角速度獨立分析

機器人學機器人開源專案KDL原始碼學習4機械臂逆動力學的牛頓尤拉演算法

  機械臂的逆動力學問題可以認為是:已知機械臂各個連桿的關節的運動(關節位移、關節速度和關節加速度),求產生這個加速度響應所需要的力/力矩。KDL提供了兩個求解逆動力學的求解器,其中一個是牛頓尤拉法,這個方法是最簡單和高效的方法。    牛頓尤拉法演算法可以分為三個步驟: step1:

機器人學機器人開源專案KDL原始碼學習7examples中的CMakeList.txt檔案解讀

通過學習KDL開源專案的程式碼可以學習CMake構建程式的知識,現簡單介紹一下orocos_kinematics_dynamics-master\orocos_kinematics_dynamics-master\orocos_kdl\examples\CMakeList.txt檔案的指令。

機器人學機器人開源專案KDL原始碼學習5KDL如何求解幾何雅克比矩陣

這篇文章試圖說清楚兩件事:1. 幾何雅克比矩陣的本質;2. KDL如何求解機械臂的幾何雅克比矩陣。 一、幾何雅克比矩陣的本質 機械臂的關節空間的速度可以對映到執行器末端在操作空間的速度,這種對映可以通過一個矩陣來描述,就是幾何雅克比矩陣,瞭解雅克比矩陣需要了解這種對映關係的本質,這

機器人學機器人開源專案KDL原始碼學習3機器人操作空間路徑規劃(Path Planning)和軌跡規劃Trajectory Planning示例

很多同學會把路徑規劃(Path Planning)和軌跡規劃(Trajectory Planning)這兩個概念混淆,路徑規劃只是表示了機械臂末端在操作空間中的幾何資訊,比如從工作臺的一端(A點)沿直線移動到另一端(B點)。而軌跡規劃則加上了時間律,比如它要完成的任務是從A點開始到B點結束,中間

mxGraph原始碼學習6mxGraphModel

1. 概覽 mxGraphModel繼承自mxEventSource以實現graph model。graph model是負責儲存graph資料結構的包裝器。graph model充當事務包裝器,其中包含所有更改的事件通知,而cell包含用於更新實際資料結構的原

mxGraph原始碼學習5mxGraph

由於mxGraph原始檔有一萬多行,且涉及很多其它原始檔,所以重點在於瞭解mxGraph的作用、結構以及定義了哪些方法 1. 概覽 1.1 作用 mxGraph繼承自mxEventSource以實現基於Web的圖形元件的功能性方面。要啟用平移和連線,使用se

mxGraph原始碼學習7mxCell

1. 概覽 mxCell是graph model的元素。它們表示graph中的group、vertex和edge的狀態。 對於自定義屬性,建議使用XML節點作為cell的值。以下程式碼可用於建立具有XML節點的cell作為值: var doc = mxUtils

mxGraph原始碼學習2mxClient

1. mxClient.js檔案 mxClient.js是客戶端的引導機制,此檔案include了執行mxGraph所需的所有原始檔,並載入了其依賴的資原始檔,以及配置了客戶端的語言。 意思就是隻要在需要使用mxGraph的地方用<script>標籤

SimplifyReader原始碼學習音樂播放功能總結

寫在前面: SimplifyReader是我第一個用心研究原始碼的app,在這裡首先感謝開原始碼的分享者。 這也是我的第一篇部落格,希望可以記錄下來學習中的經驗和總結。也歡迎大家指正錯誤,共同進步。 最後,分享給大家

AndroidAndroid開源專案音樂播放器原始碼彙總

作為一個有追求的程式設計師來說,專案原始碼必須看,但是網上那麼多資源是不讓你無從下手啊,博主今天為大家推薦五個經典專案吧。 一、android-UniversalMusicPlayer 這個開源專案展示瞭如何實現一個橫跨各種Android平臺的音樂播放器,包

Qt通過QtCreator原始碼學習Qtpro檔案

1、學習目的 學習pro檔案的語法規則,這在跨平臺專案中會經常用到。和條件編譯相似,在pro中可以根據平臺選擇不同的編譯模組、檔案,還可以向原始碼中傳遞變數等。 2、學習方法 通過學習QtCreator原始碼中的pro檔案,來掌握pro檔案語法規則,下面以qtcreator.

TensorFlow 聊天機器人開源專案評測第一期DeepQA

聊天機器人開源專案評測第一期:DeepQA 用 i5 的筆記本早上執行到下午,跑了 3 輪的結果,最後效果並不理想。官方預設是 30 輪,3 輪太少了,稍後用 GPU 跑了繼續更新。 1.可以順利執行,並沒有 Tensorflow 版本問題。 我的環境

bash: ssh: command not found解決方法linux

inux 配置 pan html clas client oop post bash 原文轉自:http://www.cnblogs.com/ahauzyy/archive/2013/04/25/3043699.html 今天在搭建hadoop的開發環境中,用的是ce

雲安全與同態加密_調研分析6雲計算及雲安全主流體系架構與模型——By Me

不同的 同態 示意圖 提供者 nis 管理 ati 分享 style 雲計算及雲安全的主流體系架構與模型 1. 雲計算主流安全參考模型 1.1 雲計算安全參考模型

轉載Apache Spark Jobs 性能調優

放棄 instance bar 並行處理 defaults 執行 .exe nag 原則 調試資源分配 Spark 的用戶郵件郵件列表中經常會出現 “我有一個500個節點的集群,為什麽但是我的應用一次只有兩個 task 在執行”,鑒於 Spark 控制資源使用的參數的數

轉載Apache Spark Jobs 性能調優

功能 dso brush 數據結構 nsf 必須 char dal 開始 當你開始編寫 Apache Spark 代碼或者瀏覽公開的 API 的時候,你會遇到各種各樣術語,比如 transformation,action,RDD 等等。 了解到這些是編寫 Spark 代碼

模板前向星 SPFA求最短

代碼 poj ostream name 兩個 col spfa ron esp 之前一個改自別人的模板竟然在一道題上TLE了,而代碼也實在醜陋,網上找得到的模板也大多跑得慢(vector存圖)或代碼醜陋、殘疾(無初始化函數的模板能叫模板嗎?),索性自己重新寫了一個。 題是P

轉載TCP粘包問題分析和解決

刪除 而且 實例 報文 底層 nagle 存在 ngxin 想想 TCP通信粘包問題分析和解決(全) 在socket網絡程序中,TCP和UDP分別是面向連接和非面向連接的。因此TCP的socket編程,收發兩端(客戶端和服務器端)都要有成對的socket,因此,發送端為了將