您好!欢迎光临工博士商城

ABB机器人集成专营

产品:28    

咨询热线:13127732113

QQ QQ
您当前的位置:首页 » 新闻中心 » ABB机器人|带连杆的机器人正运动学计算
产品分类
新闻中心
ABB机器人|带连杆的机器人正运动学计算
发布时间:2020-06-24        浏览次数:621        返回列表
 

ABB机器人|带连杆的机器人正运动学计算

 

1. IRB1410 机器人为典型的带连杆的ABB机器人,J3电机如图所示。J3电机置于底部,可以减轻上部的机构重量

 

ABB机器人
 

2. 运动时,J3电机带动J3连杆。3轴,J3连杆,上臂和后端连杆构成如图的平行四边形结构。

3. 所以,若2轴电机转动,但3轴电机不转动,此时3轴和大臂的夹角会变化(没有连杆的机器人,2轴电机转动,3轴电机不转动,3轴和大臂夹角不会变化)

 

ABB机器人

ABB机器人


 

以上两幅图片,3轴均为0度,但由于2轴转动,3轴与大臂夹角不一样

4. 对于不带连杆的机器人正运动学,可以通过dh参数转化为各个轴的位姿矩阵,将6个位姿矩阵右乘即可得到当前机器人末端的笛卡尔坐标,具体参见  linktype="2" hasload="1" style="margin: 0px; padding: 0px; text-decoration-line: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); cursor: pointer; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;">机器人如何从各轴角度算出当前XYZ

5. 但对于带连杆机器人,2轴的变化会导致3轴与大臂夹角发生变化。由于平行四边形结构的缘故,实质3轴与大臂夹角变化刚好等于2轴变化角度的负数。

6. 故在位姿矩阵右乘时,只需在右乘到轴3 矩阵后,再右乘一个旋转矩阵,将夹角补偿回来即可。

7. 1410机器人DH参数如下

ABB机器人

 

 

αi   (twist)

ai(mm)  length

Θi  Rotation

di(mm) offset

1

0

0

0

475

2

-π/2

150

-π/2

0

3

0

600

0

0

4

-π/2

120

0

720

5

π/2

0

0

6

π/2

0

0

85

 

8. 针对1410类似带连杆机器人,机器人正运动学RAPID实现方法如下

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
important; overflow-wrap: break-word !important;"> LOCALVAR num alpha{6}:=[0,-90,0,-90,90,90];important; overflow-wrap: break-word !important;">   LOCALVAR num a{6}:=[0,150,600,120,0,0];important; overflow-wrap: break-word !important;">   LOCALVAR num theta{6}:=[0,-90,0,0,-180,0];important; overflow-wrap: break-word !important;">LOCALVAR num d{6}:=[475,0,0,720,0,85];important; overflow-wrap: break-word !important;">!1410 机器人DH参数important; overflow-wrap: break-word !important;">
important; overflow-wrap: break-word !important;">VAR num no_dependent;important; overflow-wrap: break-word !important;">!3轴与大臂夹角important; overflow-wrap: break-word !important;">   PROC test_dh_pose()important; overflow-wrap: break-word !important;">       VAR num curr_angle{6}:=[0,0,0,0,0,0];important; overflow-wrap: break-word !important;">       VAR pose pose10{6};important; overflow-wrap: break-word !important;">       VAR pose pose_cal:=[[0,0,0],[1,0,0,0]];important; overflow-wrap: break-word !important;">       VAR jointtarget jtmp;important; overflow-wrap: break-word !important;">       jtmp:=CJointT();important; overflow-wrap: break-word !important;">       curr_angle{1}:=jtmp.robax.rax_1;important; overflow-wrap: break-word !important;">       curr_angle{2}:=jtmp.robax.rax_2;important; overflow-wrap: break-word !important;">       curr_angle{3}:=jtmp.robax.rax_3;important; overflow-wrap: break-word !important;">       curr_angle{4}:=jtmp.robax.rax_4;important; overflow-wrap: break-word !important;">       curr_angle{5}:=jtmp.robax.rax_5;important; overflow-wrap: break-word !important;"> curr_angle{6}:=jtmp.robax.rax_6;important; overflow-wrap: break-word !important;">       FOR i FROM 1 TO 6 DOimportant; overflow-wrap: break-word !important;">           IF i=3 THENimportant; overflow-wrap: break-word !important;">               no_dependent:=-curr_angle{2};important; overflow-wrap: break-word !important;">             !夹角等于2轴运动的负数important; overflow-wrap: break-word !important;">           endifimportant; overflow-wrap: break-word !important;">           pose10{i}:=f_dh2pose(i,alpha{i},a{i},theta{i}+curr_angle{i},d{i});important; overflow-wrap: break-word !important;">       ENDFORimportant; overflow-wrap: break-word !important;">       FOR i FROM 1 TO 6 DOimportant; overflow-wrap: break-word !important;">           pose_cal:=PoseMult(pose_cal,pose10{i});important; overflow-wrap: break-word !important;">       ENDFORimportant; overflow-wrap: break-word !important;">ENDPROCimportant; overflow-wrap: break-word !important;">
important; overflow-wrap: break-word !important;"> FUNC pose f_dh2pose(num i,num alpha,num a,num theta,num d)important; overflow-wrap: break-word !important;">       VAR pose pose1:=[[0,0,0],[1,0,0,0]];important; overflow-wrap: break-word !important;">       pose1:=PoseMult(pose1,[[0,0,0],orientzyx(0,0,alpha)]);important; overflow-wrap: break-word !important;">       pose1:=PoseMult(pose1,[[a,0,0],orientzyx(0,0,0)]);important; overflow-wrap: break-word !important;">       pose1:=PoseMult(pose1,[[0,0,0],orientzyx(theta,0,0)]);important; overflow-wrap: break-word !important;">       pose1:=PoseMult(pose1,[[0,0,d],orientzyx(0,0,0)]);important; overflow-wrap: break-word !important;">      IF i=3 THENimportant; overflow-wrap: break-word !important;">           pose1:=PoseMult(pose1,[[0,0,0],orientzyx(no_dependent,0,0)]);important; overflow-wrap: break-word !important;">       endifimportant; overflow-wrap: break-word !important;">       !针对轴3坐标系,需要再多乘一次旋转,将夹角补偿回来important; overflow-wrap: break-word !important;">       RETURN pose1;important; overflow-wrap: break-word !important;">   ENDFUNC



 

联系热线:13127732113   联系人:申采鑫 联系地址:上海市宝山机器人产业园宝联一路88号

技术和报价服务:星期一至星期六8:00-22:00 ABB机器人集成专营