当前位置: 首页 > news >正文

机器人雅克比Jacobian矩阵程序

% 定义机器人的连杆参数
L1 = Link('d', 0, 'a', 0, 'alpha', pi/2);
L2 = Link('d', 0, 'a', 1, 'alpha', 0);
L3 = Link('d', 0, 'a', 1, 'alpha', 0);% 创建机器人对象
robot = SerialLink([L1, L2, L3], 'name', 'MyRobot');% 设置机器人的关节角度(弧度)
q = [0, pi/4, pi/6];% 计算机器人末端在基坐标系下的雅克比矩阵
J0 = robot.jacob0(q);% 计算机器人末端在自身坐标系下的雅克比矩阵
Jn = robot.jacobn(q);% 显示结果
disp('机器人末端在基坐标系下的雅克比矩阵:');
disp(J0);
disp('机器人末端在自身坐标系下的雅克比矩阵:');
disp(Jn);

参考文献:

https://zhuanlan.zhihu.com/p/2106892917https://zhuanlan.zhihu.com/p/2106892917

L(1) = Revolute('d', 0.15185, 'a', 0, 'alpha', pi/2, 'offset', 0);
L(2) = Revolute('d', 0, 'a', -0.24355, 'alpha', 0, 'offset', 0);
L(3) = Revolute('d', 0, 'a', -0.2132, 'alpha', 0, 'offset', 0);
L(4) = Revolute('d', 0.13105, 'a', 0, 'alpha', pi/2, 'offset', 0);
L(5) = Revolute('d', 0.08535, 'a', 0, 'alpha', -pi/2, 'offset', 0);
L(6) = Revolute('d', 0.0921, 'a', 0, 'alpha', 0, 'offset', 0);
ur3e = SerialLink(L, 'name', 'UR3e');
% 设定一个末端的位置与姿态
TA = SE3(-0.4, -0.2, 0.1) * SE3.Rx(pi/2) * SE3.Ry(-pi/2);
qA = ur3e.ikine(TA);
% 用jacov0计算qA位形下机械臂的雅可比矩阵在基座标系下的描述
JA0 = ur3e.jacob0(qA)
% 用jacove计算qA位形下机械臂的雅可比矩阵在末端工具座标系下的描述
JAE = ur3e.jacobe(qA)
% 验证一下JA0与JAE的关系
RA = ur3e.fkine(qA).R;
RJ = [RA zeros(3,3); zeros(3,3) RA];
% 根据理论公式,JA0 = RJ * JAE
JA0_from_JAE = RJ*JAE

def Jacobian_Matrix():a = np.array([0, -0.425, -0.39225, 0, 0, 0])d = np.array([0.1625, 0, 0, 0.1333, 0.0997, 0.0996 + global_variables.l_k])alpha = np.array([pi/2, 0, 0, pi/2, -pi/2,0])theta = global_variables.rtde_r.getActualQ()# print("Actual joint angles")# print(theta)U = np.identity(4)for i in reversed(range(6)):U = np.matmul(DH_matrix(theta[i], a[i], d[i], alpha[i]), U)delta = U[2, 0:3]    dd = np.cross(np.matmul(-U[0:3,0:3].T, U[0:3,3]), delta)if(i==5):J66 = np.vstack((dd.reshape([-1,1]), delta.reshape([-1,1])))else:J66 = np.block([np.vstack((dd.reshape([-1,1]), delta.reshape([-1,1]))), J66]) return J66

def DH_matrix(theta, a, d, alpha):    T = np.array([[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.0,                sin(alpha),          cos(alpha),                 d  ],[   0.0,                  0.0,                  0.0,                   1.0  ]])return T
def  Rotation_matrix(Pose):kx, ky, kz = Pose[3], Pose[4], Pose[5]a = sqrt(kx*kx + ky*ky + kz*kz)kx, ky, kz = kx/a, ky/a, kz/aca, sa = cos(a), sin(a)va = 1 - caK2 = np.array([[kx*kx,  kx*ky,  kx*kz],[ky*kx,  ky*ky,  ky*kz],[kz*kx,  kz*ky,  kz*kz]])I = np.identity(3)Kt = np.array([[  0,  -kz,   ky],[ kz,    0,  -kx],[-ky,   kx,    0]])R = ca*I + sa*Kt + va*K2return R

http://www.xdnf.cn/news/99073.html

相关文章:

  • 【go】go run-gcflags常用参数归纳,go逃逸分析执行语句,go返回局部变量指针是安全的
  • 深度学习--卷积神经网络调整学习率
  • MVCWebAPI使用FromBody接受对象的方法
  • 【速写】hook与fx
  • UML设计系列(9):开发过程中如何应用UML
  • uniapp跳转和获取参数方式
  • 【学习准备】算法和开发知识大纲
  • Kubelet 可观测性最佳实践
  • Ubuntu 20.04 安装Docker 全过程
  • 大厂Java面试:JVM调优与问题定位
  • 教育平台项目实战(从0到1)
  • spark—kafka
  • 铆钉连接的一些参数
  • SpringBoot项目,密码加密之“BCrypt加密”
  • 使用 Streamlit 打造一个简单的照片墙应用
  • 前端渲染pdf文件解决方案-pdf.js
  • 为什么圆形在GeoJSON中被表示为多边形(Polygon)而不是圆形类型
  • 【OSCP-vulnhub】Raven-2
  • pod内部共享命名空间与k8s命名空间是一个东西吗?
  • arm64适配系列文章-第一章-arm64环境上kubesphere和k8s的部署
  • mybatis xml中特殊字符处理
  • 【k8s】Taint污点)、Toleration(容忍)
  • HCIA-Access V2.5_18_网络管理基础_1_网络管理系统架构
  • 去年15天背完高项重点,成功上岸
  • H5S 寒武纪GPU转码
  • 约束constraint
  • PHP 反序列化原生类 TIPS字符串逃逸CVE 绕过漏洞属性类型特征
  • 车载功能测试-车载域控/BCM控制器测试用例开发流程【用例导出方法+优先级划分原则】
  • Linux内核源码结构
  • 数智化浪潮下,智能外呼系统如何重塑沟通格局