0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

机器人搭建过程中的坑和未来的改进方向

STM32嵌入式开发 来源:CSDN博客 作者: Jumping润 2021-09-26 10:59 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

机器人原理分析

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

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

自平衡控制问题转化为三步:输入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的价格随着最近芯片涨价直线上升,我白嫖了实验室的两块板子,现在买一块实在太贵,可以等芯片价格稳定一些再买。其余开关排针等常见元件不再赘述。

电路原理图如下所示:

7cbf0d6e-136a-11ec-8fb8-12bb97331649.png

机器人使用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); }

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

总结与展望

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

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

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

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

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

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

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    215

    文章

    31800

    浏览量

    224989
  • STM32
    +关注

    关注

    2315

    文章

    11223

    浏览量

    375724

原文标题:STM32自平衡机器人项目,附代码、电路图等资料

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    机器人超声波避障测距

    。同时产品环境适应性强,温漂控制优异,可长期稳定运行于室内、仓储、轻度潮湿粉尘等复杂工况,是高端服务机器人与工业AGV的经典配套器件。 尽管倍加福进口传感器性能优异,但在行业大批量量产落地过程中
    发表于 06-10 17:20

    江智康养机器人

    均由江智机器人公司7X24小时无间断负责,康养机构主要是体验使用。同时江智机器人公司会对康养机构放置的机器人进行效果评价,并将评价结果反馈给康养机构。一起改进提升,让
    发表于 06-06 09:20

    为什么说人形机器人炫技大于实用,复合机器人未来工厂核心设备

    的复合机器人,才是未来10年支撑工厂柔性升级、实现整厂无人化的核心设备。人形机器人:舞台惊艳,工厂“水土不服”人形机器人的核心优势是仿生通用性,但在工业场景
    的头像 发表于 05-08 17:23 1446次阅读
    为什么说人形<b class='flag-5'>机器人</b>炫技大于实用,复合<b class='flag-5'>机器人</b>是<b class='flag-5'>未来</b>工厂核心设备

    六维力传感器:当机器人拥有“真实触觉”,未来会发生什么?

    的“触觉神经”。虽然不起眼,但它正在悄悄改变智能制造和机器人共处的未来。 六维力传感器是什么? 简单说,六维力传感器也叫六轴力传感器,是目前能测量力的“最全能的选手”。它能同时测出三个方向
    发表于 04-29 16:29

    NVIDIA Cosmos世界基础模型如何塑造机器人未来

    在这一演进过程中,世界模型逐渐成为连接高层智能与底层执行的关键基础设施。通过对环境状态及其时间演化进行建模,世界模型使机器人系统能够在受控环境中进行仿真、训练与决策推演,从而为机器人在真实物理世界
    的头像 发表于 01-22 16:38 974次阅读
    NVIDIA Cosmos世界基础模型如何塑造<b class='flag-5'>机器人</b><b class='flag-5'>未来</b>

    探索RISC-V在机器人领域的潜力

    运行ROS 2,充分证明了RISC-V架构完全有能力承载机器人操作系统这样的复杂软件栈。它不仅是学习RISC-V的绝佳工具,更是探索未来边缘计算和智能机器人的一个强大起点。 致谢: 感谢进迭时空、发烧友提供开发板,以及论坛
    发表于 12-03 14:40

    高压放大器在机器人攀爬速度测试实验的应用

    是否能够在杆上成功爬升,并使用高速相机对上升过程进行了记录,通过获得爬杆机器人的各项关键性能指标与理论设计进行对比,为机器人未来版本的优化与改进
    的头像 发表于 11-26 10:48 465次阅读
    高压放大器在<b class='flag-5'>机器人</b>攀爬速度测试实验<b class='flag-5'>中</b>的应用

    高精度机器人控制的核心——基于 MYD-LT536 开发板的精密运动控制方案

    一、背景:机器人迈向“微米级控制时代” 随着智能制造和自动化产业的持续升级,工业机器人不再仅仅承担重复搬运,而是被要求在装配、检测、精密加工等高精度场景完成微米级控制任务。 在这些“高精度
    发表于 11-14 15:48

    小萝卜机器人的故事

    代替, LED, 有大佬感兴趣, 一起关注和讨论代码, 这个机器人知名度不高, 可是是机器人的原型, 如果开放接口, 定位和无线充电, 也不失为未来的礼物。 让我们为小萝卜工程师的, 自掏腰包救萝卜
    发表于 10-23 05:24

    自制巡线解迷宫机器人(上)

    一玩,当然如果你在使用的过程中遇到了一些问题,欢迎在GitHub上给我提交Issues或者在文章评论区里留言,有空的话我肯定会及时回复的。 巡线解迷宫机器人图1原理 硬件 电机电源层 电机电源层
    发表于 10-20 10:39

    什么是机器人?追溯机器人技术的演变和未来

    作者: Aswin S Babu 什么是机器人? 在日常生活里,“机器人”一词我们都不陌生,日常交谈也常常脱口而出。但大家可曾细想过,这个词的真正含义究竟为何?接下来,不妨花些时间,深入探究
    的头像 发表于 10-02 16:32 6015次阅读
    什么是<b class='flag-5'>机器人</b>?追溯<b class='flag-5'>机器人</b>技术的演变和<b class='flag-5'>未来</b>

    机器人竞技幕后:磁传感器芯片激活 “精准感知力”

    2025 世界人形机器人运动会于 8 月 17 日圆满收官,赛场上机器人在跑步、跳跃、抓取等项目中的精彩表现,背后是运动控制、环境感知等技术的迭代升级。而在这些技术,磁传感器芯片凭借独特优势,成为
    发表于 08-26 10:02

    机器人芯片:智能机器的“大脑”与未来趋势

    、低功耗和强适应性的方向演进,推动机器人应用迈向更广阔的领域。   机器人芯片的关键作用    机器人芯片主要包括中央处理器(CPU)、图形处理器(GPU)、神经网络处理器(NPU)和
    的头像 发表于 07-31 13:43 1528次阅读

    智造未来:工业机器人关键技术突破与场景化应用趋势

    动能。 尽管人形机器人凭借科幻形象备受瞩目,但在制造业智能化转型的浪潮, 工业机器人 仍是不可或缺的核心力量。 智能制造工业机器人应用 (一)政策 中国在推动
    的头像 发表于 07-31 09:09 911次阅读
    智造<b class='flag-5'>未来</b>:工业<b class='flag-5'>机器人</b>关键技术突破与场景化应用趋势

    工业机器人的特点

    的基础,也是三者的实现终端,智能制造装备产业包括高档数控机床、工业机器人、自动化成套生产线、精密仪器仪表、智能传感器、汽车自动化焊接线、柔性自动化生产线、智能农机、3D 打印机等领域。而智能制造装备工业
    发表于 07-26 11:22