matlab动力学方程,机器人动力学方程(二):拉格朗日法

1、拉格朗日法

拉格朗日法是一种基于能量的动力学方法,从拉格朗日函数L(系统动能和势能的差值)出发来建立机器人动力学方程:

6d04539f1cfe

Lagrange 方程

应用于机器人动力学模型推导(详细过程可参考霍伟编写的《机器人动力学与控制》),最终可得出如下的形式:

math?formula=H(q)%5Cddot%7Bq%7D%2BC(q%2C%5Cdot%7Bq%7D)%5Cdot%7Bq%7D%2BG(q)%3D%5Ctau

式中各项H,C,G的求解算法如下,本文将该算法用Matlab实现。

6d04539f1cfe

各项的求解算法

2、Matlab代码

function [H,C,G] = LagrangianDynamics(dh_list, mass_list, mass_center_list, inertia_tensor_list)

[rows, columns] = size(dh_list);

number_of_links = rows;

if columns ~= 4

error('wrong DH parameters!')

end

for i = 1:rows

% 定义关节位置,速度,加速度符号

eval(['syms ','q',num2str(i),' real;']);

eval(['syms ','dq',num2str(i),' real;']);

eval(['syms ','ddq',num2str(i),' real;']);

eval(['q(i)=','q',num2str(i),';']);

eval(['dq(i)=','dq',num2str(i),';']);

eval(['ddq(i)=','ddq',num2str(i),';']);

end

A = sym([]);

for i = 1:number_of_links

dh = dh_list(i,:);

alpha(i) = dh(1);

a(i) = dh(2);

d(i) = dh(3);

q(i) = dh(4);

A(:,:,i) = [cos(q(i)), -sin(q(i))*cos(alpha(i)), sin(alpha(i))*sin(q(i)), a(i)*cos(q(i));

sin(q(i)), cos(q(i))*cos(alpha(i)), -sin(alpha(i))*cos(q(i)), a(i)*sin(q(i));

0, sin(alpha(i)), cos(alpha(i)), d(i);

0, 0, 0, 1];

end

A = simplify(A);

% 计算每个连杆坐标系在{0}系下的表达

A0 = sym([]);

for i = 1:number_of_links

A0(:,:,i) = eye(4,4);

for j = 1:i

A0(:,:,i) = A0(:,:,

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值