新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 一款基于ARM的多自由度人形教育机器人控制系统的设计

一款基于ARM的多自由度人形教育机器人控制系统的设计

作者:席东河 申一歌 杜娟 高吉珍时间:2014-12-29来源:电子产品世界收藏
编者按:  摘要:针对以往教育机器人自由度少、控制不灵活、教育功能弱的缺点,使用高集成度ARM芯片设计了一个简洁的17自由度人形机器人控制系统。规划了机器人的软硬件结构,设计了控制电路和驱动系统,采用1个定时器产生17路PWM驱动信号。重点以实例讲解了波形产生及驱动函数的编写方法和技巧。设计的机器人能够完成整套体操运动。这种方法在多自由度机器人操控和教学中具有广泛的借鉴意义。   1 系统方案设计   人形机器人控制系统包括机器人控制器和机器人遥控器两部分。其中控制器以飞利浦公司的ARM7处理器为核心,包含1

  多个舵机的驱动需要依据的姿态数据计算出转动时间,将其时间数据按一定算法进行排序,并在CPU的控制下设置各舵机的运动和停止时间。

  3.3 舵机整体驱动函数 ManMoveFrame()设计

本文引用地址:http://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是什么


晶振相关文章:晶振原理


评论


相关推荐

技术专区

关闭