数值法求六轴机械臂逆运动学解
问题描述:已知工具坐标系相对于固定坐标系的期望位置和姿态,如何求解满足期望位姿的关节角?
本篇将通过基于雅克比矩阵的牛顿-拉夫森迭代法求运动学逆解。
牛顿 - 拉夫森法(Newton - Raphson)
对于机械臂逆运动学求解方法,如果逆运动学方程无解析解,这时可以采用数值迭代方法求解。即使存在解析解,数值算法也经常用于改善求解精度。
算法详解:
数值求解方程
,假设
为初值,利用泰勒级数在
处展开,并截取第一项,得:
若只保留第一阶,令,求解
,得到
在将上式求得的值作为初值,代入上述方程中
上述过程不断迭代,直到的精度满足要求。
同样的,上述求解公式可以扩展到n维:
只需将改成向量
即可。
基于雅克比矩阵的牛顿 - 拉夫森迭代法求逆解
根据机器人的MDH参数和连杆坐标系,6DOF机器人的末端位姿可写为:
由于矩阵中的元素是关节变量的函数,则有:
(1)
式中:为连杆长度,
为连杆扭角,
为连杆偏置,
为关节变量,
为机器人末端位姿矩阵。
因此,机器人的逆解问题就是根据已知的连杆参数以及给定的末端位姿矩阵
,求解关节变量
.
使用最原始的方法,取12个元素全部参与计算得到12个方程(由于末端位姿矩阵的自由度为6,所以取3个位置元素和任意三个姿态元素,建立6个方程即可。但是,在某些特殊情况下,
通过迭代的得到的解是一样的,而实际结果应该是不一样的。所以,作者采用最原始的建立12个方程进行求解)
根据上述12个方程,求解jacobian矩阵:
由上式得到的jacobian是12×6的矩阵,不能按照方阵的形式对其求逆,所以使用广义逆求其最小二乘解。
因此,得到迭代公式
总结
牛顿 - 拉夫森迭代法求机器人你运动学问题,具体步骤为:
1、估计一个临近的关节变量,通过正运动学计算初始迭代位姿
.
2、根据初始迭代位姿计算jacobian矩阵
3、根据初始迭代位姿和jacobian矩阵计算微分运动量
4、根据迭代公式计算目标位姿的逆运动学解
附部分matlab求解代码
%求雅可比矩阵
j = jacobian(F, Theta);
t = [Theta1 Theta2 Theta3 Theta4 Theta5 Theta6];
j_k = subs(j, t, theta_init);
Jacobian = eval(j_k); % %求微分运动量
Tcur = double(robot.fkine(theta_init));
ff1 = Tcur(1,4) - Tend(1,4);
ff2 = Tcur(2,4) - Tend(2,4);
ff3 = Tcur(3,4) - Tend(3,4);
ff4 = Tcur(2,3) - Tend(2,3);
ff5 = Tcur(3,3) - Tend(3,3);
ff6 = Tcur(3,2) - Tend(3,2);
ff7 = Tcur(1,1) - Tend(1,1);
ff8 = Tcur(1,2) - Tend(1,2);
ff9 = Tcur(1,3) - Tend(1,3);
ff10 = Tcur(2,1) - Tend(2,1);
ff11 = Tcur(2,2) - Tend(2,2);
ff12 = Tcur(3,1) - Tend(3,1);
delta_f = [ff1;ff2;ff3;ff4;ff5;ff6;ff7;ff8;ff9;ff10;ff11;ff12];%求微分增加量
d_theta = inv(Jacobian' * Jacobian) * Jacobian' * delta_f;
error = 1e-6;
while norm(d_theta) > errortheta_cur = theta_init - d_theta';%更新雅可比矩阵Theta = [Theta1; Theta2; Theta3; Theta4; Theta5; Theta6];j = jacobian(F, Theta);t = [Theta1 Theta2 Theta3 Theta4 Theta5 Theta6];j_k = subs(j, t, theta_cur);Jacobian = eval(j_k); Theta = theta_cur;Tcur = double(robot.fkine(theta_cur));ff1 = Tcur(1,4) - Tend(1,4);ff2 = Tcur(2,4) - Tend(2,4);ff3 = Tcur(3,4) - Tend(3,4);ff4 = Tcur(2,3) - Tend(2,3);ff5 = Tcur(3,3) - Tend(3,3);ff6 = Tcur(3,2) - Tend(3,2);ff7 = Tcur(1,1) - Tend(1,1);ff8 = Tcur(1,2) - Tend(1,2);ff9 = Tcur(1,3) - Tend(1,3);ff10 = Tcur(2,1) - Tend(2,1);ff11 = Tcur(2,2) - Tend(2,2);ff12 = Tcur(3,1) - Tend(3,1);delta_f = [ff1;ff2;ff3;ff4;ff5;ff6;ff7;ff8;ff9;ff10;ff11;ff12];theta_init = theta_cur;%求微分增加量d_theta = inv(Jacobian' * Jacobian) * Jacobian' * delta_f;norm(d_theta)
end
数值法求六轴机械臂逆运动学解相关推荐
- 机械臂——六轴机械臂逆解
环境:MATLAB 2017B+Robotics Toolbox 9.10.0 前期准备:完成机械臂数学模型的建立+计算机械臂工作空间 https://blog.csdn.net/Kalenee/ar ...
- 六轴机械臂算法正解(FK)和逆解(IK)
在之前的博客中,有一篇<六轴机械臂算法-引导篇>,目前,终于将引导篇中的各个点整理完毕. 因为文档中涉及到比较多的图片以及公式,copy的过程中发现比较麻烦,所以直接将文档截取成了图片上传 ...
- (6)六轴机械臂的运动学正、逆解
下面在前面的ur5机械臂的DH参数基础是对其正逆解进行求解,为了后面能在MATLAB中利用stl文件进行实际显示,这里以标准DH参数为例进行讲解.(修正DH参数在用plot3d函数是显示失败,不知道是 ...
- 六轴机械臂运动学算法原理及其推导过程
网站上关于六轴机械臂piper算法的讲解有很多,但其腕点姿态的推到较为模糊,故此写一篇关于六轴机械臂piper算法的推导讲解,供有缘人参考,如果您觉得有用,可以点个赞,吾将不胜感激,若是推导过程存在错 ...
- 【机器人原理与实践(三)】六轴机械臂正逆解控制
文章目录 3.1 空间转换矩阵的理解 3.1.1平移变换 3.1.2旋转变换 3.2 D-H参数法 3.3 建立机械臂模型 3.3.1 机械臂模型介绍 3.3.2 使用Matlab进行示教仿真 3.4 ...
- 如何实现六轴机械臂的逆解计算?
1. 机械臂运动学介绍 机械臂运动学 机器人运动学就是根据末端执行器与所选参考坐标系之间的几何关系,确定末端执行器的空间位置和姿态与各关节变量之间的数学关系.包括正运动学(Forward Kinema ...
- 六轴机械臂DIY(四)机械模型重建及DH法建模
通过本系列文章的前三篇,一个小型桌面舵机机械臂我们就获得了,但一个控制单关节实现整体运动的机械臂无非就是一个桌面玩具,根本就不能称之为"机器人",因此在接下来的文章中我们会使用机器 ...
- 基于模型设计(MBD)工程方法开发六轴机械臂系统实战
本课程采用基于模型设计(MBD)的工程开发方法,实现对六轴机械臂系统的开发,包括六轴机械臂的知识和控制器的软硬件实现,有助于设计串联.并联的机械臂.康复医疗机器人等其它机电设备的电控系统.目前,这种世 ...
- 六轴机械臂机械臂人脸识别和跟踪
使用一个桌面型的六轴机械臂,在机械臂的末端安装一个摄像头,来进行人脸识别和跟踪的一个功能.该功能分为两个模块,一个是人脸识别模块,另一个是机械臂的运动控制模块. 在前文有介绍到怎么控制机械臂的基本运动 ...
最新文章
- Android Studio中架包打包和依赖冲突解决
- react学习笔记(二)编写第一个react组件
- 【IDEA】怎么把idea的目录结构,以文本形式输出?
- 两种解决IE6不支持固定定位的方法
- C语言链表存储数据并排序,c语言求助:怎么根据链表中的某个数据对链表进行排序?...
- Window服务器可安装的live messager最新版本-20090826
- 组织文化运营_组织可以从开放文化和技术中学到什么
- 【Java并发编程】16、ReentrantReadWriteLock源码分析
- cisco2811 pppoe上网配置供参考
- Android11.0(R) MTK user版本打开MtkLog功能
- 从Activiti切换到Camunda的5个理由
- LIFELONG LEARNING WITH DYNAMICALLY EXPANDABLE NETWORKS论文阅读+代码解析
- bootstrap 二级下拉菜单
- 严蔚敏《数据结构》表达式求值
- vr旅游市场竞争分析,破局之路在何方?
- python做个奶茶店程序
- 【Linux】Linux虚拟内存空间描述
- 姓名脱敏-除姓外为星号*
- NFT元宇宙游戏开发铸造源代码怎么写案例分享
- python 文件读取错误之FileNotFoundError: [Errno 2] No such file or directory:,顺便学习斜杠/和反斜杠\的用法