机械臂学习——舵机的速度控制、坐标变换、DH模型、正运动学解、逆运动学解

机械臂学习

前言

舵机工作原理:
在这里插入图片描述
在这里插入图片描述
通过单片机产生PWM信号控制舵机。

一、舵机的速度控制

1.舵机概述

工作电压:4.8v-6v
舵机的驱动是比较容易的,当我们使用单片机控制的时候,通过输出50HZ(20ms的周期)的PWM,控制PWM脉宽调节舵机的转角。舵机的转角与脉宽(高电平时间)存在一一对应关系,如果控制舵机转到某一角度,就改变输出脉宽即可,比如从1ms到1.5ms。那么如何进行舵机的速度控制呢?
在这里插入图片描述
在这里插入图片描述

2.代码实现

在这里插入图片描述

float Position_PID1 (float Encoder,float Target)
{ 	
	 static float Bias,Pwm,Integral_bias,Last_Bias;
	 Bias=Target-Encoder;                                  //计算偏差
	 Integral_bias+=Bias;	                                 //求出偏差的积分
	 Pwm=Position_KP*Bias/100+Position_KI*Integral_bias/100+Position_KD*(Bias-Last_Bias)/100; //位置PID控制器
	 Last_Bias=Bias;                                       //保存上一次偏差
	 return Pwm;                                           //增量输出
}

P=5、I=0、D=2

二、机械臂的坐标变换

1.坐标变换

坐标系是根据DH法建立的
在这里插入图片描述
在这里插入图片描述

2.坐标的几何概述

单位向量——模等于1的向量。由于是非零向量,单位向量具有确定的方向。
在这里插入图片描述
由坐标系OXaYa绕Z轴旋转得到新的坐标系OXbYb
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果三维连续旋转变换就会复制很多,当然神奇的DH模型会解决这些问题。
在这里插入图片描述
在这里插入图片描述

三、DH模型和正运动学解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
给每个关节都附上单独的坐标系之后:
在这里插入图片描述
在这里插入图片描述
机械臂DH参数表:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
正运动学解并不能在单片机上执行,所以我们需要逆运动学几何法来在单片机上运行。

四、逆运动学解

在这里插入图片描述

1.逆运动学几何法

在这里插入图片描述
方程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样就完成了逆运动学的计算。

2.代码实现

void Kinematic_Analysis(float x,float y,float Beta,float Alpha) 
{
float m,n,k,a,b,c,theta1,theta2,theta3,s1ps2;
 m=l2*cos(Alpha)-x; 
 n=l2*sin(Alpha)-y;
 k=(l1*l1-l0*l0-m*m-n*n)/2/l0;
 a=m*m+n*n; b=-2*n*k; c=k*k-m*m;
 theta1=(-b+sqrt(b*b-4*a*c))/2/a; 
 theta1=asin(theta1)*180/PI;
  if(theta1>90)
  theta1=90; 
  if(theta1<-90)
  theta1=-90;
  k=(l0*l0-l1*l1-m*m-n*n)/2/l1; 
  a=m*m+n*n; 
  b=-2*n*k;
  c=k*k-m*m; 
  s1ps2=(-b-sqrt(b*b-4*a*c))/2/a; 
  s1ps2=asin(s1ps2)*180/PI;
  if(s1ps2>90)
  theta2=90;
  if(s1ps2<-90)
  theta2=-90;
  theta2=s1ps2-theta1; 
  if(theta2>90)
  theta2=90; 
  if(theta2<-90)
  theta2=-90;
  theta3=Alpha*180/PI-theta1-theta2; 
  if(theta3>90)
  theta3=90; 
  if(theta3<-90)
  theta3=-90;
  Target1 = 750-(Beta)*Ratio;
  Target2 = 735+(theta1-90)*Ratio; 
  Target3 = 717-(theta2)*Ratio; 
  Target4 = 702-(theta3)*Ratio;; 
  Target5 = 750; 
 }

版权声明:本文为CSDN博主「我与nano」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_51963216/article/details/122805543

生成海报
点赞 0

我与nano

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

串口不定长接收

一、保留接收区和开启接收的语句    uint8_t buffer[5];HAL_UART_Transmit_IT(&huart1,buffer,3); 二、写入开启空闲中断的语句    __HAL_UART_ENABLE_IT(&huart

基于STM32单片机的电子密码锁设计

一.硬件方案 本设计采用STM32F103C8T6单片机作为主控芯片,结合外围的矩阵按键输入、LCD1602液晶显示、报警、开锁等电路模块实现开锁、上锁、报警、密码更改等功能,设计了一款可以多次修改密码并且具有报警