实物模型

DH建立坐标系以及正逆运动学推导

Matlab验证

clear;
clc;
a1=-9.57*0.001;alpha1=pi/2;
a2=-59.2*0.001;
a3=-77*0.001;d3=44.6*0.001;
% 建立连杆系
%  theta    关节角度
%  d        连杆偏移量
%  a        连杆长度
%  alpha    连杆扭角
%  sigma    旋转关节为0,移动关节为1
%  mdh      标准的D&H为0,否则为1
%  offset   关节变量偏移量
%  qlim     关节变量范围[min max]
L1=Link([0 0 a1 alpha1 0]);
L2=Link([0 0 a2 0 0]);
L3=Link([0 d3 a3 0 0 0]);% 机器人模型对象建立
Leg=SerialLink([L1 L2 L3],'name','single_leg');xlim([-40,40])
ylim([-40,40])
zlim([0,60])
[theta1,theta2,theta3]=leg_ik(-0.023577,-0.0446,0.1); %单位米
% Leg.display;
theta=[theta1 theta2 theta3];
Leg.plot(theta);
% Leg.teach();
function [theta1,theta2,theta3] = leg_ik(end_x,end_y,end_z)
% 连杆偏置,注意正负,跟建立的坐标系有关
a1=-9.57*0.001;
a2=-59.2*0.001;
a3=-77*0.001;  d3=44.6*0.001;L1 = sqrt(end_x^2+end_y^2);
Phi_1 = atan2(end_y,end_x);
% fprintf('Phi1=%f\n',Phi_1/pi*180);
% fprintf('atan2(d3/L1,sqrt(1-(d3/L1)^2)) = %f\n',atan2(d3/L1,sqrt(1-(d3/L1)^2))/pi*180);
theta1_1 = atan2(d3/L1,sqrt(1-(d3/L1)^2))+Phi_1 ;
theta1_2 = atan2(d3/L1,-sqrt(1-(d3/L1)^2))+Phi_1 ;
% fprintf('theat1_1=%f\t,theat1_2=%f\n',theta1_1/pi*180,theta1_2/pi*180);
theta1=theta1_2;
fprintf('theat1=%f\n',theta1/pi*180);m=end_x*cos(theta1)+end_y*sin(theta1)-a1;
n=end_z;
% fprintf('m=%f,n=%f\n',m,n);
k=0.5*(m*m+n*n+a2*a2-a3*a3);
% fprintf('k=%f\n',k);
is_big =((m*a2)^2+(n*a2)^2) - k^2;
% fprintf('is_big =%f\n',is_big);
L2 = sqrt((n*a2)^2+(m*a2)^2);
% fprintf('L2=%f\n',L2);
Phi_2 = atan2(m*a2,n*a2);
% fprintf('Phi_2=%f\n',Phi_2/pi*180);
theta2_1 = atan2(k/L2,sqrt(1-(k/L2)^2))-Phi_2 ;
theta2_2 = atan2(k/L2,-sqrt(1-(k/L2)^2))-Phi_2;
% fprintf('theat2_1=%f,theat2_2=%f\n',theta2_1/pi*180,theta2_2/pi*180);
theta2 = theta2_1;
fprintf('theat2=%f\n',theta2/pi*180);theta3= asin((end_z-a2*sin(theta2))/a3 ) - theta2;
fprintf('theat3=%f\n',theta3/pi*180);% 运动学正解验算
x_test = a3*cos(theta1)*cos(theta2+theta3)+d3*sin(theta1)+a2*cos(theta1)*cos(theta2)+a1*cos(theta1);
y_test = a3*sin(theta1)*cos(theta2+theta3)-d3*cos(theta1)+a2*sin(theta1)*cos(theta2)+a1*sin(theta1);
z_test = a3*sin(theta2+theta3)+a2*sin(theta2);
fprintf('x_test=%f\t,y_test=%f\t,z_test=%f\n',x_test,y_test,z_test);
end

结果



通过正解验算逆解结果,发现跟输入完全吻合。

注意

这里有一个小坑,就是偏置a,开始的时候我以为是距离量,默认是正值,结果就一直逆解不正确,最后发现a(d也是一样)跟坐标系有关,要看第i-1坐标系到第i个坐标系的变换,是有正负号的,这一点坑了我好久,谨记!

后来补充

2021.8.9号,晚上画了一下单腿的运动空间
1、髋关节固定不动,膝关节和肘关节遍历180度,因为我用的舵机只有180转角

2、三个关节都遍历180度



附上matlab代码

function [x,y,z] = leg_fk(theta1,theta2,theta3)
% 连杆偏置,注意正负,跟建立的坐标系有关
a1=-9.57*0.001;
a2=-59.2*0.001;
a3=-77*0.001;  d3=44.6*0.001;x = a3*cos(theta1)*cos(theta2+theta3)+d3*sin(theta1)+a2*cos(theta1)*cos(theta2)+a1*cos(theta1);
y = a3*sin(theta1)*cos(theta2+theta3)-d3*cos(theta1)+a2*sin(theta1)*cos(theta2)+a1*sin(theta1);
z = a3*sin(theta2+theta3)+a2*sin(theta2);
end
% 绘制运动空间 (0-180)
space_x=[];
space_y=[];
space_z=[];
for angle_1=0:10/180*pi:180/180*pi %这里是弧度for angle_2=0:10/180*pi:180/180*pifor angle_3=0:10/180*pi:180/180*pi[x,y,z]=leg_fk(angle_1,angle_2,angle_3);space_x=[space_x,x];space_y=[space_y,y];space_z=[space_z,z];endend
end
hold on
scatter3(space_x,space_y,space_z,'filled');

后面有空了再补充吧

三轴机械臂/三自由度四足单腿DH正逆运动学及matlab验证相关推荐

  1. 对于STM32F103控制的三轴机械臂基本功能测试-关节转动控制

    ➤01 机械臂调试 1.简介 对于 基于STM32对于三轴机械臂控制器设计 的设计已经进行了如下的调试: 对于STM32F103三轴机械臂控制器进行基本功能测试-关节角度读取 对于STM32F103三 ...

  2. 对于STM32F103三轴机械臂控制器进行基本功能测试-关节角度读取

    ➤01 机械臂调试 1.简介 对 基于STM32对于三轴机械臂控制器设计 中对应的控制电路读取肩部和肘部两个 角度编码器 ST-3806-15-RS 数据进行调试. 2.接口电路1 ▲ 角度读取的相关 ...

  3. 对于STM32F103三轴机械臂控制器进行基本功能测试-上下运动功能

    简 介: 本文针对基于在基于STM32对于三轴机械臂控制器设计 中设计了控制电路板.本文记录对其在机械臂实际部件进行调试的过程. 关键词: STM32F103,机械臂,三轴,上下运动 ➤01 机械臂控 ...

  4. 基于STM32对于三轴机械臂控制器设计

    简 介: 本文使用了STM32对于一款三轴机械臂进行初步驱动,调试他的各个关节的运动情况. 关键词: 机械臂,三轴机械臂,STM32 ➤ 01背景 在 组装肩部带有减速器双轴机械臂组装与调试 的调试基 ...

  5. Rviz玩转三轴机械臂

    前言 最近想加深ROS仿真机械臂的理解,所以笔者参考一些资料与博客,在ROS下搭个简单的三轴机械臂,在Rviz下实现各轴关节转动,如果后续有时间的话,可能会更新下Gazebo下仿真,如果时间不够的话, ...

  6. grbl控制3轴机械臂 原理 实现 (四) 之GRBL源码修改驱动三轴机械臂

    往期回顾: 第一篇:grbl控制3轴机械臂 原理 实现 (一) 之2D机械臂模拟及实现 第二篇:grbl控制3轴机械臂 原理 实现 (二) 之3D机械臂模拟及实现 第三篇:grbl控制3轴机械臂 原理 ...

  7. 六轴机械臂DIY(四)机械模型重建及DH法建模

    通过本系列文章的前三篇,一个小型桌面舵机机械臂我们就获得了,但一个控制单关节实现整体运动的机械臂无非就是一个桌面玩具,根本就不能称之为"机器人",因此在接下来的文章中我们会使用机器 ...

  8. 逆运动学:RRR型 2D 三轴机械臂的IK求解 | 机械臂运动学笔记(二)

    任务: 给定末端的(x,y, \phi),求各轴角度( θ 1 , θ 2 , θ 3 \theta_1 , \theta_2, \theta_3 θ1​,θ2​,θ3​) 先将多个空间几何拆解成平面 ...

  9. 【机器人学习】三自由机器人正逆运动学分析+matlab代码+直线轨迹与圆轨迹

    下载链接:https://download.csdn.net/download/yjw0911/85111527 clc clear all close all M=300;l=150;L=50; t ...

最新文章

  1. 中国电信打造“三朵云”战略 助力互联网+医疗发展
  2. Spring Cloud Gateway 雪崩了,该怎么办不要慌
  3. AngularJS 、Backbone.js 和 Ember.js 的比较
  4. 【百战GAN】羡慕别人的美妆?那就用GAN复制粘贴过来
  5. SQLite Update 语句(http://www.w3cschool.cc/sqlite/sqlite-update.html)
  6. 计算机应用12班,计算机应用二班xx毕业论文.doc
  7. apache 给网站配置域名
  8. 如何制定客户留存策略_商客通:办理石家庄400电话如何留存客户
  9. kbmmw 与extjs 通过JSON Base64 显示图片
  10. linux用户详细登录日志文件,Linux登录日志
  11. Restlet实战(一)Restlet入门资料及概念
  12. 嵌入式linux开发实战——项目1认识嵌入式系统
  13. 收集最火的开源项目——PHP 篇
  14. Laya Air游戏开发模式之传统MVC模式(基础篇)
  15. C语言之通讯录的实现
  16. 报错ERROR:Skipping MapperFactoryBean with name 'xxxMapper' and 'xxx.xxx.xxx.mapper.xxxxxMapper'
  17. Linux tty串口测试程序
  18. Redisson闭锁
  19. 在win10系统中安装Visual C++ 6.0的具体方法
  20. wegame系统推荐头像_除了wegame,还有没有别的英雄联盟的插件推荐?

热门文章

  1. 依云工资查询系统升级方法
  2. 争议 | VR 对眼睛害处到底大不大? 能不能给小孩玩?
  3. Mysql存储过程语法讲解,以及如何用Java调用!
  4. 推荐:电子日记本(EDiary)V2.53
  5. MAC下SecureCRT 8.0.4破解版远程连接工具的安装与配置
  6. Ajax操作--原声JSAJAX操作
  7. 计算机语言恢复,如何将win7电脑中不见的语言栏恢复回来?
  8. 安卓自定义日期控件(仿QQ,IOS7)续
  9. 前端学习 课堂笔记 CSS篇(四)浮动
  10. matlab单根检验,关于单位根检验输出结果问题?