关于用Robotics System Toolbox 和Robotics Toolbox 解逆动力学遇到的问题
程序员文章站
2022-05-05 12:17:52
...
今天做大作业遇到一个bug有点头秃,先记下来以后再想(挖坑待填orz
题目如下:
各连杆质量:
质心在其几何中心处:
使用Robotics Toolbox建立上述机器人模型,代码如下:
L = Link.empty();
L(3) = Link('revolute', 'd', 0, 'a', 2, 'alpha', 0, 'm', 10, 'I', [0, 0, 0; 0, 0, 0; 0, 0, 0.1], 'r', [-1; 0; 0]);
L(2) = Link('revolute', 'd', 0, 'a', 3, 'alpha', 0, 'm', 15, 'I', [0, 0, 0; 0, 0, 0; 0, 0, 0.2], 'r', [-1.5; 0; 0]);
L(1) = Link('revolute', 'd', 0, 'a', 4, 'alpha', 0, 'm', 20, 'I', [0, 0, 0; 0, 0, 0; 0, 0, 0.5], 'r', [-2; 0; 0]);
trpBot = SerialLink(L, 'name', 'my 3r-plane bot', 'gravity', [0 -9.81 0]);
使用Robotics System Toolbox 建立上述机器人模型,代码如下:
dhparam = [ 2, 0, 0, 0;
3, 0, 0, 0;
4, 0, 0, 0];
robot = rigidBodyTree;
body1 = rigidBody('body1');
body2 = rigidBody('body2');
body3 = rigidBody('body3');
jnt1 = rigidBodyJoint('jnt1','revolute');
jnt2 = rigidBodyJoint('jnt2','revolute');
jnt3 = rigidBodyJoint('jnt3','revolute');
setFixedTransform(jnt3,dhparam(1,:),'dh');
setFixedTransform(jnt2,dhparam(2,:),'dh');
setFixedTransform(jnt1,dhparam(3,:),'dh');
body1.Joint = jnt1;
body2.Joint = jnt2;
body3.Joint = jnt3;
addBody(robot,body1,'base')
addBody(robot,body2,'body1')
addBody(robot,body3,'body2')
robot.Gravity = [0 -9.81 0];
然后任选一组姿态:
q = rand([1 3]) * pi;
dq = rand([1 3]);
ddq = rand([1 3]);
trt = trpBot.rne(q, dq, ddq, 'gravity', [0 -9.81 0]);
robot.DataFormat = 'row';
trst = robot.inverseDynamics(q, dq, ddq);
disp(trt);
disp(trst);
结果差了不止一个数量级:
估计是什么地方没有设置好orz
现在能确定的是运动学方面是没问题的:
以后解决了再填坑。。。
上一篇: CAS之5.2x版本自定义返回消息-yellowcong
下一篇: 单点登录(CAS)示例