SoildWorks模型导入MATLAB(Simmechanics/URDF)

一、Simmechanics

到MALTAB官网下载simlink

 https://cn.mathworks.com/products/simmechanics/download_smlink.html

按照步骤安装,然后在 SolidWorks 工具-插件里勾选simscape multibody link选项


在工具栏可以看到simscape multibody link,选择export,选择第一个(不要选第二个first generation,因为MATLAB快不支持第一代了),完成以上步骤后就会自动生成xml文件了(中文名零件名可能会影响导出)。


二、SolidWorks生成URDF文件

下载插件sw2urdf,在工具-插件勾选sw2urdf


然后在工具栏最下面的file选项,点击生成urdf文件

自定义关节继承关系、属性、角限位等

此项一定要填,不然会出错,最容易出错的就是这个继承对应关系,要注意

生成urdf后可以在MATLAB打开生成rigidbodytree,就可以用robotics system toolbox了。

另一种方法建立rigidbodytree就是从头开始建立,建立body、joint,用D-H参数建立关节关系,插入属性

MH = robotics.RigidBodyTree;

% insert bodies
body1 = robotics.RigidBody('b1');
body2 = robotics.RigidBody('b2');
body3 = robotics.RigidBody('b3');
body4 = robotics.RigidBody('b4');
body5 = robotics.RigidBody('b5');
body6 = robotics.RigidBody('b6');
body7 = robotics.RigidBody('b7');

% insert joints
jnt1 = robotics.Joint('jnt1','revolute');
jnt2 = robotics.Joint('jnt2','revolute');
jnt3 = robotics.Joint('jnt3','revolute');
jnt4 = robotics.Joint('jnt4','revolute');
jnt5 = robotics.Joint('jnt5','revolute');
jnt6 = robotics.Joint('jnt6','revolute');
jnt7 = robotics.Joint('jnt7','revolute');

% D-H
l_arm = 0.3000;
l_forearm = 0.3500;
h = 0.1347;
dhparams = [
%     % a          alpah        d        theta
% %     %==================================
      0           pi/2         0          0;
      l_arm       0            0         0;
      l_forearm  -pi/2         0          0;
      0           pi/2         h          0;
      0          -pi/2         0          0;
      0           pi/2         0         0;
      0           0            0          0;
      ];
    % a          alpah        d        theta
    %==================================
%       0           0          0          0;
%       0           pi/2       0         -pi/2;
%       l_arm       0          0          pi/2;
%       l_forearm  -pi/2       h          0;
%       0           pi/2       0          0;
%       0          -pi/2       0         -pi/2;
%       0           pi/2       0          pi/2;
%       ];
% insert D-H parameters
setFixedTransform(jnt1,dhparams(1,:),'dh');
setFixedTransform(jnt2,dhparams(2,:),'dh');
setFixedTransform(jnt3,dhparams(3,:),'dh');
setFixedTransform(jnt4,dhparams(4,:),'dh');
setFixedTransform(jnt5,dhparams(5,:),'dh');
setFixedTransform(jnt6,dhparams(6,:),'dh');
setFixedTransform(jnt7,dhparams(7,:),'dh');

% define joints
body1.Joint = jnt1;
body2.Joint = jnt2;
body3.Joint = jnt3;
body4.Joint = jnt4;
body5.Joint = jnt5;
body6.Joint = jnt6;
body7.Joint = jnt7;

% add bodies in tree
basename = MH.BaseName;
addBody(MH,body1,basename)
addBody(MH,body2,'b1')
addBody(MH,body3,'b2')
addBody(MH,body4,'b3')
addBody(MH,body5,'b4')
addBody(MH,body6,'b5')
addBody(MH,body7,'b6')

% insert dynamics parameters

body1.Mass = 2.5821065477099703;
body1.CenterOfMass = [-0.26329659042131059 158.72447498623089 32.938176506248787];
body1.Inertia = [16041.582424563505 7051.1754123926148 13088.880352015873 -4141.6894962543802 -22.754297015214494 -87.900979228745442];

body2.Mass = 0.95068534123025306;
body2.CenterOfMass = [-17.236168916095959 22.127697430967604 -21.016908976944325];
body2.Inertia = [12975.722899322729 954.70243767950433 13441.442230712533 1288.282590132515 -130.31919082259617 1075.4651029099809];

body3.Mass = 0.38670320971519206;
body3.CenterOfMass = [0.1908081566990967 -17.865474466941961 -222.13772550818976];
body3.Inertia = [4463.9503328208039 4464.8231105514187 72.490142706051088 -30.84429243830429 13.600455398698957 -3.1231045481430746];

body4.Mass = 3.4690235497900648e-05;
body4.CenterOfMass = [77.547591577672861 -33.465682164229897 -0.039161288781911781];
body4.Inertia = [0.058020692722918002 0.082300857011192913 0.13284300061145118 -1.9246996929474e-05 4.0460432714558584e-05 0.03872541278802373];

body5.Mass = 2.0892809449960028e-05;
body5.CenterOfMass = [-48.405480558479738 28.636770084664331 0.027346481660805749];
body5.Inertia = [0.030293749741555756 0.026352212661226965 0.053727763158712909 -3.5730098499112016e-05 2.2082435688263238e-05 0.016601561408768908]; 

body6.Mass = 2.2036300278286587e-05;
body6.CenterOfMass = [0.02571156554487955 -31.745742486558129 6.6814730637257682];
body6.Inertia = [0.03282466484366197 0.012571625157927193 0.023282119684803097 -0.0073201098466462366 -9.0762265047841154e-06 -7.5550470324971825e-07];

body7.Mass = 3.1739768939109369e-05;
body7.CenterOfMass = [0.018075377787587516 -21.866042781275841 -4.4259541225431001];
body7.Inertia = [0.053486732030183323 0.027288070887356616 0.031992871949931917 0.00050430471511754603 -1.5392937621131819e-05 4.7755426986294462e-06]; 

MH.Gravity = [0 0 -0.981];
show(MH);
axis([-1,1,-1,1,-1,1])
axis off



 
 



猜你喜欢

转载自blog.csdn.net/youngkimkim/article/details/80728522