轉載請先后臺留言,,大家一起支持原創(chuàng),推動機器人使用和發(fā)展 本公眾號對各類ABB機器人應用,,仿真,,畢業(yè)設計提供技術支持,詳細后臺留言 本公眾號誠摯希望與各機器人培訓機構,,機器人使用單元合作,,提供技術支持,詳細后臺留言 1. 機器人只是知道各個軸的角度,,機器人是如何知道當前法蘭盤的XYZ笛卡爾系坐標呢,? 2. 問題一其實就是機器人運動學正解問題,即通過a1-a6角度值,,計算對應的末端工具(此處舉例法蘭盤)坐標值(XYZ ABC) 3. 對于空間一個位姿(位置XYZ,,姿態(tài)ABC)可以通過位姿矩陣表示,,具體參考昨天發(fā)送文章,。 4. 之前介紹過,機器人運動學模型可以通過多種方法構建,,比如最常見的DH參數建模法,,見 機器人DH模型 5. 之前介紹過如何獲取ABB機器人DH 參數,見如何獲取ABB機器人DH參數 6. 此處舉例IRB120機器人,。 7. 通常機器人建模如上圖,,建立Base坐標系(X0Y0Z0),之后依次對應1軸到6軸6個坐標系(x1y1z1….x6y6z6),,通過DH參數來表示這6個動坐標系相對于前一個坐標系的關系(T1-T6),。 8. 對于DH參數,旋轉和平移順序如下:即先繞當前x軸旋轉α度,,再沿新的x軸平移a,,再繞新的Z軸旋轉θ度,再沿新的Z軸平移d 9. 故按照上式定義計算后整理,,可以得到基于DH參數的位姿矩陣如下: 10. 注意到IRB120參數中(如下圖),,首先出現一個KinematicBaseFrames,值不為0,,且坐標系繞大地坐標系的Z軸旋轉180度,,而KinematicBaseFrames和1軸之間數據為0,故此處我們直接用KinematicBaseFrames的值表示坐標系0到坐標系1的變換T01 11. 對后續(xù)各軸DH參數整理如下,,其中的θ為Base中的θ值
根據上表,,可以獲取如下坐標系旋轉關系,下圖中也標明各Link之間的DH參數關系 上表使用方法:先繞當前x軸旋轉α度,,再沿新的x軸平移a,,再繞新的Z軸旋轉θ度,,再沿新的Z軸平移d 12. 利用上述關系,進行機器人運動正解計算,,代碼先獲取當前機器人各關節(jié)位置,,并計算,計算后結果與機器人自身顯示相同,,證明計算過程正確,。 代碼如下: VAR num alpha{6}:=[0,90,0,-90,90,90]; VAR num a{6}:=[0,0,270,70,0,0]; VAR num theta{6}:=[0,90,0,0,-180,0]; VAR num d{6}:=[290,0,0,302,0,72]; !120機器人DH參數 PROC set_matrix(num i,inout num p_mat{*,*}) p_mat:=[[ (cos(theta{i})),- (sin(theta{i})),0, (a{i})], [ (sin(theta{i})*cos(alpha{i})), (cos(theta{i})*cos(alpha{i})),- (sin(alpha{i})),- (sin(alpha{i})*d{i})], [ (sin(theta{i})*sin(alpha{i})), (cos(theta{i})*sin(alpha{i})), (cos(alpha{i})), (cos(alpha{i})*d{i})], [0,0,0,1]]; !將DH參數轉化為位姿矩陣 ENDPROC PROC cal_forward2() VAR pose pose1{6}; VAR pose pose2:=[[0,0,0],[1,0,0,0]]; VAR jointtarget jtmp:=[[0,0,0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]]; jtmp:=CJointT(); curr_angle{1}:=jtmp.robax.rax_1; curr_angle{2}:=jtmp.robax.rax_2; curr_angle{3}:=jtmp.robax.rax_3; curr_angle{4}:=jtmp.robax.rax_4; curr_angle{5}:=jtmp.robax.rax_5; curr_angle{6}:=jtmp.robax.rax_6; !獲取當前各軸角度 theta:=[180,90,0,0,-180,0]; !dh parameter theta initial value FOR i FROM 1 TO 6 DO theta{i}:=theta{i}+curr_angle{i}; ENDFOR set_matrix 1,no_mat_1; set_matrix 2,no_mat_2; set_matrix 3,no_mat_3; set_matrix 4,no_mat_4; set_matrix 5,no_mat_5; set_matrix 6,no_mat_6; !設定位姿矩陣,將當前角度θ傳入 pose1{1}:=MatrixToPose(no_mat_1); pose1{2}:=MatrixToPose(no_mat_2); pose1{3}:=MatrixToPose(no_mat_3); pose1{4}:=MatrixToPose(no_mat_4); pose1{5}:=MatrixToPose(no_mat_5); pose1{6}:=MatrixToPose(no_mat_6); !將位姿矩陣專為Pose數據類型,,也可直接對矩陣進行右乘運算 FOR i FROM 1 TO 6 DO pose2:=PoseMult(pose2,pose1{i}); ENDFOR TPWrite ValToStr(pose2); ENDPROC
******************************** |
|