动力学与控制
https://www.cnblogs.com/zhongyuliang/p/11077103.html

函数: gravload

mdl_puma560;
du=pi/180;
Q=p560.gravload([30,30,30,30,30,30])

gravload函数:

  • nargin:输入参数数量
  • rne:知角度、速度、加速度,求力矩
    eg. tau=MyRobot.rne(q,qd,qdd)
function tg = gravload(robot, q, grav)
	assert(numcols(q) == robot.n, 'RTB:SerialLink:gravload:badarg', 'Insufficient columns in q');

	if nargin == 2
		tg = rne(robot, q, zeros(size(q)), zeros(size(q)));
	elseif nargin == 3
		tg = rne(robot, q, zeros(size(q)), zeros(size(q)), grav);
    end

demo:静止状态重力载荷图

mdl_puma560;

gravload = p560.gravload(qn); %计算重力负荷
p560.gravity %查看重力
% 重力负荷随关节位型的变换
[Q2 Q3] = meshgrid(-pi:0.1:pi, -pi:0.1:pi);
for i = 1:numcols(Q2)
    for j = 1:numcols(Q3)
        g = p560.gravload([0 Q2(i,j) Q3(i,j) 0 0 0]);%关节2/3设置角度,其余设置为0
        g2(i,j) = g(2);
        g3(i,j) = g(3);
    end
end

%% 绘图
figure('name','肩关节重力载荷')
surfl(Q2,Q3,g2);
xlabel('\theta_2(rad)');ylabel('\theta_3(rad)');zlabel('关节2重力载荷');
figure('name','肘关节重力载荷')
surfl(Q2,Q3,g3)
xlabel('\theta_2(rad)');ylabel('\theta_3(rad)');zlabel('关节3重力载荷');

在这里插入图片描述

demo:动态可操作性——速度椭球

mdl_puma560;
J=p560.jacob0(qn);
M=p560.inertia(qn);
Mx=(J*inv(M)*inv(M)'*J');
Mx=Mx(1:3,1:3);
plot_ellipse(Mx)
p560.maniplty(qn,'asada')

输出:Manipulability: translation 0.209383, rotation 0.171619
在这里插入图片描述