【机器人学2】二自由度机械臂建模及控制

2023-11-06 22:40

本文主要是介绍【机器人学2】二自由度机械臂建模及控制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、基础知识

(1) PID控制:Kp比例、Ki积分、Kd微分;
(2) 坐标变换基础
(3) atan2(y,x)双参数反正切

二、具体案例

在这里插入图片描述
对机械臂进行逆运动学求解:
(1) 在这里插入图片描述

(2) 在这里插入图片描述
(3)在这里插入图片描述
(4)在这里插入图片描述
(5)建立如下图所示的二自由度机械臂
二自由度机械臂
P点坐标:
P=Rot(theta2,‘z’)*[a;0;0];
E点坐标:
E=P+Rot(theta2,‘z’)Rot(phi,‘z’)[b;0;0];
若给定的E点坐标与实际利用上式求解的坐标一致则说明逆解正确

代码实现

(1)正运动学

while 1
clc;
clear;%圆心坐标
x0=110;
y0=110;
%半径
R=40;
%连杆长度
a=100;
b=100;
t=1;
for i=0:0.1:2*pi+0.1x=x0+R*cos(i);y=y0+R*sin(i);
%     x=(a+b)*cos(i);
%     y=(a+b)*sin(i);theta1=atan2(y,x); % theta1=acos(x/sqrt(x*x+y*y));c=sqrt(x*x+y*y); % 末端到原点的距离theta3=acos((c*c+a*a-b*b)/(2*a*c));theta2=theta1-theta3; % 关节1 角度phi=pi-acos((a*a+b*b-c*c)/(2*a*b)); %关节2角度%连杆 P 位置P=Rot(theta2,'z')*[a;0;0];% 连杆末端位置(正运动学验证)E=P+Rot(theta2,'z')*Rot(phi,'z')*[b;0;0];%连杆连接处P的坐标Px=a*cos(theta2);Py=a*sin(theta2);%末端绘制圆的坐标rolx(t)=x;roly(t)=y;t=t+1;plotrobot(P(1),P(2),E(1),E(2),rolx,roly);  % 绘图验证pause(0.0000001)hold off
end
end

(2)PID

调速跟踪位置clc;
clear;%圆心坐标
x0=110;
y0=110;
%半径
R=40;
%连杆长度
a=100;
b=100;
t=1;% 控制周期 
dt=0.05 % 秒
Time=[0]; % 当前时间
realTheta=[0];% 关节1实际角度
realPhi=[0];%关节2实际角度
errTehta=[0]; % 关节1 角度误差
errPhi=[0]; % 关节2 角度误差
errThetaSum=0;%关节1累积误差
errPhiSum=0;%关节2累积误差
derrTheta=0;%关节1 本次角度误差与上一次角度误差的差值
derrPhi=0;%关节2 本次角度误差与上一次角度误差的差值
% PID 参数(关节1)
Kp1=10;
Ki1=2;
Kd1=4;
% PID 参数(关节2)
Kp2=8;
Ki2=1;
Kd2=2;for i=0:1:150theta2=i/150*2*pi;phi=i/150*pi;%连杆 P 位置P=Rot(theta2,'z')*[a;0;0];% 连杆末端位置(正运动学验证)E=P+Rot(theta2,'z')*Rot(phi,'z')*[b;0;0];% PID 控制w1=Kp1*(theta2-realTheta(end))+derrTheta*Kd1+Ki1*errThetaSum;%关节1 瞬时角速度w2=Kp2*(phi-realPhi(end))+derrPhi*Kd2+Ki1*errPhiSum;%关节2 瞬时角速度realTheta(end+1)=realTheta(end)+w1*dt;realPhi(end+1)=realPhi(end)+w2*dt;% 误差errTehta(end+1)=theta2- realTheta(end);errPhi(end+1)=phi- realPhi(end);errThetaSum=errThetaSum+errTehta(end);errPhiSum=errPhiSum+errPhi(end);derrTheta= errTehta(end)-errTehta(end-1);derrPhi= errPhi(end)-errPhi(end-1);% 当前时间Time(end+1)=dt*i;%连杆 P 位置realP=Rot(realTheta(end),'z')*[a;0;0];% 连杆末端位置(正运动学验证)realE=P+Rot(realTheta(end),'z')*Rot(realPhi(end),'z')*[b;0;0];%末端绘制圆的坐标rolx(t)=E(1);roly(t)=E(2);t=t+1;subplot(121);plotrobot(realP(1),realP(2),realE(1),realE(2),rolx,roly);  % 绘图验证hold offsubplot(122);plot(Time,errTehta,'k',Time,errPhi,'r');pause(0.0000001)end

(3)绘图代码

function plotrobot(Px,Py,x,y,rolx,roly)
xx=0;
yy=0;
plotline(xx,Px,yy,Py,'r')%
%axis equal;
axis square
hold on
plotline(Px,x,Py,y,'r')%
hold on
%axis equal;
plot(rolx,roly);
axis([-300,300,-300,300]);endfunction plotline(x1,x2,y1,y2,c)
xx=[x1,x2];
yy=[y1,y2];
plot(xx,yy,c)
end

实现效果

在这里插入图片描述

思考与讨论

根据调速跟踪位置的代码,写出用PID调节加速度跟踪位置的代码

长期从事机器人学相关研究,可指导课程设计及毕业设计,详询QQ:3531225003

这篇关于【机器人学2】二自由度机械臂建模及控制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python远程控制MySQL的完整指南

《Python远程控制MySQL的完整指南》MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最... 目录1. 准备工作2. 连接mysql数据库使用mysql-connector使用PyMySQL3.

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

MySQL精准控制Binlog日志数量的三种方案

《MySQL精准控制Binlog日志数量的三种方案》作为数据库管理员,你是否经常为服务器磁盘爆满而抓狂?Binlog就像数据库的“黑匣子”,默默记录着每一次数据变动,但若放任不管,几天内这些日志文件就... 目录 一招修改配置文件:永久生效的控制术1.定位my.cnf文件2.添加核心参数不重启热更新:高手应

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放