历史上的今天
返回首页

历史上的今天

今天是:2024年09月26日(星期四)

正在发生

2021年09月26日 | 机器人搭建过程中的坑和未来的改进方向

2021-09-26 来源:CSDN博客

将机器人整体开源,同时总结一下机器人搭建过程中遇到的坑和未来的改进方向。在分享的文件里包含了结构设计、程序控制、以及其他模块相关供大家参考。

机器人原理分析

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

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

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

控制器设计

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

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

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

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

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

及结构设计

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

56mm全向轮 45元/个

42步进电机 25/个

42步进闭环模块 59.8元/个

LM2596S降压模块 20元

8T6-4飞控板 59.8元

GY-521六轴陀螺仪 25元

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

原理图如下所示:

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

程序部分

在 5中开发。

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

int M1_UP_IRQHandler (void) { u8 key_cal; (TIM_GetITStatus(TIM1,TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM1,TIM_IT_Update); flag_target=!flag_target; key_cal=KEY_S(0); if(state_flag==1)//矫正结束 { if(flag_target==1)//每读取两次陀螺仪控制一次 { Re_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(compu_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_ARRPreloonfig(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_PAETER*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); }

其余代码不全放出,可在文末点击“阅读原文”查看。

总结与展望

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

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

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

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

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

原文链接:https://blog.csdn.net/qq_42823167/article/details/118085368

责任编辑:haq

推荐阅读

史海拾趣

台湾奇力(Chip)公司的发展小趣事

奇力公司自创立之初,就致力于LED芯片的研发与生产。在技术积累方面,奇力公司不断引进先进的生产设备和技术人才,通过自主研发和合作创新,不断提升产品性能和质量。随着技术的突破,奇力公司逐渐在LED芯片市场上崭露头角,以其亮度高、性能稳定的产品赢得了客户的信赖。

Doodle Labs公司的发展小趣事

为了进一步扩大市场份额,Doodle Labs开始寻求国际合作和业务拓展。公司与多家国际知名的无人机制造商和物联网企业建立了合作关系,共同开发新的解决方案和产品。同时,Doodle Labs还积极开拓国际市场,将产品出口到欧洲、北美等地区。这些努力不仅为公司带来了更多的商业机会,也提升了Doodle Labs在国际市场的知名度。

台湾美丽微(FMS)公司的发展小趣事

2013年,FTDI推出了最新的嵌入式视频引擎(EVE)技术产品。这项技术将高度先进的图形控制器、显示器、音频和触摸功能集成到单一芯片中,为智能显示器的实施提供了高效、便捷的解决方案。这一创新不仅提升了FTDI在嵌入式系统领域的竞争力,也为公司在智能家居、工业自动化等多个领域的市场拓展提供了有力支持。

Chen Yang Technologies GmbH & Co KG公司的发展小趣事

电子行业市场竞争激烈,Chen Yang Technologies也面临着来自各方面的挑战。在某次全球经济危机中,公司遭遇了订单减少、资金紧张等困难。然而,正是在这样的困境中,Chen Yang Technologies展现出了顽强的生命力。公司迅速调整战略,优化成本结构,同时加大研发力度,推出了一系列具有竞争力的新产品。这些举措使得公司成功度过了危机,并在危机后的市场中获得了更大的发展空间。

Eagle-Picher公司的发展小趣事

Eagle-Picher公司的历史可以追溯到1843年,最初是由Edgar和他的兄弟Stephen J. Conkling在俄亥俄州辛辛那提成立的,专注于生产商业涂料颜料。随着时间的推移,公司经历了多次转型和变革。1847年,Stephen离开公司后,Edgar引入了新的合伙人威廉·伍德,并更名为康克林木业公司。随后,公司在不同的业务领域内扩展,直到1922年,Eagle-Picher正式进入电池市场,开始了其电子行业的历程。

Galil Motion Control Inc公司的发展小趣事

然而,Eagle-Picher的发展并非一帆风顺。1991年9月16日,位于密苏里州乔普林的Eagle-Picher工业公司电子部遭受了一场毁灭性的大火。火灾导致公司的电池生产设备化为灰烬,给公司的业务带来了巨大的打击。然而,Eagle-Picher并没有放弃,而是迅速组织力量进行重建和恢复生产。这一事件虽然给公司带来了短期的困难,但也展现了Eagle-Picher的坚韧和决心。

问答坊 | AI 解惑

LVDS to USB TS码流采集器(盒)/适配器

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 LVDS to USB TS码流采集器(盒)/适配器 将各类设备的SPI/LVDS (Low Voltage Differential Signaling)接口与PC设备的USB口连接,即能够方便的完成信号的传输和转换,截取TS(Transport stream) ...…

查看全部问答>

主流无线传输技术GPRS与CDMA之对比

流无线传输技术GPRS与CDMA之对比     王中碧   目前,基于GPRS/CDMA无线数据传输业务广泛在移动办公、工业控制、远程遥测等多方面应用,网络运营商中国移动GPRS和联通CDMA各有其特点。本文从网络的覆盖、带宽、频谱等方面对GPRS和 ...…

查看全部问答>

RasDial函数出不来!

嘿 各位:    现在我在做一个WINCE下GPRS拨号上网的程序,采用的模块是SIM300,但是现在遇到这样一个问题,当我调用RasDial函数进行拨号时如果有电话来,RasDial函数就出不来了(所以导致程序看上去像死机了),如果拨号过程中没有电话进 ...…

查看全部问答>

急求强人帮助(关于ADDA采样的问题)

我现在在培训电子设计大赛。刚用到c8051f120做ADDA实验。 我们是用调制好的0~2V的三角波(用数字信号发生器)输入单片机的AD进行AD转换。。。之前通过数信号发生器的波形偏移1V,将波形调制到0V以上(因为AD不采样负的电压)之后再用DA输出到示波器 ...…

查看全部问答>

pic16f877a与pic16f690的CCP模块问题

写了一个CCP捕捉用于红外线解码的程序,为什么在PIC16F877A中运行很正常,但当移值到PIC16F690时却不正常了,中断与主函数是一样的,CCP配置也是一样的,如下,难道PIC16F690的CCP捕捉需要什么特别的配置吗         ...…

查看全部问答>

说说我的应急灯

距离开始弄应急灯已经好长时间了,我一直还没弄出来!!:( 当初觉得挺简单的,很快就把电路弄出来了,并且很快收到了样片和PCB样板,紧接着就把两个样片炸了:( :( 。事后仔细看了一下MAX16824的资料,没有找到芯片炸了的原因,不过却发现了一个设计 ...…

查看全部问答>

随便设计了个pcb请给点建议

给maple随便设计的个外设板,自己用的希望对布线给点建议 说明 一.功能模块说明 1.继电器部分 信号输入:PIN9,PIN8 输出:PIN9-A,PIN9-B,PIN8-A,PIN8-B 输出由POWER_JACK供电与输入光耦隔离不共地 PIN9 PI ...…

查看全部问答>

哪位大侠很懂LM2596,求帮助

我要做一个开关电源电路设计,要用到LM2596,不是很懂它的内部结构和外部特性,哪位可以有这方面详细的解答,有急用!有重谢…

查看全部问答>

出售GT2440开发板,开机20次左右

出售GT2440开发板,开机20次左右,联系QQ:468169201,买来没怎么用,现在快毕业了,想转手下,或者换块其他板子…

查看全部问答>

LM3S系列的GPIO引脚备用功能配置是否具有一定的关联性?

请问LM3S系列的GPIO口在配置成备用功能时,有些相关联的功能引脚是否需配置成同一GPIO系列端口,例如:在配置LM3S9B96的QEI功能时,若引脚95(PE2)配置phB1功能,phB0是否一定要配置在引脚96(PE3)???…

查看全部问答>