MATLAB中的機械臂算法——動力學

2021-02-18 國際工業自動化

2. Robotics System Toolbox(RST)中的動力學算法

前面,我們講了機械臂的運動學(kinematics):正向運動學和反向運動學。正向運動學指的是在已知機械臂各個關節角度的情況下,推算end-effector(機械臂終端)的位置和方向(合稱pose)。反向運動學指的是在已知end-effector的位置和方向,推算各個機械臂的關節角度。我們主要研究反向運動學。

讓我們看一下基於反向運動學的控制邏輯圖:

在給出機械臂的end-effector的pose後,反運動學模塊計算出各個關節所需要的角度,然後通過電機產生力矩(torque)去執行。在此期間,通過反饋(feedback)去消除一些控制誤差。

這些我們暫且稱之為disturbance(幹擾),當然有些「幹擾」是我們故意要求的,比如說需要按照預設軌跡的速度運行。加入「幹擾」後的示意圖如下

如果我們能提前計算出來這些「disturbance」,然後在控制環路中將它「抵消」(有時候也叫前饋控制)。這樣,就能使得機械臂「完美」運行了。讓我們再改一下控制邏輯圖:

acceleration

為了計算這些「disturbance」。我們需要考慮幾個因素

有了這些因素,我們可以通過數學方法u=M(q)qdd + C(q,qd)qd + G(q)求出所需要的力矩,其中M項代表克服了機械臂的加速度慣量以及不同連杆之間的慣量影響所需力矩、C項代表了克服科裡奧利力和離心力所需力矩、G項代表了克服地球引力力矩。

其中Inverse Dynamics叫做反向動力學,它的作用是輸入想要的關節速度(qd)、關節加速度(qdd)、關節角度(q),輸出為每個關節所需要的力矩(u)。當然也有正向動力學 (forward dynamics),它的作用和反向動力學相反,輸入關節角度(q)、關節速度(qd)、每個關節的力矩(u),輸出為每個關節的加速度(qdd)。

上述的控制邏輯圖,是一個「前饋控制」的例子,它的作用是預先計算出所需的力矩,輸入給控制器,「反饋」的存在是為了消除一些誤差,例如摩擦力和其他噪音。

總之,我們需要這麼一個「動力學」模型,使得我們可以抵消各種不同的「disturbance」的影響 --- 慣量、地球引力、科裡奧利力和離心力等等。另外,實際電機的功率是有限的,通過反向動力學我們也可以準確知道電機需要提供多少力矩,從而為電機選型提供參考依據。

下圖初略表示了end-effector – inverse kinematics –inverse dynamics之間的關係:

Robotics System Toolbox(RST)提供了動力學方面的函數和Simulink block。

MATLAB函數

Simulink block

讓我們看一個簡單的例子:這是一個工作在2D空間的機器人。標明了各個結構件的質量、長度和重心。在靜止狀態下,兩個關節分別需要多大的力矩去抵消地球引力並支撐起這個機器人?

我們先一步步地構造這個機器人:

%% create rigid body tree

robot = robotics.RigidBodyTree;

%%create body1

body1 = robotics.RigidBody("body1");

joint1 = robotics.Joint('joint1','revolute');

body1.Joint = joint1;

%%create body2

body2 = robotics.RigidBody("body2");

joint2 = robotics.Joint('joint2','revolute');

tform = trvec2tform([1,0,0]) %length of body1

setFixedTransform(joint2,tform);

body2.Joint = joint2;

%%create body3

endEffector = robotics.RigidBody('endEffector');

joint3 = robotics.Joint('joint3','fixed');

tform = trvec2tform([1,0,0]) %length of body2

setFixedTransform(joint3,tform);

endEffector.Joint = joint3;

%%add bodies to the tree

addBody(robot,body1,'base');

addBody(robot,body2,'body1');

addBody(robot,endEffector,'body2');

robot.Gravity = [0,-10,0]; % in y direction

%define inertia properties

%mass

robot.Bodies{1}.Mass = 1; %body1

robot.Bodies{2}.Mass = 1; %body2

robot.Bodies{3}.Mass = 0.5; %end effector

%center of mass

robot.Bodies{1}.CenterOfMass = [0.5 0 0]; %body1

robot.Bodies{2}.CenterOfMass = [0.5 0 0]; %body2

robot.Bodies{3}.CenterOfMass = [0 0 0]; %end effector

%zero inertia assuming point of mass

robot.Bodies{1}.Inertia = [0 0 0 0 0 0]; %body 1

robot.Bodies{2}.Inertia = [0 0 0 0 0 0]; %body 2

robot.Bodies{3}.Inertia = [0 0 0 0 0 0]; %end effector

然後在速度和加速度都是0的情況下,調用inverseDynamics函數算出力矩:

%% inverse dynamics

robot.DataFormat='row';

q = [pi/3 -pi/3]; % angles

dq = [0 0]; %velocity

ddq = [0 0];%acceleration

tau = inverseDynamics(robot, q, dq, ddq);

tau =

我們也可以用gravityTorque這個函數試一下,結果是相同的。

gravTorq = gravityTorque(robot,q);

如果我們將速度或者加速度改變一下,看看力矩的變化,例如:

dq = [1 1]; %velocity

ddq = [2 2];%acceleration

tau = inverseDynamics(robot, q, dq, ddq);

相應地,所需力矩也增大了。

在MATLAB Central File Exchange上搜索「Designing Robot Manipulator Algorithms」。

這是一個機械臂按運動軌跡抓取物體的例子:

在前面運動學算法中,我們也介紹了這個例子。當時我們用反向運動學(inverse kinematics)去計算end-effector的位置。這次我們用力矩控制的方式來重新看一下這個問題。這裡有兩種方式供參考:

1: Inverse Kinematics + Joint Space Controllers

首先,inverse kinematics根據end-effector的位置,計算出各個關節(電機)所需要的角度位置,然後交給各個關節的電機去執行。由於關節控制的是角度。所以叫Joint Space Control (即關節角度控制)。

前饋部分(feedforward)負責計算出所需力矩(用來抵消重力,按預定軌跡運動等等)。

反饋部分(feedback)用PID去消除誤差。

2: Task Space Controller

這個做法是直接控制end-effector的位置,並用PID去消除end-effector的位置誤差。也叫做task space control,即直接控制在XYZ空間(也叫笛卡爾坐標的位置)。

Computed Torque Control

有了機械臂的動力學模型(dynamic model),我們可以應用的控制方法有很多種。通常來說,反饋是必要的 – 可以消除控制誤差和一些噪音。從力矩計算的角度來看,可以做

Simulink提供dynamics方面的blocks,可以方便地搭出computed torque controller:

computed torque controller的輸入qd,預設的機械臂關節要達到的角度 (desired q)

ddqd,預設的機械臂關節要達到的加速度

computed torque controller的輸出

有了computed torque controller我可以做出比較複雜的控制系統,例如一方面要求機械臂按預定的trajectory(含角度、速度、加速度等信息)運行;一方面又要求機械臂遭受外力幹擾後改變運行軌跡(trajectory)。讀者如果感興趣,可以看MATLAB自帶的「Perform Safe Trajectory Tracking Control Using Robotics Manipulator Blocks」這個例子。機械臂在碰到遮擋的硬物,改變預設的運行軌跡,保證運行安全。

關注MathWorks訂閱號

學習更多MATLAB機械臂算法知識

相關焦點

  • 乾貨 機械臂的動力學(一):牛頓歐拉法
    》中,我們講了動力學要研究的幾個問題、以及研究動力學有什麼用。剛體動力學(Rigid body dynamics)我們知道,機械臂是由關節和連杆組成的:關節能夠對它所連接的連杆在特定方向施力;連杆則是有質量、有大小(所以慣性張量不可忽略)、不會變形的剛體。由此可見,機械臂動力學的實質就是剛體動力學。
  • 實例介紹機械臂運動規劃及前沿研究方向(附PPT+視頻)|雷鋒網公開課
    一般來說,軌跡規劃用於無人車/無人機領域,而運動規劃主要用於機械臂,類人機器人領域。關於運動規劃的具體定義,雷鋒網新智造本期公開課特邀請到上海交通大學機械與動力工程學院博士生邱強為我們做詳細的講解。邱強目前研究方向為機械臂運動規劃,除了講解什麼是運動規劃,還會介紹他做的機器人規劃實例。同時,他還會講解目前關於運動規劃都有哪些前沿研究方向。
  • MATLAB中的數據插值函數
    指定的算法method計算二維插值。linear為雙線性插值算法(默認算法),nearest為最臨近插值,spline為三次樣條插值,cubic為雙三次插值。griddata函數功能 數據格點格式(1)ZI = griddata(x,y,z,XI,YI)用二元函數z=f(x,y)的曲面擬合有不規則的數據向量x,y,z。
  • 邊做邊思考,谷歌大腦提出並發RL算法,機械臂抓取速度提高一倍
    這一假設在仿真環境中很容易實現,然而在真實機器人控制當中並不成立,很可能導致控制策略運行緩慢甚至失效。為緩解以上問題,最近谷歌大腦與 UC 伯克利、X 實驗室共同提出一種並發 RL 算法,使機器人能夠像人一樣「邊做邊思考」。目前,該論文已被 ICLR 2020 接收。
  • 代寫程序代做C++ Java matlab python php留學生設計代碼編程
    以下為最近100個做過的案例:1、代做abaqus橡膠組件的動力學分析可以做嗎2、代做三千以上,收集150個類別的草圖,每個類3、代做基坑支護巖土參數優化分析,有亮點4、代做fluent 動網格仿真5、代做用ABAQUS裡面的SPH方法來做一個壓縮實驗
  • MATLAB課程之第五章 走入算法(1)
    大一的學生在學matlab的時候,一般都接觸了C語言,我在課堂上就將這兩種語言進行了比較。怎麼比較?通過編程來舉例說明。
  • 一隻機械臂的故事
    而它的操作卻很簡單,可以用手機、滑鼠,通過語音識別、手勢演示,甚至是不可思議的腦電波——這款DOBOT品牌的機械臂來頭不小:曾斬獲「世界三大設計獎」之紅點獎、iF設計獎,登上過2019年央視春晚深圳分會場的舞臺,連著名導演張藝謀也對它情有獨鍾,甄選其在觀念演出《對話·寓言2047》中與人共舞。
  • 基於matlab的RBFNN的kmeans算法研究
    最後用層次聚類算法改進的kmeans算法在matlab中預設徑向基函數神經網絡,該網絡徑向基函數的數目、徑基函數的中心和寬度以及隱含層和輸出層之間的連接權值有算法的聚類結果確定,此方法徑向基函數神經 網絡的穩定性和高效性。
  • 基於Matlab/Simulink的風力機特性仿真
    摘要:本文選擇參考文獻2中的風能的功率係數Cp進行分析,採用遺傳算法進行最大功率係數Cpmax求解,並通過對參考文獻1中的風能的功率係數Cp求解驗證其算法求解的合理性。因為變速系統成本在大型風力發電機組中佔得比例小,所以今後大力發展變速恆頻技術是風力發展的必然趨勢。本文通過遺傳算法計算最佳葉尖速度比 和最大風能的功率係數Cp,並在 matlab/Simulink中對變速風力發電機的風力機進行靜態仿真,為建立合理的變速風力發電系統作準備。
  • 設計創意學院「機械臂音畫糖人」亮相濱江人人市集
    在近日舉辦的濱江人人市集上,同濟大學設計創意學院機械臂實驗室帶來的「機械臂音畫糖人」攤位前遊客絡繹不絕。市集上,頗受歡迎的「機械臂音畫糖人」項目是設計創意學院機械臂實驗室的同學們在鄭康奕老師的帶領下完成的一次團隊實踐。項目採用新技術融入聲音交互等形式向中國傳統老手工藝——糖畫致敬,是一次基於機器臂探索科技與藝術相結合的應用場景與實驗性嘗試。
  • 基於Matlab的傳染病動力學模型仿真平臺
    此前,經濟政策模擬研究瞎胡鬧團隊,在無視前期SARS、禽流感等相關研究和藥物發現成果基礎上,近期針對如何抵抗nCoV方面取得重大發現。通過學習建模,例如Matlab語言來編程,開發病毒傳播動力學的模擬程序,一是可以安心居家,大力避免和各類病毒接觸的機會;二是碼農生活更為容易誘發禿頭怪,頭髮光了,病毒自然無法入侵;三是寫代碼的同時,輔之以綠茶一杯,明目的同時,亦可有效預防病毒入侵;四是寫程序苦思冥想、口乾舌燥之餘,可以再來點雙黃蓮蓉月餅大補……綜上所述,#學習建模可抑制新型冠狀病毒#
  • 機械臂「豹咖啡」上崗新聞中心
    獵豹移動旗下的機械臂咖啡——「豹咖啡」,作為展會期間唯一的無人咖啡亭,將為4000 多名媒體記者提供服務。忙碌的報導之餘,一分半的時間,大家就可以享受到一杯機器人製作的可以和金牌大師媲美的咖啡。       此外,獵豹機器人家族還有多臺服務機器人「豹小秘」活躍在各展館、論壇,為與會嘉賓提供專業的接待服務。
  • 機器人公司研發K12教育機械臂,布局AI教育市場
    10月15日,深圳市越疆科技有限公司(以下簡稱越疆科技)在深圳舉行了以「智在臂得」為主題的新品發布會,隆重發布了專為K12教育市場定製的智能機械臂DOBOT Magician Lite。安全,越疆科技將其協作機器人的領先技術集成到DOBOT Magician Lite上,使其成為支持碰撞檢測的桌面級教育機械臂,給學生提供安全的教學環境;高精度,秉承了越疆高精度的設計理念,可以達到0.2毫米的精度這樣的精度基本上可以滿足學生基本上的創意,小到穿針引線,大到繪圖;靈活移動,負載了0.25KG的重量,這也基本上滿足了老師在教學場景中的負載重量。
  • 算法1-KNN算法及其matlab實現
    收錄於話題 #matlab 一、算法概述1、kNN算法又稱為k近鄰分類(k-nearest neighbor classification)算法。
  • 機械振動與結構動力學
    當然我們學力學人而言,最重要的不是去回憶地震的慘烈,而是掌握好結構動力學來減少地震的危害(文章最後有如何獲得克拉夫的《結構動力學》中英文版的辦法)。 5·12汶川地震,發生於北京時間(UTC+8)2008年5月12日(星期一)14時28分04秒,根據中華人民共和國地震局的數據,此次地震的面波震級:芮氏規模達8.0Ms、矩震級達8.3Mw,地震烈度達到11度。
  • 機械專業的畢業生的出路在哪?
    機械專業的課程體系很複雜,涉及到力學、數學、電學、製造學等,這些都是基礎學科,不像計算機編程那樣有很強的變現能力,同時,機械行業的整體不景氣,導致機械行業的薪資較低,那機械專業的職業生涯怎麼規劃呢?對於畢業後想繼續從事機械行業的學生,紮實的基礎知識和靈活的動手能力絕對是日後騰飛的翅膀,畫圖、機械設計、加工工藝、編程這些都有可能成為事業的起點,而且從實踐中發現問題,解決問題,才是真正的學以致用的開始。
  • 【論文精選】立體苗盤搬運機器人機械臂優化
    根據植物工廠作業任務需求,對立體苗盤管理機器人的機械臂進行了參數優化設計,使其作業性能達到最優,以提高作業效率,減少投入成本。這種機器人主要由平移機構、迴轉機構、升降機構、機械臂、視覺系統、噴灑系統和控制系統七部分組成,能夠實現秧苗盤的層間搬運和秧苗的定點定量噴灑。由於具有較高的可升降軀幹機構,機器人在完成高空作業時,能夠不受立體苗盤層數和高度限制。
  • matlab中的歸一化處理的三種方法
    歸一化用到最多的應該是在聚類分析和網絡訓練中,為什麼要用歸一化呢?這是為了消去不同量綱對結果的影響。在matlab裡面,用於歸一化的方法共有三種:(1)premnmx、postmnmx、tramnmx(2)prestd、poststd、trastd(3)mapminmax(4)是用matlab語言自己編程。
  • 「天才少年」稚暉君調戲機械臂!加上AI視覺,2小時學會抓螺母
    沒想到,時隔一個半月,華為天才少年稚暉君的「機械臂Dummy」系列又更新了!這次,稚暉君用Dummy做了個簡單的AI視覺抓取demo,讓機械臂Dummy學會了用機械臂抓取螺母。  機械臂好不容易將螺母放上去,又被稚暉君拿了下來。
  • 學習matlab必去的10大網站
    涵蓋內容包括編程與應用程式開發、圖像處理與計算機視覺、信號處理與通信、建模與仿真以及控制與算法設計等,可謂是應有僅有,不管菜鳥還是老鳥,都能從這裡找到適合自己學習的東西。不少File Exchange中的代碼都是託管在Github中,還等什麼,快去試試吧!