七自由度机械臂重力补偿MATLAB仿真(Gravity Compensation)

工具:robotics toolbox -- peter corke / Simulink

思路:1. 创建一个 position controller, 让 end effector 去到指定点,测出在该点时对应的 joint angles, torque;

           2. 使用 toolbox 里的 gravload(q) 求出对应该点的 gravity torque;

           3. 比较两个 torque 是否一致。


  • Create robot using SerialLink and set dynamics parameters
startup_rvc

%%            theta d a alpha
L(1) = Link([  0  0 0  pi/2]);
L(1).m = 0.00;
L(1).r = [0 0 0];
L(1).I = [0.1, 0.1, 0.1, 0, 0, 0];
L(1).G = 1;
L(1).Jm = 0.0;

L(2) = Link([  0  0 0.30  0]);
L(2).m = 0.9507;
L(2).r = [-0.32213 -0.01724 -0.05311 ];
L(2).I = [0.1, 0.1, 0.1, 0, 0, 0];
L(2).G = 1;
L(2).Jm = 0.0;

L(3) = Link([  0  0 0.35  -pi/2]);
L(3).m = 0.4138;
L(3).r = [-0.2076 0.0000 0.0000];
L(3).I = [0.1, 0.1, 0.1, 0, 0, 0];
L(3).G = 1;
L(3).Jm = 0.0;

L(4) = Link([  0  0.1347 0  pi/2]);
L(4).m = 0.1540;
L(4).r = [ 0 -0.08887 0.06342 ];
L(4).I = [0.1, 0.1, 0.1, 0, 0, 0];
L(4).G = 1;
L(4).Jm = 0.0;

L(5) = Link([  0  0 0  -pi/2]);
L(5).m = 0.1051;
L(5).r = [0.0000 -0.05926 -0.05544 ];
L(5).I = [0.1, 0.1, 0.1, 0, 0, 0];
L(5).G = 1;
L(5).Jm = 0.0;

L(6) = Link([  0  0 0 pi/2]);
L(6).m = 0.0738;
L(6).r = [0.0000 -0.02402 0.03396];
L(6).I = [0.1, 0.1, 0.1, 0, 0, 0];
L(6).G = 1;
L(6).Jm = 0.0;

L(7) = Link([  0  0 0  0]);
L(7).m = 0.00;
L(7).r = [0 0 0];
L(7).I = [0.1, 0.1, 0.1, 0, 0, 0];
L(7).G = 1;
L(7).Jm = 0.0;


syms q1 q2 q3 q4 q5 q6 q7;
rob = SerialLink(L,'name','MasterHand');
rob.offset = [0 -pi/2 pi/2 0 0 -pi/2 pi/2];
rob.qlim = [-1/3*pi 1/3*pi;
            -1/3*pi 25/180*pi;
            -1/18*pi 75/180*pi;
            -245/180*pi 65/180*pi;
            -186/180*pi 98/180*pi;
            -41/180*pi 41/180*pi;
            -250/180*pi 250/180*pi];
% rob.plot([0 0 0 0 0 0 0],'jointdiam',1,'base','wrist','arrow','workspace',[-1 1 -1 1 -1 1]);
% rob.gravity = [0 0 9.81];
  • Create Position Controller in Simulink

  • Compare Result

  • 3
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MATLAB 中,可以使用 Robotics System Toolbox 来求解三自由度机械臂的动力学。以下是一个示例代码,假设机械臂的链接长度、质量、以及惯性矩已知: ```matlab % 定义机械臂的链接长度(单位:米) L1 = 1; L2 = 0.8; L3 = 0.6; % 定义机械臂的质量(单位:千克) m1 = 5; m2 = 3; m3 = 2; % 定义机械臂的惯性矩(单位:千克·米^2) I1 = 0.1; I2 = 0.08; I3 = 0.05; % 定义机械臂的关节角度(单位:弧度) theta1 = pi/4; theta2 = pi/6; theta3 = pi/3; % 创建机械臂模型 robot = robotics.RigidBodyTree; % 创建机械臂的关节 joint1 = robotics.Joint('joint1', 'revolute'); joint2 = robotics.Joint('joint2', 'revolute'); joint3 = robotics.Joint('joint3', 'revolute'); % 将关节连接到机械臂 link1 = robotics.RigidBody('link1'); link2 = robotics.RigidBody('link2'); link3 = robotics.RigidBody('link3'); setFixedTransform(link1, trvec2tform([0 0 L1])); setFixedTransform(link2, trvec2tform([0 0 L2]));setFixedTransform(link3, trvec2tform([0 0 L3])); % 设置关节的属性 setJoint(joint1, 'parent', robot.Base, 'child', link1, 'jointAxis', [0 0 1]); setJoint(joint2, 'parent', link1, 'child', link2, 'jointAxis', [0 0 1]); setJoint(joint3, 'parent', link2, 'child', link3, 'jointAxis', [0 0 1]); % 将关节添加到机械臂模型中 addBody(robot, link1, 'base'); addBody(robot, link2, 'link1'); addBody(robot, link3, 'link2'); % 计算机械臂的动力学 gravity = [0 0 -9.8]; torque = [0 0 0]; q = [theta1 theta2 theta3]; qd = zeros(1,3); qdd = zeros(1,3); tau = inverseDynamics(robot, q, qd, qdd, gravity, torque); % 显示关节扭矩 disp(tau); ``` 请注意,上述代码仅提供了一个简单的示例,具体的机械臂模型和参数需要根据实际情况进行调整。同时,为了运行此代码,您需要先安装 Robotics System Toolbox。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值