一款基于ARM的多自由度人形教育机器人控制系统的设计
3.3 机器人舵机整体驱动函数 ManMoveFrame()设计
本文引用地址:https://www.eepw.com.cn/article/267427.htm函数功能:将输入的各伺服器角度转换为各伺服器的高电平时间,按照17个伺服器高电平时间从短到长依次调用对应伺服器驱动。共18个入口参数,17个是伺服器角度,1个是动画停留时间,转换关系:1度约为0.00814ms。
函数定义:void ManMoveFrame(int16 Head_Angle,int16 Larm1_Angle,… ,,int16 Rleg5_Angle,uint8 t)
{uint8 i,t1; int HeadTime,Larm1Time,Larm2Time, … ,Rleg4Time,Rleg5Time;/*与角度对应的时间变量*/
int MotorTime[17]; /*各舵机驱动脉冲时间数组*/
MotorTime[0]=HeadTime=Head_0+Head_Angle*Angle1;/*头部驱动脉冲时间*/
/*MotorTime[1]至MotorTime[16]略;*/
qsort(MotorTime,17,sizeof(int),Compare); /*对MotorTime数组快排序,使其值从小到大重排*/ …
for(i=0;i<17;i++)/*循环17次依次比较并输出驱动脉冲低电平*/
{if(MotorTime[i]==HeadTime) head(HeadTime);/* 如果头部转动角度小则头部转动结束*/
else if(MotorTime[i]== Larm1Time) Larm1(Larm1Time); /*如果左肩转动角度小则头部转动结束*/
… else Rleg5(Rleg5Time);} while(T0TC
3.4 机器人姿态数据输入驱动函数ManMoveKeyframeData()设计
机器人动作的关键姿态是由各舵机转动位置决定的,需要参照机器人的体态对17个舵机的自由度关系数据进行设置,驱动函数将如表2所示设置的参数转换为驱动信号,控制17个舵机的转动,从而完成机器人行走的动作。表格空白的地方默认数据为0。
函数功能:初始化各伺服器角度/时间数组,将机器人每姿态动作的各舵机角度数据输入给各伺服器数组。共19个入口参数:1个关键帧号、17个伺服器角度、1个动画停留时间。
函数定义:void ManMoveKeyframeData(uint16 ID,int16 H_Angle, …,int16 RL5_Angle,uint8 t){
ID_Max++;/*动作帧数,全局变量,记录动作帧数,每加入1帧,ID_Max的值就增1*/
H[ID]=H_Angle;/*头的角度*/ … RL5[ID]=RL5_Angle; /*左肩的角度*/
T_Key[ID]=t;/*帧动作完成的时间长度*/ }
3.5 机器人动作控制驱动函数ManMoveKeyframeToFrame()设计
主要功能:把动作幅度较大的姿态关键帧数据结合其下面紧挨的姿态关键帧数据转换为时间均匀的普通帧驱动参数,供整体驱动使用。入口参数:无。出口参数:无。
万能遥控器相关文章:万能遥控器代码
pwm相关文章:pwm是什么
晶振相关文章:晶振原理
评论