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

2021-03-01 國際工業自動化

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機械臂算法知識

相關焦點

  • 機械臂公司越疆科技宣布完成1億元A+輪融資 |尋找中國創客
    新京報快訊(記者 蔡浩爽)6月28日,輕量級智能機械臂公司越疆科技正式宣布完成由松禾資本領投的1億元
  • 實例介紹機械臂運動規劃及前沿研究方向(附PPT+視頻)|雷鋒網公開課
    一般來說,軌跡規劃用於無人車/無人機領域,而運動規劃主要用於機械臂,類人機器人領域。關於運動規劃的具體定義,雷鋒網新智造本期公開課特邀請到上海交通大學機械與動力工程學院博士生邱強為我們做詳細的講解。邱強目前研究方向為機械臂運動規劃,除了講解什麼是運動規劃,還會介紹他做的機器人規劃實例。同時,他還會講解目前關於運動規劃都有哪些前沿研究方向。
  • matlab代寫hmm算法程序(隱馬爾科夫模型)需要注意什麼?
    目前已有svm/rf算法,預測準確率大概為85%左右。我要做的就是把svm/rf算法的輸出,作為hmm算法的輸入,然後來預測行為。1.Svm/rf算法的輸出也是預測意圖,我想通過hmm算法結合svm/rf的輸出得到更好的預測結果。
  • 一隻機械臂的故事
    而它的操作卻很簡單,可以用手機、滑鼠,通過語音識別、手勢演示,甚至是不可思議的腦電波——這款DOBOT品牌的機械臂來頭不小:曾斬獲「世界三大設計獎」之紅點獎、iF設計獎,登上過2019年央視春晚深圳分會場的舞臺,連著名導演張藝謀也對它情有獨鍾,甄選其在觀念演出《對話·寓言2047》中與人共舞。
  • 碳纖維機械臂是否可以替代傳統金屬材料機械臂
    此外,一些自動檢測裝置、管路、冷卻裝置等也都會安裝在機械臂上,由於機械臂是一個典型的懸臂梁結構,自身的質量會嚴重影響金屬機械手臂的定位精度和運行效率。碳纖維是一種強度高、重量輕的高性能纖維,其比重比鋁還輕,不到鋼的1/4,比強度是鐵的20倍。抗拉強度在鋼的7-9倍以上,耐酸鹼腐蝕,且不易變形,能夠長期適應惡劣環境。
  • 基於蟻群算法求解函數的最大最小值的Matlab源碼「肥波貓」
    基於蟻群算法求解函數的最大最小值的Matlab源碼「肥波貓」上一篇基於遺傳算法求解函數的最大最小值的Matlab源碼「肥波貓」,本次用蟻群算法同樣可以解決。蟻群算法最早是由Marco Dorigo等人在1991年提出,他們在研究新型算法的過程中,發現蟻群在尋找食物時,通過分泌一種稱為信息素的生物激素交流覓食信息從而能快速的找到目標,據此提出了基於信息正反饋原理的蟻群算法。
  • 加拿大的Canadarm3機械臂
    加拿大是國際公認的太空機器人的引領者,其設計製造的機械臂Canadarm1是第一個進入太空的加拿大機械臂,自1981年首次在太空梭上測試和使用。2001年Canadarm2一直在為國際空間站服務。Canadarm3機械臂設想圖目前數百家加拿大公司將參與建造Canadarm3機械臂,以配合Artemis任務和未來的載人深空飛行任務
  • Arduino四軸機械臂
    過去的一年小夥伴在QQ群內提了不少問題,其中最多應該是如何製作機械臂了。《利用舵機製作簡單機械臂》這篇文章已經發布了幾年,它是基於STC單片機開發的三軸機械臂,有不少小夥伴也根據它製作出自己的機械臂,甚至還有人用它參加電子製作大賽獲得名次。顯然大家對機械臂還是比較感興趣的。當然也有小夥伴覺得控制舵機的單片機程序有些複雜,不好理解,那麼下面e哥就介紹如何利用Arduino更加簡便的製作機械臂。
  • 蟻群算法即相關代碼實現詳解—matlab之智能算法
    蟻群算法即相關代碼實現詳解 一.算法背景 蟻群算法是近年來剛剛誕生的隨機優化方法,它是一種源於大自然的新的仿生類算法.由義大利學者Dorigo最早提出,螞蟻算法主要是通過螞蟻群體之間的信息傳遞而達到尋優的目的,最初又稱蟻群優化方法(Ant Colony
  • 算法工匠MATLAB專訓營:Matlab繪圖,小試牛刀
    在本次課中我就給出了一個實用的算法程序,程序名是dqpsk_IF_wholeframe_Release.m。那麼這個程序和網上的順序有什麼差別呢?可以明確的說網上的程序大多就是一個理論仿真,根本不考慮實際環境的因素。那這樣的程序是培養不了大家的算法思維的。
  • 可升級殘疾人機械臂,助他們完成日常生活
    近日,一款安裝在輪椅上的機械手臂發布了正式測試版本,主要是為了部分殘疾人士能夠自己的完成日常生活當中的一些動作,並且現在這款機械臂也在以色列最先進的青少年康復中心阿林醫院進行試點試用。 機械臂這款機械臂的科研項目主要由埃森哲提供資金和技術支持、英特爾提供神經擬態技術以及Applied Brain Research(ABR)公司提供算法,以色列研究團隊整合多方技術來進行產品測試。
  • 美軍曝光「第三隻臂」外骨骼機械臂
    的輔助機械臂,可大幅減輕士兵作戰負擔,幫助士兵手持突擊步槍等武器,設計理念和外形都十分接近1986年上映的科幻電影《異形2》中的科幻武器。「軍用外骨骼系統」並非新興事物,但輔助機械臂作為一種簡化版的單兵「外骨骼」系統還是頗有創意,本文就此為您解讀。
  • matlab矩陣及其運算(三)
    若您對公眾號有什麼意見或建議,請在公眾號中回復或在任意文章底部留言,我們會第一時間改善改進!有流量的可以直接戳視頻二狗在用matlab學習編程過程中,發現matlab中有大量矩陣運算,矩陣的知識了解不到位,在學習算法的過程中無法找到合適的解決問題的方法或者出現編程錯誤。好比英語發音規則都不懂,如何說一口流利的英語?地基不牢,地動山搖。
  • 結構設計 | 樂高六軸機械臂結構解析
    >這款六軸機械臂是Akiyuki先生的第二代機械臂作品,第一代機械臂創作於2015年,其成品外形如下圖:兩款機械臂都由底座、一級手臂、二級手臂和機械手等結構部分構成。二級機械臂的水平轉動也是由一個大馬達驅動的,橫向轉動由一個中馬達驅動,如下圖所示:
  • 漫威電索的機械臂很強?其實恰恰相反,這條機械臂本質是病毒!
    而為了治療這種機械病毒,在漫畫的原設定中,電索曾經被帶往未來時間線上,利用未來科技進行治療,但效果其實並不明顯,充其量只能做到在原有的感染基礎上,將已經近乎機械化的胳膊,轉化為一條機械臂。
  • 使用Arduino Nano開發板製作手勢控制的機械臂
    這些機械臂可以在裝配線中進行焊接、鑽孔、噴漆等劇烈機械工作的行業中找到,最近還開發了高精度的先進機械臂來執行複雜的外科手術。在之前的文章中,我們3D列印了機械臂,並使用MG995伺服電機製作了機械臂。我們將再次使用相同的3D印表機器人手臂,通過Arduino Nano、MPU6050陀螺儀和彎曲(Flex)傳感器製作手勢控制的機器人手臂。
  • 多體系統動力學與分析動力學專題 | 《力學學報》
    該次會議是中國力學學會動力學與控制專業委員會下屬的3個專業組首次聯合舉辦的全國性會議,後續會議將由3個專業組輪流承辦。會議主席胡海巖院士在致辭中充分肯定了這次聯合會議對促進學科交叉和融合的重要作用。 「多體系統動力學與分析動力學專題」共收錄11篇論文.此專輯涵蓋對分析動力學和多體系統動力學一些基本問題的討論,也包含這些基礎學科在不同工程領域的應用,展現了兩個學科最新的研究進展.在分析力學領域,專輯中的論文不僅包含對傳統變分法的討論,也包含經典的高斯變分原理新的應用場景.專輯中關於自行車動力學問題的討論,充分展示了幾何力學和對稱約化理論在非完整系統穩定性分析中的重要作用
  • 為機械臂裝上大腦的深度學習系統,史上最靈活的機械臂長這樣
    下面讓我們來看看,這個號稱史上最靈活的機械臂究竟長啥樣。 大多數人認為用手去抓取東西是一件非常簡單的事情,但事實並非如此。人的一隻手有20多個自由度,表面布滿的觸覺神經,人手的靈活性及對整個身體的重要性,在大腦看來其實是這樣的:
  • 喬治亞理工學院機械工程機器人方向趙燁團隊招收博士博士後
    然而,長期困擾我們的關鍵問題在於即使是最為先進的運動規劃、決策以及控制算法仍難以讓機器人在複雜、動態、非結構化的環境中安全、有效、長期地運轉。我們更迫切地需要新的算法和理論使機器人從大量的傳感器數據中提取出有效的信息,在有約束的環境中規劃複雜的運動、與人體安全有效地交互,探索動力學以實現敏捷、有效、優雅地行走、操作、抓取、飛行乃至於水下行走等複雜過程。也許在不久的將來,機器人也能像手機、電腦,汽車一樣出現在我們的日常生活裡,為人類服務,有朝一日實現科幻小說家艾西莫夫所提出的「機器人三定律」。
  • matlab中的成型濾波器設計
    matlab 中成型濾波器設計有好幾個函數:rcosineFd=9600;Fs=38.4e3;[num,den] = rcosine(Fd,Fs,'sqrt',0.25);freqz(num);其中的Fd表示輸入數據的採樣率