背景

自平衡车有很多种,其中一种是利用惯性轮倒立摆原理,早在2003年,日本的村田顽童就已经问世,它采用的就是惯性轮倒立摆原理。后来其他研究组织和个人纷纷效仿,制作出了五花八门的基于惯性轮倒立摆原理的直立机器人。

在2015年8月的飞思卡尔(现在是恩智浦)全国大学生智能车竞赛的创意组比赛中,规则就是要用任何直立车完成一圈比赛。其中有学校使用的方案就是惯性轮倒立摆。

还有一些其他的例子:
https://edgetriggered.wordpress.com/2012/02/22/its-alive/,这是有人在2012年2月实现的利用惯性轮倒立摆原理的独轮车。
http://www.guokr.com/post/713382/,2015年12月实现。

我目前在做的工作也和此相关,不过是把独轮车换成自行车,靠舵机转把来转向。该方案目前仍有很多问题,所以我把我的所有机械尺寸参数和硬件选型以及控制算法列出,如果有在做同样工作的朋友欢迎与我交流。

目前能实现的效果:

稳定直立5min以上:

https://v.qq.com/x/page/w0532v1s3zg.html

可以直行走一段距离:

https://v.qq.com/x/page/r0532ium7xw.html

机械结构

示意图:

实物图:

尺寸及重量:

自行车高(从地面到飞轮中心)320mm,长450mm,自行车重1.8kg。飞轮半径75mm,质量0.3kg。电池绑在自行车侧面,重0.2kg。

硬件选型

1.电机rs540 70t电机
https://item.taobao.com/item.htm?spm=a230r.1.14.257.ebb2eb2jEGU9c&id=15498785922&ns=1&abbucket=6#detail,选择的是70T,用来驱动飞轮。(不是打广告,从视频里可以看出,我确实用的就是这款电机)

2.180线AB相编码器,用来测量飞轮转速。

3.mpu6050,检测自行车的倾斜角度和角速度,没有用DMP功能,直接读取原始值用程序滤波。

控制程序

两个关键的函数:

1.飞轮转速补偿:(如果没有,飞轮转速在平衡过程中会一直上升,不能长时间稳定平衡)

void speed(void)
{speed_feedback = 0 - Encoder;                 //Encoder是飞轮转速speed_feedback_derror = speed_feedback - speed_feedback_pre;speed_feedback_pre = speed_feedback;speed_integral += speed_feedback * speed_i;Run = speed_feedback * speed_p + speed_integral + speed_d * speed_feedback_derror; //得到飞轮转速的补偿量,在后续计算过程中会用到。
}

2.电机转速计算:

void balance(void)
{//gyro_x是横滚角速度,gyro_xx是其微分gyro_xx = gyro_x-pre_gyro_x;pre_gyro_x = gyro_x;Angle_Balancenormal += gyro_x * kgyo1 + (accangle_x-Angle_Balancenormal) * gbtg1;     //正常互补滤波,需要调的参数有kgyo1和gbtg1Angle_Balancecal += gyro_x * kgyo2 + (accangle_x-Angle_Balancecal) * gbtg2 + Run;     //计算控制量用的互补滤波,需要调的参数有kgyo2和gbtg2Motor = Angle_Balancecal * stand_p + gyro_x * stand_d + gyro_xx * stand_i;            //计算最终电机转速。
}

最终控制是定时中断程序,定时中断间隔5ms,首先进行飞轮转速,车身横滚角速度和角度的采集,然后计算飞轮转速的补偿量,最后计算平衡需要的电机转速,通过pwm信号输出来控制电机。具体代码如下:

int TIM1_UP_IRQHandler(void)
{    if(TIM1->SR&0X0001)                     //5ms定时中断{   TIM1->SR&=~(1<<0);              //===清除定时器1中断标志位 智能硬件置位,软件复位        Encoder=Read_Encoder(2);        //采集飞轮转速,采用的是AB相编码器Get_Angle();                    //采集mpu6050返回的角速度和角度speed();balance();Set_pwm(-Motor);                //===赋值给PWM寄存器  }           return 0;
}

关于控制程序中参数的调试问题

重要的参数有5个:

两个互补滤波参数,直立的pd,速控的p。

第一步:先调直立p,可以在平衡位置摆动,即偏离平衡位置可以轻微的越过平衡位置到另一边。

第二步:把第一步调好的p给0,再调直立d,感觉在平衡位置摆动有轻微阻力。加上第一步调好的p,可以直立2到3s甚至更长就算调好了d,这时飞轮转动不会收敛,最后会因转动速度过快倒下。

第三步:调试飞轮转速的p,调到可以直立1min甚至更长时间。

曾经推倒过数学模型,但是能力有限,还不能把数学模型直接转换为算法,参考了一些资料,按照自己的想法写了简单的控制算法,不足之处肯定会有,但还是实现了直立的功能。

欢迎有兴趣或者做过这方面东西的同道找我交流,QQ:1006325356。

基于惯性轮倒立摆原理的自行车相关推荐

  1. 基于matlab的倒立摆设计,基于matlab的倒立摆设计.doc

    基于matlab的倒立摆设计.doc 摘要IAbstract.II第一章绪论11.1倒立摆的研究背景.11.2国内外现状.21.3应解决的问题和技术要求.21.4工作内容.3第二章MATLAB仿真软件 ...

  2. matlab模糊控制 论文,基于matlab的倒立摆模糊控制毕业论文报告.doc

    基于matlab的倒立摆模糊控制毕业论文报告 (此文档为word格式,下载后您可任意编辑修改!) 智能控制理论及应用 课程设计报告 题 目: 基于matlab的倒立摆模糊控制 院 系: 西北民族大学电 ...

  3. 基于LQR的倒立摆控制——python代码——dlqr步骤推导

    推荐一个自动控制小车开源项目:本文结合老王自动驾驶控制算法第五讲的离散LQR进行学习复盘 Inverted Pendulum Control - PythonRobotics documentatio ...

  4. matlab穆尔,基于matlab(矩阵实验室)的倒立摆控制系统仿真(34页)-原创力文档

    基于MATLAB的倒立摆控制系统仿真 摘 要 自动控制原理(包括经典部分和现代部分)是电气信息工程学院学生的一门必修专业基础课,课程中的一些概念相对比较抽象,如系统的稳定性.可控性.收敛速度和抗干扰能 ...

  5. Matlab直线一级倒立摆控制方法研究

    1 研究背景 倒立摆是一个开环不稳定的强非线性系统,其控制策略与杂技运动员顶杆平衡表演的技巧有异曲同工之处,目的在于使得摆杆处于临界稳定状态,是进行控制理论研究的典型实验平台.20世纪50年代,麻省理 ...

  6. 【双足机器人(1)】线性倒立摆及其运动控制(附代码)

    1. 简介 在仿人双足机器人的控制里面,可以将机器人模型简化为一个线性倒立摆模型(下图来自梶田秀司教授的<仿人机器人>[1],该书电子版可在公众号后台回复[HR]获得),用于机器人的平衡控 ...

  7. 【原理分析】Google炫炸天的平衡自行车仅仅是概念吗?来看看惯性轮自行车吧...

    1.聊一聊 今天分享一曲经典的bgm,至少90%的人听过,应该只有10%的人知道它的名字,听完以后精神倍佳,听的时候记得闭上眼睛想象一下这个浩大的乐队,也许这才是音乐的魅力! 好了,今天为大家带来一些 ...

  8. MATLAB中SSQJ,基于lqr的一级倒立摆仿真研究

    基于lqr的一级倒立摆仿真研究 综合性实验设计题目:直线一级倒立摆班级:0802姓名:郭长春指导老师:张白莉学号:200807211065摘要倒立摆是一个复杂的多变量强祸合不稳定非线性的系统,借助于这 ...

  9. 基于树莓派的电机倒立摆控制系统开发

    目录(注:完整论文和代码私聊QQ2522170001) 第1章绪论 1.1背景和意义 1.1.1 背景 1.1.2 意义 1.2 国内外研究现状 第二章 倒立摆设计方案 2.1 倒立摆系统建模 2.2 ...

最新文章

  1. 174. Dungeon Game
  2. 线性时间选择问题——分治
  3. shell脚本编程之控制脚本
  4. Bash: Removing leading zeroes from a variable
  5. ajax使用json下拉框,ajax请求后台得到json数据后动态生成树形下拉框的方法
  6. JZOJ 5453. 【NOIP2017提高A组冲刺11.5】好路线
  7. 多久能学会前端?怎么学?
  8. 为什么要“男孩穷养、女孩富养”
  9. 思科nat配置实例_Cisco ASA 5520(8.2.4)配置企业内网案例
  10. 1.5.7、CDH 搭建Hadoop在安装之前(定制安装解决方案---配置单用户模式)
  11. cf319.B. Modulo Sum(dp 鸽巢原理 同余模)
  12. python numpy安装
  13. ideaIU--2018.2.2安装教程
  14. vue模板引擎_Vue.js模板引擎理解
  15. 泰勒公式推导及多元泰勒展开式
  16. 计算机分盘介质受写入保护,硬盘介质受写入保护怎么办
  17. 情境领导模式(权变)
  18. 少林寺公布武功秘籍 揭开绝技神秘面纱(组图)
  19. 幼儿-知识与能力【1】
  20. antd vue form 手动校验_Ant Design 4.0 的一些杂事儿 - Form 篇

热门文章

  1. oracle create bigfile tablespace,create bigfile tablespace
  2. Power BI介绍
  3. python可视化小程序-实际利率与黄金价格走势图
  4. 不同平方的电线都能带动哪些家用电器
  5. 乐视pro3精英版乐视X722线刷兼救砖_纯净刷机包_教程
  6. 用vue element-ui分页组件构建一个简单的分页 ( 超详细 )
  7. OCMJ8X15B金鹏液晶屏驱动程序+字库规律
  8. erlang 开源项目之 Bigwig
  9. 富途客户端软件测试笔试and面试
  10. Laravel-hyn/multi-tenancy多租户扩展的使用