查看: 3634|回复: 9

【提供源码】只需两步超简单制作自平衡小车

[复制链接]
  • TA的每日心情
    擦汗
    2014-7-18 09:38
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2015-3-27 16:17:22 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 ITEAD创易工作室 于 2015-3-30 17:54 编辑

    小伙伴们大家好,此篇帖子将是我们的两轮自平衡小车专题教程。

    IMG_0406.JPG
    你只需要一个UNO和一个ITEAD提供的自平衡扩展板,再加上你的小车底盘就可以了。
    UNO+ 自平衡.jpg +自平衡扩展板+小车底盘
    视频镇楼:
    http://player.youku.com/player.php/sid/XOTIxNTk1Njgw/v.swf

    一、平衡小车原理
    自平衡小车是利用车模自身动力使小车保持相对的平衡,是一个动态平衡的过程。维持车模平衡的动力来自车轮的运动,由两个直流电机驱动。对车模的控制可以分解为三个控制任务:
    1、控制小车平衡:通过控制小车车轮正反转使小车保持直立平衡。
    2、控制小车速度:通过控制小车的倾角实现小车前后运动和速度的控制,其实最终的仍是通过控制电机的转速实现。
    3、控制小车方向:通过控制小车两个电机之间的转速差来实现转向控制。

    分解为三个控制任务显得相对简单一点,但是在最终的控制过程中都归结为对一个控制量的控制,这样三个任务之间就会存在耦合,会相互干扰。三个任务中控制平衡是关键,所以对小车的速度和方向控制应该尽量的平滑。
    二、硬件方案设计
    小车的硬件分为三个部分,分别是主控部分、小车姿态获取部分以及电机驱动部分。主控板采用目前常用的arduino UNO,同时也可以使用其他arduino通用控制板做主控。
    小车姿态获取可以有很多方案,使用最多的就是通过加速度计和陀螺仪获取小车姿态。理论上只需要两轴加速度计(垂直方向Z轴和沿小车运动方向X轴)和一个单轴陀螺仪(沿小车车轮轴方向,获取绕小车轮轴的角速度)。陀螺仪通过角度积分可以获得小车角度,但是经过积分会产生累计误差,并且会越来越大,X轴与Z轴加速度计的值也可以算出小车的倾角,但是加速度计的瞬时误差较大,所以结合陀螺仪和加速度计两者获得的角度做数据融合可得真实角度。我们使用一个集成了三轴加速度计和三轴陀螺仪的集成芯片MPU6050,这样极大的简化了我们的传感器电路。
    小车通过两个直流电机驱动车轮运动来获得动力,直流电机的驱动电路设计关系到整个系统的稳定性,因为电机反转时会产生反向电动势会干扰到电源系统内其他设备的运行。我们选用L298P做电机驱动器,它内部包含4通道逻辑驱动电路,可同时驱动两个直流电机,输出电流可达2.5A。

    ziph.jpg
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2014-7-18 09:38
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2015-3-27 16:19:07 | 显示全部楼层
    本帖最后由 ITEAD创易工作室 于 2015-3-30 17:53 编辑

    三、软件设计之小车姿态获取---卡尔曼滤波
    在开始之前应该对MPU6050进行设置,主要设置角速度以及加速度的量程,加速度量程有±2g、±4g±8g与±16g,角速度量程分别为±250、±500、±1000与±2000°/sec (dps),可准确的追踪快速动作与慢速动作。在使用之前先设置好量程以便后面的换算。我们小车轮轴与传感器Y轴平行,即绕Y轴旋转则有:
       那竖直方向弧度计算公式为: angle = atan2(x, z)   //结果以弧度表示并介于 -pi 到 pi 之间(不包括 -pi)
        如果要换算成具体角度:    angle = atan2(x, z) *(180/3.14)
    陀螺仪获取角速度积分得到角度公式为:anglen = anglen-1 + gyronn*dt ,式中anglen 为第N次采样的角度值,anglen-1 为第N-1次的角度值,gyronn为两次采样值之间的角速度值,dt为两次采样之间的时间。然后将换算后的两个角度数据进行卡尔曼滤波融合,可获得小车真实角度,也可以采用更简单的互补滤波算法。
    注意加速度计所得角度与陀螺仪积分角度的方向。
    6轴.jpg

    四、软件设计之小车姿态调整---PID参数整定
    小车的姿态获取最终结果是一个角度,就是小车偏离平衡位置的倾角。通过以小车的这个倾角为变量进行PID控制,输出用于控制车轮转速的PWM值,那么相当于小车只有一个角度反馈环路,虽然能使小车平衡,但是增加了控制难度,所以通常会使用带测速的电机,再加入一个小车速度反馈环路,这样使得小车更容易控制。关于PID的有下面一个简单易懂的描述:
    爬坡.jpg
    假设我们想把一个小球稳定在一个光滑的坡顶,这显然是一个不平衡的系统,稍有扰动小球就会滚下来。假设恰好平衡的位置坐标是L,我们可以测量到小球的位置是x,那么怎么给小球施加f(x)的力反馈,让它能够平衡呢?
    最直观的想法就是f(x) =Kp*(L-x),简单的说就是你在左边我就向右推,你在右边我就向左推,这就是比例因子P;
    现在考虑两种情况,同样是在x位置,小球静止和小球具有速度V这两种情况。很明显,如果V>0,我们只需要施加更小的力,因为小球自身的惯性会让它运动向平衡位置。所以可以修正f(x) = Kp*(L-x) – Kd*V。因为速度一般不容易测量,我们常常用位置的变化Δx除以测量的时间差Δt来计算速度,所以这就是微分因子D;
    情况继续发生变化,上面考虑的是斜坡静止的情况,如果这个变态的斜坡是移动的怎么办呢?(例如两轮平衡机器人实际上是可以运动的,对于静止的磁悬浮来说,不需要考虑这个参数)这时候我们需要不断的累加并平均x值,来计算平衡位置的L,这个就是积分因子I;
    当PID用在我们自平衡小车中时,我们使用角度PD环与速度PI环进行控制。
    pwm=angle*k1+angle_dot*k2+range*k3+wheel_speed*k4;  
    PID参数整定步奏如下:
    1、将k1,k2,k3,k4均设为0;
    2、逐步增大k1,使得小车刚好能够来回摆动。
    3、再逐步增大k2,使得小车相对平稳,太大会使小车发生抖动;
    4、增大k3,使得小车能够来回走动(不是摆动也不是抖动);
    5、增大k4,使得小车能稳定自平衡。
    具体参数调整过程比较繁琐,需要自己体会每个参数的作用。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2014-7-18 09:38
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2015-3-27 16:19:43 | 显示全部楼层
    本帖最后由 ITEAD创易工作室 于 2015-3-30 17:57 编辑

    源码:下载附件。解压后整个文件夹放到arduino的libraries文件夹里面。只需打开并烧写Self_balancing.ino这个代码例程。

    ITEAD_Self_balancing.zip

    4.52 KB, 下载次数: 39

    两轮自平衡小车源码

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2015-5-29 17:30
  • 签到天数: 31 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2015-3-28 07:17:00 | 显示全部楼层
    奔着标题进来的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2015-11-14 06:57
  • 签到天数: 382 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-3-28 07:26:06 | 显示全部楼层
    奔着标题进来的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-21 08:52
  • 签到天数: 505 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-3-28 08:10:54 | 显示全部楼层
    奔着标题进来的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2014-7-18 09:38
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

     楼主| 发表于 2015-3-31 11:53:10 | 显示全部楼层
    lucky_prtemly 发表于 2015-3-28 08:10
    奔着标题进来的

    3楼已开出源码了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-4-8 17:22:03 | 显示全部楼层
    源码都出来了,谢谢lz分享,还有分析原理
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-4-12 11:43:48 | 显示全部楼层
    厉害,尤其是PID分析那块,谢谢了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2014-7-18 09:38
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

     楼主| 发表于 2015-4-17 15:17:46 | 显示全部楼层
    corexian 发表于 2015-4-12 11:43
    厉害,尤其是PID分析那块,谢谢了

    共同学习~知道了原理,自平衡说简单也简单。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-20 09:56 , Processed in 0.198256 second(s), 33 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.