当前位置:首页 > 公众号精选 > strongerHuang
[导读]关注星标公众号,不错过精彩内容来源| 达尔闻说作者| Jumping润本次毕业设计过程中,Jumping润受到过许多人的帮助,收获良多,在此将机器人整体开源,同时总结一下机器人搭建过程中遇到的坑和未来的改进方向。在分享的文件里包含了结构设计、程序控制、电路设计以及其他模块相关资料...

关注 星标公众,不错过精彩内容

来源 | 达尔闻说

作者 | Jumping润

本次毕业设计过程中,Jumping润受到过许多人的帮助,收获良多,在此将机器人整体开源,同时总结一下机器人搭建过程中遇到的坑和未来的改进方向。在分享的文件里包含了结构设计、程序控制、电路设计以及其他模块相关资料,对球上自平衡机器人感兴趣的小伙伴,可以在“达尔闻说”微信回复:球上机器人,资料供大家参考。如果想和他交流,可以下拉至文末去他的博客。

# 机器人原理分析 #

首先来看成品图:

如图所示,该机器人根据陀螺仪的位姿数据,通过三个全向轮驱动底部球体调整自己在球上的位置,保持动态平衡的同时实现全向移动。


保持动态平衡过程需要对机器人进行运动学分析,这里参考了平衡小车之家的运动学方程:

自平衡控制问题转化为三步:输入X、Y角度—控制器计算—输出A、B、C电机转速的控制模型。


# 控制器设计 #

首先考虑参考平衡车控制,球上自平衡机器人本质上依然是一个一阶倒立摆问题。

这里参考了飞思卡尔直立车的控制方法,采用串级PID控制器,外环PD角度环,内环速度PI环。


由于我的驱动方案选择的是42步进电机,在速度闭环的时候有些问题。正常的直流电机 编码器的控制方案可以通过编码器将轮子的真实速度计算出来,从而和控制器的理想转速作差,实现速度控制。


而我这里的速度闭环是通过计算上一个时钟周期时给步进电机的控制量,通过运动学方程分解,得到机器人的虚拟速度,与理想转速作差控制。我认为这种速度闭环方式还是存在一定缺陷的,但是在网上查看论文的时候我发现有很多自平衡机器人都是用42步进电机来实现速度闭环的,不知道是什么方法。


这里还可以好好思考一下为什么角度环要用PD控制,速度环要PI控制,角度环的P部分和D部分对机器人控制有什么影响?在很多CSDN调试平衡车的博客中都有解释,这里就留给大家思考了。


# 硬件及结构设计 #

自平衡机器人的硬件清单有:

56mm全向轮 45元/个

42步进电机 25/个 

42步进闭环模块 59.8元/个 

LM2596S降压模块 20元 

STM32F103C8T6-4飞控板 59.8元 

GY-521六轴陀螺仪 25元


用到的模块大致如上所示,C8T6的价格随着最近芯片涨价直线上升,我白嫖了实验室的两块板子,现在买一块实在太贵,可以等芯片价格稳定一些再买。其余开关排针等常见元件不再赘述。


使用立创EDA软件进行设计,原理图如下所示:

PCB走线与原理图设计打包放在GitHub中了,链接如下:https://github.com/1812598631/graduate-design

以上资料也可以在“达尔闻说”微信回复:球上机器人,获取。


机器人使用solidworks设计整体结构,底板可在淘宝定制6050太空铝切割,蓝色件为正常3D打印件。


# 程序部分 #

在keil 5中开发STM32。


控制程序采用定时器0.5ms定时中断的方式进行计算,每触发两次中断计算对电机控制一次,这里还是推荐大家采用外部中断读取GY-521上的INT引脚的方式,控制计算周期。GY-521上的INT引脚每5ms触发一次跳变,采用外部中断的方式可以严格保证读取位姿数据与计算处理同步。

int TIM1_UP_IRQHandler (void) { u8 key_cal; if(TIM_GetITStatus(TIM1,TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM1,TIM_IT_Update); flag_target=!flag_target; key_cal=KEY_Scan(0); if(state_flag==1)//矫正结束 { if(flag_target==1)//每读取两次陀螺仪控制一次 { Read_DMP(); //===读取倾角 scope(); return 0; } } if(key_cal==1)//矫正按键 { Angle_Zero_X=Angle_Balance_X; Angle_Zero_Y=Angle_Balance_Y; key_cal=0; Flag_Stop=0; } if(key_cal==2||key_cal==3)//矫正按键 { Flag_Stop=1;//关闭速度环I积分 key_cal=0; } Angle_Bias_X =Angle_Balance_X-Angle_Zero_X; //获取Y方向的偏差 Angle_Bias_Y =Angle_Balance_Y-Angle_Zero_Y; //获取Y方向的偏差 if(control_mode==0)//PID控制模式 { Encoder_Analysis(Motor_A,Motor_B,Motor_C); //正运动学分析,得到X Y方向的速度 Balance_Pwm_X= balance_X(Angle_Bias_X,Gyro_Balance_X);//X方向的倾角控制 Balance_Pwm_Y=-balance_Y(Angle_Bias_Y,Gyro_Balance_Y); //Y方向的倾角控制// if( flag_target_2==4)//速度环频率慢于加速度环 但是还没加速度环 // { Velocity_Pwm_X=velocity_X(compute_X); //X方向的速度控制 Velocity_Pwm_Y=velocity_Y(compute_Y); //Y方向的速度控制 // flag_target_2=0;// } Move_X =Balance_Pwm_X Velocity_Pwm_X; //===X方向控制量累加 Move_Y =Balance_Pwm_Y Velocity_Pwm_Y; //===Y方向控制量累加 Move_Z=0; Kinematic_Analysis(Move_X,Move_Y,Move_Z);//逆运动学分析得到ABC电机控制量 } Motor_A=Target_A;//直接调节PWM频率 Motor_B=Target_B;//直接调节PWM Motor_C=Target_C;//直接调节PWM//以下都是为了速度连续化处理防止突变 if(Motor_A==0) Motor_A=motor_a_last; if(Motor_B==0) Motor_B=motor_b_last; if(Motor_C==0) Motor_C=motor_c_last; Xianfu_Pwm(2000); Set_Pwm(Motor_A,Motor_B,Motor_C); Gyro_Balance_X_last=Gyro_Balance_X; Gyro_Balance_Y_last=Gyro_Balance_Y; Gyro_Balance_Z_last=Gyro_Balance_Z; Angle_Balance_X_last=Angle_Balance_X; Angle_Balance_Y_last=Angle_Balance_Y; Angle_Balance_Z_last=Angle_Balance_Z; motor_a_last=Motor_A; motor_b_last=Motor_B; motor_c_last=Motor_C; } return 0;}

对于电机控制,由于采用的驱动方案是步进电机,调速的方式是改变驱动步进电机的脉冲频率。我这里选择了三个定时器,动态调节定时器的频率,具体方式是在初始化时设定好定时器的预分频系数psc的值,然后在程序里动态更改ARR寄存器的值,从而改变定时器的定时频率。
//这里以A电机的速度控制为例 输入为 电机方向和电机速度void set_motorA_speed(u8 dir,u16 speed){ u32 arr; arr=speed; TIM_ARRPreloadConfig(TIM3,DISABLE); TIM3->ARR=arr;//计数到10000在归零重新计数 TIM3->CCR4=arr/2;//保持占空比为50% TIM_ARRPreloadConfig(TIM3,ENABLE); TIM_Cmd(TIM3,ENABLE); if(dir==0) { GPIO_SetBits(GPIOA,GPIO_Pin_1); } else { GPIO_ResetBits(GPIOA,GPIO_Pin_1); }}

小车的运动学分解代码实现如下,参考了平衡小车之家的代码:

/**************************************************************************函数功能:小车运动数学模型入口参数:X Y Z 三轴速度或者位置返回 值:无**************************************************************************/void Kinematic_Analysis(float Vx,float Vy,float Vz){ Target_A = Vx L_PARAMETER*Vz; Target_B = -X_PARAMETER*Vx Y_PARAMETER*Vy L_PARAMETER*Vz; Target_C = -X_PARAMETER*Vx - Y_PARAMETER*Vy L_PARAMETER*Vz;}/**************************************************************************函数功能:小车运动 正运动学分析 入口参数:A B C三个电机的速度返回 值:无**************************************************************************/void Encoder_Analysis(float Va,float Vb,float Vc){ compute_X=(Va*2-Vb-Vc); compute_Y=((Vb-Vc)*sqrt(3)); compute_Z=(Va Vb Vc); }其余代码不全放出,具体可转到:https://github.com/1812598631/graduate-design

# 总结与展望 #

球上自平衡机器人可以作为算法试验平台, 输入输出固定,更换不同控制器,将数据导入MATLAB进行分析即可比较控制器性能。


个人认为结构有两个改进方向,一方面参考以下论文:余义. 单球驱动自平衡机器人位姿解算与控制系统研究[D].武汉科技大学,2019。论文中采用的四足式驱动结构更有利于机器人自平衡控制。


另一方面可以增加球体和机器人固定装置,利用机械结构将机器人与底部驱动球结合成一个整体防止机器人跳轮等问题。同时驱动球对于机器人平衡的影响较大,最好还是定制空心钢球,然后喷漆增大摩擦力,最有利于机器人自平衡控制。


控制部分的改进,首先是控制原理,本文是针对建立好的运动学方程进行分析,通过串级PID算法来实现自平衡运动。该机器人的控制问题本质上是一阶倒立摆问题,可以采用动力学建模的方式,通过动力学分析算出平衡需要的虚拟力矩,再对电机进行力矩控制。


其次是控制器,PID控制算法应用广泛但也有一定的缺点,可以考虑采用模糊PID,ADRC自抗扰控制器,强化学习等智能控制算法对机器人自平衡进行控制。


主要参考论文

[1]余义. 单球驱动自平衡机器人位姿解算与控制系统研究[D].武汉科技大学,2019.

[2]刘桐. 基于三全向轮驱动的球轮自平衡机器人的研究与实现[D].北京工业大学,2018.

[3]韩京清.从PID技术到“自抗扰控制”技术[J].控制工程,2002(03):13-18.


本文为CSDN博主Jumping润的原创文章,原文出处链接:

https://blog.csdn.net/qq_42823167/article/details/118085368


免责声明:本文来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。
------------ END ------------

●嵌入式专栏精选教程●精选汇总 | ST工具、下载编程工具●精选汇总 | 嵌入式软件设计与开发●精选汇总 | STM32、MCU、单片机
迎关注我的公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。
欢迎关注我的视频号:


点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

TDK 株式会社(东京证券交易所代码:6762)隆重宣布其具有片上处理能力的 InvenSense SmartSonic™ICU-10201 超声波飞行时间 (ToF) 传感器全面上市。该传感器可助力实现高性能和低功耗的...

关键字: 飞行传感器 物联网 机器人

ST4E1240 是意法半导体新系列收发器芯片的首款产品,为现代高性能工业应用提供强大而可靠的 RS-485信号传输解决方案。新收发器支持的数据速率远高于原有的RS-485 标准,可以延长电缆长度实现多点连接,总线上的收...

关键字: 工业自动化 智能建筑 机器人

机器人技术将与移动互联网、物联网、大数据、云计算、人工智能等新一代数字技术进一步融合,特别是5G技术将使工业机器人成为工业智能制造体系的一部分,通过实时传输数据提高效率。

关键字: 机器人 医疗机器人 互联网

这项民意调查使业界有助于了解工业5.0是否准备就绪

关键字: 工业5.0 工业4.0 机器人

在微控制器领域,MSP430与STM32无疑是两颗璀璨的明星。它们各自凭借其独特的技术特点和广泛的应用领域,在市场上占据了重要的位置。本文将深入解析MSP430与STM32之间的区别,探讨它们在不同应用场景下的优势和局限...

关键字: MSP430 STM32 单片机

在科技迅猛发展的今天,履带机器人在诸多领域展现出了广泛的应用前景,从现代农业的采摘、喷药,到消防领域的救援,再到现代化防疫中的喷雾消毒,甚至是复杂地形的运输任务,它们都能出色地完成任务。而驱动这些履带机器人的核心部件,便...

关键字: 履带机器人 机器人 电机

今天,小编将在这篇文章中为大家带来机器人的有关报道,通过阅读这篇文章,大家可以对它具备清晰的认识,主要内容如下。

关键字: 机器人 机器人学

机器人操作系统(ROS)驱动程序基于ADI产品而开发,因此可直接在ROS生态系统中使用这些产品。本文将概述如何在应用、产品和系统(例如,自主导航、安全气泡地图和数据收集机器人)中使用和集成这些驱动程序;以及这样将如何有助...

关键字: 电机控制器 机器人 嵌入式

长期专注于B端垂直领域的小笨智能,用一个个落地的“AI+机器人”,成为行业智慧服务解决方案服务商。

关键字: AI 机器人

华润啤酒(控股)有限公司(简称“华润啤酒”)于香港联合交易所有限公司上市(股份代号:00291),为恒生指数成份股之一,专注于生产、销售及分销酒类产品。2023年,华润啤酒设立华润雪花与华润酒业两大事业部,分别负责啤酒及...

关键字: 自动化 智能化 机器人
关闭
关闭