在Matlab中快速求出二自由度雅克比矩阵和相关问题

        雅克比矩阵是什么。比如f1 = kx1+x2 ,我们可以求出f1对x1和x2的映射关系 ,而这个关系就是雅克比矩阵。

MATLAB中有专门的函数-jacobian 命令专门去求解一个函数的雅克比矩阵,接下来实践。

上图,是二自由度正运动学方程。J是咱们要求解的雅克比矩阵。

在MATLAB中

syms x y l1 l2 theta1  theta2;
x = -(l1*sin(theta1)+l2*sin(theta1+theta2));
y = -(l1*cos(theta1)+l2*cos(theta1+theta2));
jacobian([x,y],[theta1,theta2])

结果是:我们就求出了xy和theta1和theta2的映射关系

在此期间,MATLAB出现了

错误使用 symfun.parseString (第 55 行)
Invalid variable name.

出错 syms (第 297 行)
        [name, vars] = symfun.parseString(x,'allowPercent');

这样的问题。出现这样的问题我的代码是这样的

syms x y l1 l2 theta(1)  theta(2);
x = -(l1*sin(theta(1))+l2*sin(theta(1)+theta(2)));
y = -(l1*cos(theta(1))+l2*cos(theta(1)+theta(2)));
jacobian([x,y],[theta(1),theta(2)])

原因是:在matlab中不太能识别类似于theta(1)和theta(2)这样的字样。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是计算7自由度机械臂雅克矩阵MATLAB程序: ```matlab function J = robot_jacobian(q) % q为机械臂的关节角度,是一个7x1的列向量 % J为机械臂的雅克矩阵,是一个6x7的矩阵 % 机械臂长度参数 a = [0, 0.4318, 0.0203, 0, 0, 0, 0]; d = [0.333, 0, 0.316, 0, 0.384, 0, 0.107]; alpha = [-pi/2, 0, pi/2, -pi/2, pi/2, -pi/2, 0]; % DH参数 DH = [q(1), a(1), d(1), alpha(1); q(2), a(2), d(2), alpha(2); q(3), a(3), d(3), alpha(3); q(4), a(4), d(4), alpha(4); q(5), a(5), d(5), alpha(5); q(6), a(6), d(6), alpha(6); q(7), a(7), d(7), alpha(7)]; % 计算正运动学矩阵 T = eye(4); for i = 1:7 T = T * dh_transform(DH(i,:)); end % 计算末端位置和姿态的雅克矩阵 Jv = zeros(3,7); Jw = zeros(3,7); for i = 1:7 % 计算第i个关节的旋转矩阵 Ti = eye(4); for j = 1:i-1 Ti = Ti * dh_transform(DH(j,:)); end Ri = Ti(1:3,1:3); pi = Ti(1:3,4); % 计算第i个关节的线速度雅克矩阵 zi = Ri(:,3); Jv(:,i) = cross(zi, T(1:3,4)-pi); % 计算第i个关节的角速度雅克矩阵 Jw(:,i) = zi; end % 将线速度雅克矩阵和角速度雅克矩阵合并成一个6x7的雅克矩阵 J = [Jv; Jw]; end function T = dh_transform(dh) % 计算DH参数为dh的转换矩阵 theta = dh(1); a = dh(2); d = dh(3); alpha = dh(4); T = [cos(theta), -sin(theta)*cos(alpha), sin(theta)*sin(alpha), a*cos(theta); sin(theta), cos(theta)*cos(alpha), -cos(theta)*sin(alpha), a*sin(theta); 0, sin(alpha), cos(alpha), d; 0, 0, 0, 1]; end ``` 使用方法: 1. 将上面的代码复制到MATLAB编辑器。 2. 在MATLAB命令窗口输入`robot_jacobian(q)`,其`q`是机械臂的关节角度,是一个7x1的列向量。 3. 程序会返回机械臂的雅克矩阵`J`,是一个6x7的矩阵

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值