matlab机器人建立动力学模型,机械臂动力学建模(1)- 建立机器人模型
建立機(jī)器人模型)
機(jī)械臂
參考資料
建模
D-H參數(shù)
建關(guān)節(jié)
建立機(jī)器人
求初始機(jī)械臂狀態(tài),并顯示
改進(jìn)
另一種建模
機(jī)械臂
我使用的aubo的i5機(jī)械臂作為實(shí)驗(yàn)?zāi)繕?biāo),也是用i5的D-H參數(shù)進(jìn)行建模,前期使用matlab機(jī)器人工具箱進(jìn)行仿真,熟悉機(jī)械臂的運(yùn)動(dòng)學(xué)算法,之后再在實(shí)際的機(jī)械臂上實(shí)驗(yàn)。
參考資料
我使用的是matliab機(jī)器人工具箱,具體的一些功能和操作可以參考:
清華大學(xué)出版社的《機(jī)器人仿真與編程技術(shù)》一書
以及我之前關(guān)于matlab機(jī)器人工具箱的7篇博文:
鏈接: 第一篇.等
建模
D-H參數(shù)
首先我們找到aubo_i5的D-H參數(shù):
主要的參數(shù)d與a存入到matlab變量中
d1 = 0.122
d2 = 0.1215
a2 = 0.408
a3 = 0.376
d5 = 0.1025
d6 = 0.094
建關(guān)節(jié)
先熟悉Link:
>> Link
ans =
Revolute(std): theta=q, d=0, a=0, alpha=0, offset=0
根據(jù)D-H參數(shù)建立6個(gè)關(guān)節(jié):
L(1)=Link([pi,d1,0,0],'modified')
L(2)=Link([-pi/2,d2,0,-pi/2],'modified')
L(3)=Link([0,0,a2,pi],'modified')
L(4)=Link([-pi/2,0,a3,pi],'modified')
L(5)=Link([0,d5,0,-pi/2],'modified')
L(6)=Link([0,d6,0,pi/2],'modified')
建立機(jī)器人
robot =SerialLink(L,'name','aubo_i5')
求初始機(jī)械臂狀態(tài),并顯示
T = robot.fkine([0 0 0 0 0 0 ])
title("T")
robot.plot([0 0 0 0 0 0 ])
效果圖:
并且末端位姿為:
T =
1 0 0 0.784
0 0 1 0.2155
0 -1 0 0.0195
0 0 0 1
改進(jìn)
但是到這里,我發(fā)現(xiàn)末端的姿態(tài)并不對(duì),位置信息中x軸信息(0.784)不應(yīng)該存在。機(jī)械臂各個(gè)Link中的theta似乎沒有其作用。我自己嘗試在定義Link的時(shí)候改變theta值,發(fā)現(xiàn)確實(shí)不起作用,只有在fkine求運(yùn)動(dòng)學(xué)正解的時(shí)候賦值(pi,-pi/2,0,-pi/2,0, 0)才會(huì)改變theta:
末端姿態(tài)也變成:
T =
1 0 0 0
0 0 -1 -0.2155
0 1 0 1.008
0 0 0 1
這會(huì)帶來一個(gè)問題,實(shí)際電機(jī)的零位和模型零位不一致。看了Link的定義,發(fā)現(xiàn)theta的初始化受到offset的影響,除了前面的4個(gè)參數(shù)theta, d, a, alpha。第五個(gè)是關(guān)節(jié)類型,0為旋轉(zhuǎn),第六個(gè)就是offset,所以改變定義link的方式:
L(1)=Link([pi,d1,0,0,0,pi],'modified')
L(2)=Link([pi/2,d2,0,-pi/2,0,-pi/2],'modified',-pi/2)
L(3)=Link([0,0,a2,pi],'modified')
L(4)=Link([0,0,a3,pi,0,-pi/2],'modified',-pi/2)
L(5)=Link([0,d5,0,-pi/2],'modified')
L(6)=Link([0,d6,0,pi/2],'modified')
使得Link的參數(shù)變?yōu)?#xff1a;
robot =
aubo_i5:: 6 axis, RRRRRR, modDH, slowRNE
+---+-----------+-----------+-----------+-----------+-----------+
| j | theta | d | a | alpha | offset |
+---+-----------+-----------+-----------+-----------+-----------+
| 1| q1| 0.122| 0| 0| 3.14159|
| 2| q2| 0.1215| 0| -1.5708| -1.5708|
| 3| q3| 0| 0.408| 3.14159| 0|
| 4| q4| 0| 0.376| 3.14159| -1.5708|
| 5| q5| 0.1025| 0| -1.5708| 0|
| 6| q6| 0.094| 0| 1.5708| 0|
+---+-----------+-----------+-----------+-----------+-----------+
此時(shí)各個(gè)關(guān)節(jié)為0時(shí),末端的位姿為:
T =
1 0 0 0
0 0 -1 -0.2155
0 1 0 1.008
0 0 0 1
至此初步建機(jī)器人模型成功
另一種建模
matlab可以直接讀取URDF文件進(jìn)行建模:
robot = importrobot('aubo_i5.urdf')
show(robot )
aubo的urdf模型和模型文件在git上:
鏈接: aubo_description.
在aubo_robot/aubo_description/里面有urdf和模型文件,如果用matlab讀取urdf,需要把urdf中mesh filename屬性修改,指到本地存mesh文件的地方。
修改后運(yùn)行:
具體的可以看我matlab工具箱的第8篇文章
鏈接: 通過URDF建立機(jī)器人模型.
總結(jié)
以上是生活随笔為你收集整理的matlab机器人建立动力学模型,机械臂动力学建模(1)- 建立机器人模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tableau获取筛选器值_认识Tabl
- 下一篇: matlab矩阵 0,matlab ze