三轴机械臂/三自由度四足单腿DH正逆运动学及matlab验证
实物模型
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验证相关推荐
- 对于STM32F103控制的三轴机械臂基本功能测试-关节转动控制
➤01 机械臂调试 1.简介 对于 基于STM32对于三轴机械臂控制器设计 的设计已经进行了如下的调试: 对于STM32F103三轴机械臂控制器进行基本功能测试-关节角度读取 对于STM32F103三 ...
- 对于STM32F103三轴机械臂控制器进行基本功能测试-关节角度读取
➤01 机械臂调试 1.简介 对 基于STM32对于三轴机械臂控制器设计 中对应的控制电路读取肩部和肘部两个 角度编码器 ST-3806-15-RS 数据进行调试. 2.接口电路1 ▲ 角度读取的相关 ...
- 对于STM32F103三轴机械臂控制器进行基本功能测试-上下运动功能
简 介: 本文针对基于在基于STM32对于三轴机械臂控制器设计 中设计了控制电路板.本文记录对其在机械臂实际部件进行调试的过程. 关键词: STM32F103,机械臂,三轴,上下运动 ➤01 机械臂控 ...
- 基于STM32对于三轴机械臂控制器设计
简 介: 本文使用了STM32对于一款三轴机械臂进行初步驱动,调试他的各个关节的运动情况. 关键词: 机械臂,三轴机械臂,STM32 ➤ 01背景 在 组装肩部带有减速器双轴机械臂组装与调试 的调试基 ...
- Rviz玩转三轴机械臂
前言 最近想加深ROS仿真机械臂的理解,所以笔者参考一些资料与博客,在ROS下搭个简单的三轴机械臂,在Rviz下实现各轴关节转动,如果后续有时间的话,可能会更新下Gazebo下仿真,如果时间不够的话, ...
- grbl控制3轴机械臂 原理 实现 (四) 之GRBL源码修改驱动三轴机械臂
往期回顾: 第一篇:grbl控制3轴机械臂 原理 实现 (一) 之2D机械臂模拟及实现 第二篇:grbl控制3轴机械臂 原理 实现 (二) 之3D机械臂模拟及实现 第三篇:grbl控制3轴机械臂 原理 ...
- 六轴机械臂DIY(四)机械模型重建及DH法建模
通过本系列文章的前三篇,一个小型桌面舵机机械臂我们就获得了,但一个控制单关节实现整体运动的机械臂无非就是一个桌面玩具,根本就不能称之为"机器人",因此在接下来的文章中我们会使用机器 ...
- 逆运动学:RRR型 2D 三轴机械臂的IK求解 | 机械臂运动学笔记(二)
任务: 给定末端的(x,y, \phi),求各轴角度( θ 1 , θ 2 , θ 3 \theta_1 , \theta_2, \theta_3 θ1,θ2,θ3) 先将多个空间几何拆解成平面 ...
- 【机器人学习】三自由机器人正逆运动学分析+matlab代码+直线轨迹与圆轨迹
下载链接:https://download.csdn.net/download/yjw0911/85111527 clc clear all close all M=300;l=150;L=50; t ...
最新文章
- 中国电信打造“三朵云”战略 助力互联网+医疗发展
- Spring Cloud Gateway 雪崩了,该怎么办不要慌
- AngularJS 、Backbone.js 和 Ember.js 的比较
- 【百战GAN】羡慕别人的美妆?那就用GAN复制粘贴过来
- SQLite Update 语句(http://www.w3cschool.cc/sqlite/sqlite-update.html)
- 计算机应用12班,计算机应用二班xx毕业论文.doc
- apache 给网站配置域名
- 如何制定客户留存策略_商客通:办理石家庄400电话如何留存客户
- kbmmw 与extjs 通过JSON Base64 显示图片
- linux用户详细登录日志文件,Linux登录日志
- Restlet实战(一)Restlet入门资料及概念
- 嵌入式linux开发实战——项目1认识嵌入式系统
- 收集最火的开源项目——PHP 篇
- Laya Air游戏开发模式之传统MVC模式(基础篇)
- C语言之通讯录的实现
- 报错ERROR:Skipping MapperFactoryBean with name 'xxxMapper' and 'xxx.xxx.xxx.mapper.xxxxxMapper'
- Linux tty串口测试程序
- Redisson闭锁
- 在win10系统中安装Visual C++ 6.0的具体方法
- wegame系统推荐头像_除了wegame,还有没有别的英雄联盟的插件推荐?
热门文章
- 依云工资查询系统升级方法
- 争议 | VR 对眼睛害处到底大不大? 能不能给小孩玩?
- Mysql存储过程语法讲解,以及如何用Java调用!
- 推荐:电子日记本(EDiary)V2.53
- MAC下SecureCRT 8.0.4破解版远程连接工具的安装与配置
- Ajax操作--原声JSAJAX操作
- 计算机语言恢复,如何将win7电脑中不见的语言栏恢复回来?
- 安卓自定义日期控件(仿QQ,IOS7)续
- 前端学习 课堂笔记 CSS篇(四)浮动
- matlab单根检验,关于单位根检验输出结果问题?