使用XR806联调控制四足马术机器人

发布时间: 2024-02-22
来源: 电子工程世界

1项目介绍

四足马术机器人

本项目使用XR806串口协议与大疆A板的stm32通讯,实现并联四足机器人的单腿运动学逆解与整体步态规划,本文将讲解项目所涉及的算法以及代码实现步骤。

f74ff604-74bd-11ee-939d-92fbcf53809c.png

四足马术机器人实物

f75e32fa-74bd-11ee-939d-92fbcf53809c.gif


2单腿运动学逆解

相关算法

控制2个无刷电机(红色箭头各代表一个电机控制)并联成单足,经过角度闭环解算出足端轨迹,由足端做摆线轨迹(下图中绿色部分)形成类似于动物猫狗等单腿的运动


%摆线方程(matlab)
sigma=2*pi*t/(Ts);
xep=(xf-xs)*((sigma-sin(sigma))/(2*pi))+xs;
zep=h*(1-cos(sigma))/2+zs;
x=[x,xep];
z=[z,zep];

f7acdfae-74bd-11ee-939d-92fbcf53809c.png


f7b73260-74bd-11ee-939d-92fbcf53809c.gif


3整体步态规划

相关算法

Walk步态是一种静态步态,即在运动过程中始终有三条腿处于支撑相,至多只有一条腿处于摆动相,四足动物在walk步态中四条腿最常见的轮换顺序为1→3→4→2→1。

f80b52dc-74bd-11ee-939d-92fbcf53809c.pngf8123dc2-74bd-11ee-939d-92fbcf53809c.gif


4无刷电机角度速度

pid闭环

以P比例、I积分、D微分通过增量式PID使无刷电机能稳定的控制速度,角度使用pd控制函数如下


int Balance(float Angle,float Gyro,int Middle,float Balance_Kp,float Balance_Kd)
{ 
  float Angle_bias,Gyro_bias;
 int balance;
 Angle_bias=Middle-Angle;            
 Gyro_bias=0-Gyro;               
 balance=Balance_Kp*Angle_bias+Gyro_bias*Balance_Kd; 
 return balance;
}



5关键功能实现

代码展示

XR806初始化串口配置:


 if(HAL_UART_Init(UARTID, &param) != HAL_OK)
 return -1;
 /*使能DMA*/
 if (HAL_UART_EnableTxDMA(UARTID) != HAL_OK)
 return -2;
 if (HAL_UART_EnableRxDMA(UARTID) != HAL_OK)
 return -3;


在main函数中while循环用下列函数发送对应数据:


HAL_UART_Transmit_DMA(UARTID, (uint8_t *)buffer,sizeof(buffer));


串口3接收回调,执行难对应的前进后退:


 switch(RxBuffer_control)
 {
 case 'W': Motor_Control( 1, 1, 1, 1); break;
 case 'S': Motor_Control(-1, -1, -1, -1); break;
 case 'A': Motor_Control(-1, -1, 1, 1); break;
 case 'D': Motor_Control( 1, 1, -1, -1); break;
 case 'P': Motor_Control( 0, 0, 0, 0); break;
 }


文章来源于: 电子工程世界 原文链接

本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。