六轴机器人matlab写运动学逆解函数(改进DH模型)

2023-11-22 01:50

本文主要是介绍六轴机器人matlab写运动学逆解函数(改进DH模型),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.理论
本文采用的模型为之前博客“matlab机器人工具箱一般六轴的DH模型和改进DH模型建立与区别”里面的改进DH模型,参数不再重复给出。
基系与工具坐标系关系为:
bT00T11T22T33T44T55T66Te=bTe b T 0 ⋅ ( 0 T 1 ⋅ 1 T 2 ⋅ 2 T 3 ⋅ 3 T 4 ⋅ 4 T 5 ⋅ 5 T 6 ) ⋅ 6 T e = b T e
将逆运动学问题简化为:
0T11T22T33T44T55T6=bT10bTe6T1e 0 T 1 ⋅ 1 T 2 ⋅ 2 T 3 ⋅ 3 T 4 ⋅ 4 T 5 ⋅ 5 T 6 = b T 0 − 1 ⋅ b T e ⋅ 6 T e − 1
2.转换为下式求解
2T33T44T5=1T120T11bT10bTe6T1e5T16 2 T 3 ⋅ 3 T 4 ⋅ 4 T 5 = 1 T 2 − 1 ⋅ 0 T 1 − 1 ⋅ b T 0 − 1 ⋅ b T e ⋅ 6 T e − 1 ⋅ 5 T 6 − 1
左边:

left =
[ cos(theta3)*cos(theta4)*cos(theta5) - sin(theta3)*sin(theta5), - cos(theta5)*sin(theta3) - cos(theta3)*cos(theta4)*sin(theta5), cos(theta3)*sin(theta4), a2 + a3*cos(theta3) - d4*sin(theta3)]
[ cos(theta3)*sin(theta5) + cos(theta4)*cos(theta5)*sin(theta3),   cos(theta3)*cos(theta5) - cos(theta4)*sin(theta3)*sin(theta5), sin(theta3)*sin(theta4),      d4*cos(theta3) + a3*sin(theta3)]
[                                      -cos(theta5)*sin(theta4),                                         sin(theta4)*sin(theta5),             cos(theta4),                                    0]
[                                                             0,                                                               0,                       0,                                    1]

右边:

right = 
[ oz*sin(theta2)*sin(theta6) - nz*cos(theta6)*sin(theta2) + nx*cos(theta1)*cos(theta2)*cos(theta6) + ny*cos(theta2)*cos(theta6)*sin(theta1) - ox*cos(theta1)*cos(theta2)*sin(theta6) - oy*cos(theta2)*sin(theta1)*sin(theta6),   ax*cos(theta1)*cos(theta2) - az*sin(theta2) + ay*cos(theta2)*sin(theta1), oz*cos(theta6)*sin(theta2) + nz*sin(theta2)*sin(theta6) - ox*cos(theta1)*cos(theta2)*cos(theta6) - nx*cos(theta1)*cos(theta2)*sin(theta6) - oy*cos(theta2)*cos(theta6)*sin(theta1) - ny*cos(theta2)*sin(theta1)*sin(theta6), px*cos(theta1)*cos(theta2) - pz*sin(theta2) - a1*cos(theta2) + py*cos(theta2)*sin(theta1)]
[ oz*cos(theta2)*sin(theta6) - nz*cos(theta2)*cos(theta6) - nx*cos(theta1)*cos(theta6)*sin(theta2) - ny*cos(theta6)*sin(theta1)*sin(theta2) + ox*cos(theta1)*sin(theta2)*sin(theta6) + oy*sin(theta1)*sin(theta2)*sin(theta6), - az*cos(theta2) - ax*cos(theta1)*sin(theta2) - ay*sin(theta1)*sin(theta2), oz*cos(theta2)*cos(theta6) + nz*cos(theta2)*sin(theta6) + ox*cos(theta1)*cos(theta6)*sin(theta2) + nx*cos(theta1)*sin(theta2)*sin(theta6) + oy*cos(theta6)*sin(theta1)*sin(theta2) + ny*sin(theta1)*sin(theta2)*sin(theta6), a1*sin(theta2) - pz*cos(theta2) - px*cos(theta1)*sin(theta2) - py*sin(theta1)*sin(theta2)]
[                                                                                                           ny*cos(theta1)*cos(theta6) - nx*cos(theta6)*sin(theta1) - oy*cos(theta1)*sin(theta6) + ox*sin(theta1)*sin(theta6),                                            ay*cos(theta1) - ax*sin(theta1),                                                                                                           ox*cos(theta6)*sin(theta1) - ny*cos(theta1)*sin(theta6) - oy*cos(theta1)*cos(theta6) + nx*sin(theta1)*sin(theta6),                                                           py*cos(theta1) - px*sin(theta1)]
[                                                                                                                                                                                                                           0,                                                                          0,                                                                                                                                                                                                                           0,                                                                                         1]

令左右两边相等,求出六个角。、
逆解顺序如下:
这里写图片描述
由于公式比较复杂我仅在此给出想法,各位可自行计算。
θ1 θ 1 :两式第3行第4列。
θ3 θ 3 :两式第1行第4列和第2行第4列。
θ2 θ 2 :两式第1行第4列和第2行第4列。
θ5 θ 5 :两式第1行第2列和第2行第2列。
θ4 θ 4 :两式第1行第2列和第2行第2列。
θ6 θ 6 :两式第3行第1列和第3行第3列。
3.MATLAB程序
分两个程序①主函数②function函数
①主函数

clear;
clc;
%建立机器人模型
%       theta    d           a        alpha     offset
ML1=Link([0       0           0           0          0     ],'modified'); 
ML2=Link([0       0           0.180      -pi/2       0     ],'modified');
ML3=Link([0       0           0.600       0          0     ],'modified');
ML4=Link([0       0.630       0.130      -pi/2       0     ],'modified');
ML5=Link([0       0           0           pi/2       0     ],'modified');
ML6=Link([0       0           0          -pi/2       0     ],'modified');
modrobot=SerialLink([ML1 ML2 ML3 ML4 ML5 ML6],'name','modified');
modmyt06=mymodfkine(-pi/3,-pi/3,pi/3,-pi/4,pi/4,pi/6);
modmyikine=mymodikine(modmyt06)

②function函数

function [ikine_t]=mymodikine(Tbe)
%    ti   di     ai-1     alphai-1 
MDH=[0   0       0         0;0   0       0.180    -pi/2;0   0       0.600     0;0   0.630   0.130    -pi/2;0   0       0         pi/2;0   0       0        -pi/2];nx=Tbe(1,1); ny=Tbe(2,1); nz=Tbe(3,1);  ox=Tbe(1,2); oy=Tbe(2,2); oz=Tbe(3,2); ax=Tbe(1,3); ay=Tbe(2,3); az=Tbe(3,3); px=Tbe(1,4); py=Tbe(2,4); pz=Tbe(3,4);d4=MDH(4,2);a1=MDH(2,3);a2=MDH(3,3);a3=MDH(4,3);d2=0;d3=0;f1=-pi/2;f3=-pi/2;f4=pi/2;f5=-pi/2;%t1(3,4)t11=-atan2(-py,px)+atan2((d2-d3)/sin(f1),((px*sin(f1))^2+(py*sin(f1))^2-(d2-d3)^2)^0.5);t12=-atan2(-py,px)+atan2((d2-d3)/sin(f1),-((px*sin(f1))^2+(py*sin(f1))^2-(d2-d3)^2)^0.5);%t3m3_1=pz*sin(f1);n3_1=a1-px*cos(t11)-py*sin(t11);m3_2=pz*sin(f1);n3_2=a1-px*cos(t12)-py*sin(t12);t31=-atan2(a2*a3/sin(f3),a2*d4)+atan2((m3_1^2+n3_1^2-a2^2-a3^2-d4^2)/sin(f3),((2*a2*d4*sin(f3))^2+(2*a2*a3)^2-(m3_1^2+n3_1^2-a2^2-a3^2-d4^2)^2)^0.5);t32=-atan2(a2*a3/sin(f3),a2*d4)+atan2((m3_1^2+n3_1^2-a2^2-a3^2-d4^2)/sin(f3),-((2*a2*d4*sin(f3))^2+(2*a2*a3)^2-(m3_1^2+n3_1^2-a2^2-a3^2-d4^2)^2)^0.5);t33=-atan2(a2*a3/sin(f3),a2*d4)+atan2((m3_2^2+n3_2^2-a2^2-a3^2-d4^2)/sin(f3),((2*a2*d4*sin(f3))^2+(2*a2*a3)^2-(m3_2^2+n3_2^2-a2^2-a3^2-d4^2)^2)^0.5);t34=-atan2(a2*a3/sin(f3),a2*d4)+atan2((m3_2^2+n3_2^2-a2^2-a3^2-d4^2)/sin(f3),-((2*a2*d4*sin(f3))^2+(2*a2*a3)^2-(m3_2^2+n3_2^2-a2^2-a3^2-d4^2)^2)^0.5);%t2m2_1=a2+a3*cos(t31)+d4*sin(f3)*sin(t31);n2_1=a3*sin(t31)-d4*sin(f3)*cos(t31);m2_2=a2+a3*cos(t32)+d4*sin(f3)*sin(t32);n2_2=a3*sin(t32)-d4*sin(f3)*cos(t32);m2_3=a2+a3*cos(t33)+d4*sin(f3)*sin(t33);n2_3=a3*sin(t33)-d4*sin(f3)*cos(t33);m2_4=a2+a3*cos(t34)+d4*sin(f3)*sin(t34);n2_4=a3*sin(t34)-d4*sin(f3)*cos(t34);t21=atan2(m3_1*m2_1+n2_1*n3_1,m3_1*n2_1-m2_1*n3_1);t22=atan2(m3_1*m2_2+n2_2*n3_1,m3_1*n2_2-m2_2*n3_1);t23=atan2(m3_2*m2_3+n2_3*n3_2,m3_2*n2_3-m2_3*n3_2);t24=atan2(m3_2*m2_4+n2_4*n3_2,m3_2*n2_4-m2_4*n3_2);%t5m5_1=-sin(f5)*(ax*cos(t11)*cos(t21)+ay*sin(t11)*cos(t21)+az*sin(f1)*sin(t21));n5_1=sin(f5)*(ax*cos(t11)*sin(t21)+ay*sin(t11)*sin(t21)-az*sin(f1)*cos(t21));m5_2=-sin(f5)*(ax*cos(t11)*cos(t22)+ay*sin(t11)*cos(t22)+az*sin(f1)*sin(t22));n5_2=sin(f5)*(ax*cos(t11)*sin(t22)+ay*sin(t11)*sin(t22)-az*sin(f1)*cos(t22));m5_3=-sin(f5)*(ax*cos(t12)*cos(t23)+ay*sin(t12)*cos(t23)+az*sin(f1)*sin(t23));n5_3=sin(f5)*(ax*cos(t12)*sin(t23)+ay*sin(t12)*sin(t23)-az*sin(f1)*cos(t23));m5_4=-sin(f5)*(ax*cos(t12)*cos(t24)+ay*sin(t12)*cos(t24)+az*sin(f1)*sin(t24));n5_4=sin(f5)*(ax*cos(t12)*sin(t24)+ay*sin(t12)*sin(t24)-az*sin(f1)*cos(t24));t51=atan2(((ay*cos(t11)-ax*sin(t11))^2+(m5_1*cos(t31)+n5_1*sin(t31))^2)^0.5,(m5_1*sin(t31)-n5_1*cos(t31))/(sin(f3)*sin(f4)));t52=atan2(-((ay*cos(t11)-ax*sin(t11))^2+(m5_1*cos(t31)+n5_1*sin(t31))^2)^0.5,(m5_1*sin(t31)-n5_1*cos(t31))/(sin(f3)*sin(f4)));t53=atan2(((ay*cos(t11)-ax*sin(t11))^2+(m5_2*cos(t32)+n5_2*sin(t32))^2)^0.5,(m5_2*sin(t32)-n5_2*cos(t32))/(sin(f3)*sin(f4)));t54=atan2(-((ay*cos(t11)-ax*sin(t11))^2+(m5_2*cos(t32)+n5_2*sin(t32))^2)^0.5,(m5_2*sin(t32)-n5_2*cos(t32))/(sin(f3)*sin(f4)));t55=atan2(((ay*cos(t12)-ax*sin(t12))^2+(m5_3*cos(t33)+n5_3*sin(t33))^2)^0.5,(m5_3*sin(t33)-n5_3*cos(t33))/(sin(f3)*sin(f4)));t56=atan2(-((ay*cos(t12)-ax*sin(t12))^2+(m5_3*cos(t33)+n5_3*sin(t33))^2)^0.5,(m5_3*sin(t33)-n5_3*cos(t33))/(sin(f3)*sin(f4)));t57=atan2(((ay*cos(t12)-ax*sin(t12))^2+(m5_4*cos(t34)+n5_4*sin(t34))^2)^0.5,(m5_4*sin(t34)-n5_4*cos(t34))/(sin(f3)*sin(f4)));t58=atan2(-((ay*cos(t12)-ax*sin(t12))^2+(m5_4*cos(t34)+n5_4*sin(t34))^2)^0.5,(m5_4*sin(t34)-n5_4*cos(t34))/(sin(f3)*sin(f4)));%t4if sin(t51)==0t41=0;else t41=atan2(((ay*cos(t11)-ax*sin(t11))*sin(f1)*sin(f5))/(-sin(t51)*sin(f3)),(-m5_1*cos(t31)-n5_1*sin(t31))/(sin(t51)));endif sin(t52)==0 t42=0;else t42=atan2(((ay*cos(t11)-ax*sin(t11))*sin(f1)*sin(f5))/(-sin(t52)*sin(f3)),(-m5_1*cos(t31)-n5_1*sin(t31))/(sin(t52)));endif sin(t53)==0 t43=0;else t43=atan2(((ay*cos(t11)-ax*sin(t11))*sin(f1)*sin(f5))/(-sin(t53)*sin(f3)),(-m5_2*cos(t32)-n5_2*sin(t32))/(sin(t53)));endif sin(t54)==0 t44=0;else t44=atan2(((ay*cos(t11)-ax*sin(t11))*sin(f1)*sin(f5))/(-sin(t54)*sin(f3)),(-m5_2*cos(t32)-n5_2*sin(t32))/(sin(t54)));endif sin(t55)==0t45=0;else t45=atan2(((ay*cos(t12)-ax*sin(t12))*sin(f1)*sin(f5))/(-sin(t55)*sin(f3)),(-m5_3*cos(t33)-n5_3*sin(t33))/(sin(t55)));endif sin(t56)==0 t46=0;else t46=atan2(((ay*cos(t12)-ax*sin(t12))*sin(f1)*sin(f5))/(-sin(t56)*sin(f3)),(-m5_3*cos(t33)-n5_3*sin(t33))/(sin(t56)));endif sin(t57)==0 t47=0;else t47=atan2(((ay*cos(t12)-ax*sin(t12))*sin(f1)*sin(f5))/(-sin(t57)*sin(f3)),(-m5_4*cos(t34)-n5_4*sin(t34))/(sin(t57)));endif sin(t58)==0 t48=0;else t48=atan2(((ay*cos(t12)-ax*sin(t12))*sin(f1)*sin(f5))/(-sin(t58)*sin(f3)),(-m5_4*cos(t34)-n5_4*sin(t34))/(sin(t58)));end%t6e1=nx*sin(t11)-ny*cos(t11);f1=ox*sin(t11)-oy*cos(t11);t61=atan2((cos(t41)*e1-cos(t51)*sin(t41)*f1),(cos(t41)*f1+cos(t51)*sin(t41)*e1));t62=atan2((cos(t42)*e1-cos(t52)*sin(t42)*f1),(cos(t42)*f1+cos(t52)*sin(t42)*e1));t63=atan2((cos(t43)*e1-cos(t53)*sin(t43)*f1),(cos(t43)*f1+cos(t53)*sin(t43)*e1));t64=atan2((cos(t44)*e1-cos(t54)*sin(t44)*f1),(cos(t44)*f1+cos(t54)*sin(t44)*e1));e2=nx*sin(t12)-ny*cos(t12);f2=ox*sin(t12)-oy*cos(t12);t65=atan2((cos(t45)*e2-cos(t55)*sin(t45)*f2),(cos(t45)*f2+cos(t55)*sin(t45)*e2));t66=atan2((cos(t46)*e2-cos(t56)*sin(t46)*f2),(cos(t46)*f2+cos(t56)*sin(t46)*e2));t67=atan2((cos(t47)*e2-cos(t57)*sin(t47)*f2),(cos(t47)*f2+cos(t57)*sin(t47)*e2));t68=atan2((cos(t48)*e2-cos(t58)*sin(t48)*f2),(cos(t48)*f2+cos(t58)*sin(t48)*e2));ikine_t=[t11 t21 t31 t41 t51 t61;t11 t21 t31 t42 t52 t62;t11 t22 t32 t43 t53 t63;t11 t22 t32 t44 t54 t64t12 t23 t33 t45 t55 t65;t12 t23 t33 t46 t56 t66;t12 t24 t34 t47 t57 t67;t12 t24 t34 t48 t58 t68];

4.运行结果
给定关节角为:

(-pi/3,-pi/3,pi/3,-pi/4,pi/4,pi/6)

正解得到末端位姿:

modmyt06

这里写图片描述
再用 modmyt06 m o d m y t 06 去进行逆解,结果如下:
这里写图片描述
共有8组解,正解回去位姿符合。
这里写图片描述
这里写图片描述
PS:逆解推荐用 arctan a r c t a n 反解角度,本程序适用于改进DH模型,仅用于学习,不适用于工业应用。

这篇关于六轴机器人matlab写运动学逆解函数(改进DH模型)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/406626

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX

上个月,FLUX 席卷了互联网,这并非没有原因。他们声称优于 DALLE 3、Ideogram 和 Stable Diffusion 3 等模型,而这一点已被证明是有依据的。随着越来越多的流行图像生成工具(如 Stable Diffusion Web UI Forge 和 ComyUI)开始支持这些模型,FLUX 在 Stable Diffusion 领域的扩展将会持续下去。 自 FLU

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者