四足机器人控制系统设计及其仿真_第1页
四足机器人控制系统设计及其仿真_第2页
四足机器人控制系统设计及其仿真_第3页
四足机器人控制系统设计及其仿真_第4页
四足机器人控制系统设计及其仿真_第5页
已阅读5页,还剩95页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1杆上的电调驱动机械腿上的电机按照规定转动相应角度,达到机械腿按目标轨迹行走的目的。与Abstract21机器人控制系统概述 31.1机器人控制系统研究的背景 31.1.1机器人控制系统的特点 41.2基于单片机四足机器人控制系统的优点 51.2.1基于单片机机器人控制系统的优点 51.2.2基于单片机机器人控制系统的缺点 52基于STM32单片机四足机器人控制系统研发的可行性 52.1价格低廉 52.2方便安装 5 62.4研究分析 62.4.1基本思路 62.4.2技术路线 62.4.3设计方案 63四足机器人控制系统分析 63.1单片机简介 63.1.1单片机分类 73.1.2STM32F407简介 7 8 94基于STM32单片机的四足机器人控制系统的硬件设计 94.1主要电路结构 9 4.1.2分电板 5程序部分编程 5.1遥控接收处理函数 5.2电机与陀螺仪数据接收发送函数 155.3姿态控制 21 21 216使用PROTEUS进行系统的调试 36.1仿真的注意事项 23 246.3调试方法 24 参考文献 的性能提出了更高的要求,因此,如何有效地将其他领域(如图像处理、声音识别、最优控制人工智能等)的研究成果应用到机器人控制系统的实时操作中,是一项富有挑战性的研究工作。而具有4复定位精度较高,一般为±0.1mm。此外,由于机器人运行时要求运动平稳,不受外力干扰,为此5整个系统要方便安装,这样才能减少安装成本,由于该控制系统的主要控制中枢为单片机,个头小且结构简单,可以自己动手安装,一方面可以获得一些乐趣,另一方面如果出现故障问题,也易于排查。6腿式机器人系统是履带和轮式机器人的替代品,适用于崎岖的地形和复杂的环境。机械腿与不同环境中选择的接触点的自由度使他们能够克服与腿长相当的障碍。有了这样的功能,有腿的机器人有一天可以在森林和山脉中营救人员,爬楼梯以在建筑工地中携带有效载荷,检查非结构化的地下隧道并探索其它未知地域。腿式系统具有执行人类和动物能够进行的任何的运动潜力。78第一步:在菜单栏中点击“project”选择NewuVisionProject”新建一个工程,在弹出对第二步:点击工具栏,选择File---new,新建一个空白文档。在空白处写入程序。单击左上择刚保存的源程序文件,单击“Close9删除元件:右击选中元件使元件呈红色,选中后再一次右击则是删除,也可以在右击后选择“DeletetObject”电源和地的绘制:单击工具栏上的TerminalsMode,左侧工具栏显示TERMINALS时,可在其辅,达到控制系统可以完整控制各个硬件运作。四足机器人控制系统的核心为STM32F407单片机。起使用电池供应的稳定电流,接口段为塑料接口,可达到减轻机器人电调,全称电子调速器,它的输入线可连接电源,输出线可连接电机。在电路结构图中为Encoder,本次设计中使用的是C620型号的电调输入线连接STM32单片机,由单片机进行控制它的整个程序编程部分如上总体流程图所示,首先要对四足机器人的路径规划、落脚点选择以反馈机械能否按照预期运行的信息,从而达到对四足机器人遇到不同情况进行不同的运动轨迹反19.__HAL_UART_GET21.uint16_ttmp=huart2.In22.tmp24.__HAL_UART_CLEAR_IDLEFLAG25.CLEAR_BIT(huart2.Instance->SR,U26.__HAL_DMA_DISABLE(huart28.temp=huart2.hdmarx->In31.32.Get_Remote_info(&RC_CtrlD34.HAL_UART_Receive_DMA(&huart2,(35.SET_BIT(huart2.Instance->CR1,37.__HAL_DMA_SET_COUNTER(huart2.hd38.__HAL_DMA_ENABLE41.voidGet_Remote_info(RC_Ctrl_t*rc_ctrl,volatileconstuint8_t)53.rc_ctrl->mouse.press_l=54.rc_ctrl->mouse.press_r=58.rc_ctrl->rc.ch[0]-=RC_CH_V59.rc_ctrl->rc.ch[1]-=RC_CH_V60.rc_ctrl->rc.ch[2]-=RC_CH_VALUE_61.rc_ctrl->rc.ch[3]-=RC_CH_VALUE_62.rc_ctrl->rc.ch[4]-=RC_CH_VALUE_}/****************************************************陀螺仪数据解析储存结构体**16./***************************1./***************************2.*********************电机数据解析储存结构体****17./*******************************************2.voidget_motor_measure(motor_measure_这两个角度算出上关节所需运动的角度theta1和theta2从而根据实际电机传动结构得出电机所需),参考文献[8]石美玉周欣荣.水轮机修复专用机器人本体测控系统开发研究-《黑龙江工程学院学报》-2004.[9]周寿明1邓成良2.可用于生产线的工业机器人研究-《科技创新导报》-2008.[10]许东来张绍立余跃庆.基于柔性机器人的集成控制融合实验研究探讨-《微计算机信息》-2006.[11]朱彦齐陈玉芝.浅谈工业机器人在自动化控制领域的应用-《职业》-2010.[12]高向东丁度坤赵传敏.机器视觉型焊缝跟踪技术-《焊接》-2006.[14]黄一平.基于运动模体机器人的软件编程应用-《信息技术与信息化》-[15]C51单片机的开发与应用高铭泽-《硅谷》-2011.[17]李卫强董良雄严闻奇杨雨滨.基于小型移动设备的机舱数据采集辅助系统[J].机电工程,2015(09):121-124.[18]王伟.基于PROTEUS与KEILC51软件平台的单片机仿真教学[J].电子制作,2015(13):96-96.[19]高铭泽.C51单片机的开发与应用[J].硅谷,2011(23):87-88.[20]叶强戴建松高杉高润.基于微机电系统运动传感器在人体运动测量中的应用[J].中国组织工程研究,2012(09):193-198.[21]孙戴魏.浅议单片机原理及其信号干扰处理措施[J].企业导报,2012(03):296-297.2010(28):257-258.[23]孔旭.仿人关节型机器人创新平台设计与开发[J].信息与电脑(理论版),2011(03):57-57[24]吴泳.无人机多传感器的集成与同步控制[J].自动化应用,2012(08):71-73.[25]李杰胡旭东赵匀.开放式结构平台上PUMA560机器人控制系统的研究[J].机械设计与研究,2002(05):19-21.#include"remote_control.h"#include"stm32f4xx.h"#include"Detect_Task.h"uint8_trc_RxBuffer[RECEIVELEN];voidremote_control_init(void){RC_Init(rc_RxBuffer,RECEIVELEN);}//返回遥控器控制变量,通过指针传递方式传递信息constRC_Ctrl_t*get_remote_control_point(void){return&RC_CtrlData;}voidUSART2_IRQHandler(void){__HAL_UART_GET_IT_SOURCE(&huart2,UART_IT_IDLE)){uint16_ttmp=huart2.Ins__HAL_UART_CLEAR_IDLEFLAG(&huart2);CLEAR_BIT(huart2.Instance->SR,US__HAL_DMA_DISABLE(huart2.hdmarx{Get_Remote_info(&RC_CtrlData,rc}SET_BIT(huart2.Instance->CR1,U__HAL_DMA_SET_COUNTER(huart2.hdmarx,RECEIVELEN);__HAL_DMA_ENABLE(huart2.hdmarx);}}voidGet_Remote_info(RC_Ctrl_t*rc_ctrl,volatileconstuint8_t*sbus_buf){0123rc_ctrl->key.v=sbus_buf[14]|(sbus_buf[15]<<8);KeyBoardvaluerc_ctrl->rc.ch[4]=sbus_buf[16]|(sbus_buf[17]<<8);//!<//NULLrc_ctrl->rc.ch[0]-=RC_CH_VALUE_OFFSET;rc_ctrl->rc.ch[1]-=RC_CH_VALUE_OFFSET;rc_ctrl->rc.ch[2]-=RC_CH_VALUE_OFFSET;rc_ctrl->rc.ch[3]-=RC_CH_VALUE_OFFSET;rc_ctrl->rc.ch[4]-=RC_CH_VALUE_OFFSET;}//声明电机变量//底盘电机数据读取{{}{}{}if(ptr==&Leg_motor[0]){}}}}}}}}}}}}}//返回陀螺仪变量地址,通过指针方式获取原始数据{}//返回腿部电机变量地址,通过指针方式获得原始数据{}{{{{}}{{{//陀螺仪原始数据为弧度,把弧度转换为角度{}{}{}{}{}}}{uint8_ti[8];}uint8_ti[8];}{}#include"can_receive.h"#include"Position_Control.h"#include"arm_math.h"#include"stm32f4xx_hal.h"#include"NI_MING.h"#include"FreeRTOS.h"#include"3508_drive.h"#include"remote_control.h"#include"detect_task.h"#include"user_lib.h"#include"WT931.h"#include"jacobian.h"#include"dwt_stm32_delay.h"externramp_tstate_change_ramp;//voidMOTO_ANGLE_TOXY(floattheta1,flofp32Angle_Gain[3]={100,0,100};fp32SpeedGaitParams_tstate_gait_params[]={voidCoupledMoveLeg(uint8_tleg_num,floatt,GaitParams_t*params,floatgait_offset,SinTrajectory(t,parCartesianToThetaGamma(params,leg_directioTheta_Gamma_To_moto_angle(params,leg_num);//转换}CartesianToThetaGamma(params,leg_directioTheta_Gamma_To_moto_angle(params,leg_num);//转换}voidPositionControlThread(void{Leg_Moto_Data_Update(Angle_Gain{Trans_Jacobian(get_Leg_moto_Measure_Point(1)->total_angle,get_Leg_motoget_Leg_moto_Measure_Point(0)->given_current/1000.0f,get_Leg//printf("--%d--",HNi_Ming(0xf1,get_Leg_moto_Measure_Point(6)->given_current/1000.0f,get_Leg_motasure_Point(7)->given_get_Leg_moto_Measure_Point(0)->given_current/1000.0f,get_LegNi_Ming(0xf1,Leg_Move.Moto_Angle_Pid[6].fdb,get_Leg_moto_Measure_Point(7)->ro//Leg_Move.Moto_Angle_Pid[7].set,Leg_Move.Moto_Angle//Ni_Ming(0xf1,Detect_Judeg(1),Detect_Judeg(2),0,0);}{gait_params=state_gait_pa//ramp_init(&state_change_ramp,}//Angle_Gain[0]=P_1;Angle_Gain[2]=D_1;Speed_Gain[0]=P_2;Speed_Gain[2]=Angle_Gain[0]=350;Angle_Gain[1]=0.0f;Angle_Gain[2]=250;Speed_Gain[0]=450;SpeeLeg_Moto_Data_Update(Angle_GainAngle_Gain[0]=200;Angle_Gain[1]=0;Angle_Gain[2]=250;Speed_Gain[0]=450;Speed_GLeg_Moto_Data_Update(Angle_Gainsign_int16(get_remote_control_point()->rc.ch[4]),ssign_int16(get_remote_control_point()->rc.ch[4]),sAngle_Gain[0]=260;Angle_Gain[2]=250;Speed_Gain[0]=400;Speed_Gain[2]=Leg_Moto_Data_Update(Angle_Gainsign_int16(get_remote_control_point()->rc.ch[4]),ssign_int16(get_remote_control_point()->rc.ch[4]),sAngle_Gain[0]=120;Angle_Gain[2]=100;Speed_Gain[0]=220;Speed_Gain[2]=Leg_Moto_Data_Update(Angle_Gain-sign_int16(get_remote_control_point()->rc.ch[0]),-sign_int16(get_resign_int16(get_remote_control_point()->rc.ch[0]),s}-sign_int16(get_remote_control_point()->rc.ch[0]),-sign_int16(get_resign_int16(get_remote_control_point()->rc.ch[0]),s}Angle_Gain[0]=200;Angle_Gain[1]=0;Angle_Gain[2]=200;Speed_Gain[0]=350;Speed_GLeg_Moto_Data_Update(Angle_Gain}}}{}CoupledMoveLeg(1,t,¶ms2,leg1_offset,legparams3.stance_heigCoupledMoveLeg(2,t,¶ms3,leg2_offset,legparams4.stance_heigCoupledMoveLeg(3,t,¶ms4,leg3_offset,legSend_To_Moto(-(PI/2.0f-leg}voidstatic_gait(GaitParams_t//GaitParams_tparamsR=*params;GaitParams_tparamsparams3=*params;GaitParams_tparams4static_CoupledMoveLeg(0,t,¶ms1,leg0_offstatic_CoupledMoveLeg(1,t,¶ms2,leg1_offstatic_CoupledMoveLeg(2,t,¶ms3,leg2_off//params4.stance_hestatic_CoupledMoveLeg(3,t,¶ms4,leg3_offSend_To_Moto(-(PI/2.0f-leg}voidGetGamma(float*L,float*ga{}}}}{}{*L=pow((pow(x,2.0f)*theta=atan2((leg_direction*x}*sinusoidaltrajectorygeneratorfunctionwithffloatstanceHeight=params->stance_hefloatdownAMP=params->floatflightPercent=params->flight_per}}}CartesianToLegParams(params->x,params->y,leg_direction,&(params->L),GetGamma(¶ms->L,&}voidTheta_Gamma_To_moto_angle(GaitParams_t*params,uint8_tleg_num){//转换为水平与上switch(leg_num){{leg0theta_2=PI/2.0f-(params->theta)-(params->gamma);leg0theta_1=PI-2.0f*(params->gamma)-leg0theta_2;}break;{{leg2theta_2=PI/2.0f-(params->theta)-(paramms->gamma)-leg2theta_2;}br{leg3theta_2=PI/2.0f-(params->theta)-(paramms->gamma)-leg3theta_2;}br}}uint8_tIsValidGaitParams(GaitParams_t*params){//检验floatstanceHeight=pfloatflightPercent=pa}}}printf("Frequencycannotben}}}voidSend_To_Moto(floatRef_Angle_1,floatRef_Angle_2,floatRef_Angle_3,floatRef_Angle_4,floatRef_Angle_5,floatRef_Angangle_ref[8]={Ref_Angle_1,Ref_Angle_2,Ref_Angle_3,}moto_theta_1=PI-2*(gamma)-mAll_MOTO_ANGLE[0]=(-(PI/2.0f-moto_theta_1));All_MOTO_ANGLE[1]=(-(PI/2.0f-motoAll_MOTO_ANGLE[2]=((PI/2.0f-moto_theta_1));All_MOTO_ANGLE[3]=((PI/2.0f-moto_theta_2));All_MOTO_ANGLE[4]=((PI/2.0f-moto_theta_1));All_MOTO_ANGLE[5]=((PI/2.0f-moto_theta_2));A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论