基于光传感器的自平衡车实验
2016-01-04谢丰泽
谢丰泽
摘 要:电动自平衡车大大地简化了车体结构,能够实现原地旋转和任意半径转向,移动轨迹更为灵活易变,减少占地面积,因此成为现代人们喜爱的代步和应用工具之一。由于具有结构简单、运行稳定、能量利用率高、环境适应性强等优点,无论是在军事领域还是在民用领域都具有非常广阔的应用前景。该文结NXT2.0以及LEGO9797等软硬件资源,组装了平衡小车,并且对自行设计的PID算法进行了实验和验证,取得了满意的结果。有助于中学生理解智能小车原理,学会NXT语言,掌握和准确运用PID算法;设计性和综合性强,包括硬件组装,算法设计和程序编写,物理知识的应用;有助于激发中学生对机器人、以及科学实验的兴趣,提高动手能力,创新能力,培养创新意识。
关键词:平衡车 算法 实验
中图分类号:TP24 文献标识码:A 文章编号:1674-098X(2015)10(a)-0251-04
Experiment of Self-Balancing Little Car Based on a Light Sensor
Xie Fengze
(Chengdu shuter middle school,Chengdu Sichuan,610000,China)
Abstract:Electric self-balancing vehicle car body structure is simplified greatly,can realize to spin around and arbitrary radius, mobile trajectory is more flexible and variable,reduce cover an area of an area,thus became one of the modern people love walking and application tools.Because of its simple structure, stable running, high energy utilization and environment adaptable advantage, whether in the military field and civilian field has very broad application prospect.Software and hardware resources,this paper NXT2.0 and LEGO9797 assemble the balance of the car, and designed the PID algorithm for the experiments and verification,and satisfactory results were achieved.Help students understand the principle of intelligent car,learn the NXT languages,grasp and accurate use of PID algorithm;Design and comprehensive strength, including the hardware group.
Key Words:Balanced;Algoritm;Experiment
电动自平衡车大大地简化了车体结构,能够实现原地旋转和任意半径转向,移动轨迹更为灵活易变,减少占地面积,因此成为现代人们喜爱的代步和应用工具之一。由于具有结构简单、运行稳定、能量利用率高、环境适应性强等优点,无论是在军事领域还是在民用领域都具有非常广阔的应用前景。两轮自平衡车是一个多变量、非线性、高阶次、强耦合、本质不稳定的运动控制系统,是检验各种控制理论和控制方法的典型装置,因而,对其研究有很大的理论和实践意义。市场上主要有独轮和双轮两类平衡车。它们一般都根据被称为“动态稳定”(Dynamic Stabilization)的基本原理工作,同时利用车体内的陀螺仪和加速度传感器,检测车体姿态的变化,并利用伺服控制系统,较精确地驱动电机进行相应的调整,以保持车体平衡及准确转向。然而,在小车实际运行过程中,由于车本身运动所产生的加速度会产生很大的干扰信号叠加在其获得的测量信号上,使得输出信号无法准确反映真正的倾角,导致加速度传感器无法完全获取直立控制所需要的姿态信息。而陀螺仪本身的噪声所引发的倾角漂移也是个大问题:陀螺仪可以测量车倾斜的角速度,将角速度信号进行积分处理便可以得到车的倾角。但是由于陀螺仪本身具有一定噪声,如果一直积分的话,就会引起倾角漂移。因此,对于直立控制所需要的姿态信息,也不能单独由陀螺仪来积分获得。因此要采用陀螺仪,就必须采用加速度传感器,二者缺一不可。这样,第一,成本较高;第二,导致车体结构复杂化;第三,控制算法复杂度高,需要对两种传感器数据进行融合处理,以充分利用加速度传感器获得的静态信息和陀螺仪获得的动态信息;第四,调试和测试时间长,研发周期较大。因此,有必要探索其它的车身姿态控制方式。采用光传感器进行车体姿态控制即是其中之一:将光电传感器获得的车体姿态信息,控制驱动电机运转,准确控制车体系统平衡及正常运动。光电传感器结构紧凑,非接触控制,抗干扰性能高,速度测量能力强,使用光线传感器可以简化小车拼装和程序算法复杂度,成本相对较低;但受限条件较大,如受光强(亮度、对比度、流明)及温度影响较大,且响应速度不快,需要采取相应的措施进行处理。该文采用lego9797套件组装了一个基于光线传感器姿态感知法和PID控制策略的平衡车实验模型,对基于光线传感器姿态感知法的平衡车的平衡原理、姿态感知和控制方法、平衡过程和平衡效果等进行了分析和实验验证。
1 实验内容
1.1 实验目的
采用lego自行组装的平衡车,验证采用光电传感器和自行设计的PID控制算法对自平衡小车的控制性能。
1.2 软、硬件资源
乐高机器人Nxt9797套件包括硬件和软件两部分。硬件部分共有431个组件,包括一个NXT可编程的微型电脑(CPU),一块可充电的锂电池,三个伺服电机,二个触动传感器,一个光电传感器,一个超声波传感器,一个声音传感器,三个灯以及足够课堂教学所需的乐高积木。(见图1)
套件中的软件工具为Nxt2.0,编程语言为乐高公司为Mindstorms NXT机器人开发的一种图形化编程语言:NXT-G,简称G语言。NXT-G语言由多个模块组成,其最主要的编程方法是模块化编程,每一个模块代表着一个指令:或者接收测量信号,或者输出处理数据,或者送出控制指令等。模块与模块之间用线连接,构成需要的算法。
1.3 方法
1.3.1 平衡车实验模型搭建
该文搭建的平衡车实验模型如图2所示,主要采用了乐高机器人Nxt9797套件中的光线传感器、NXT可编程的CPU、伺服电机模块。其硬件原理框图如图5所示,其中光线传感器模块用于测量传感器与地面之间的距离。NXT可编程CPU是平衡车的控制核心,接收来自传感器的数据,并对数据进行分析和运算,产生伺服电机的控制信号。伺服电机模块用于接收CPU的数据,控制小车进行平衡运动。开始键位于CPU模块上,用于启动小车的程序运行。
1.3.2 姿态感知和平衡原理
系统控制框图如图3所示。当车体略有倾斜时,重力作用在小车上后会有一个重力加速度,如果不做任何处理,加速度不变,速度会越来越大。此时光感器和地面的距离不同,反射回来的光强也不同。此时的光强会和初始光强有一个误差,经过CPU处理之后把相应的指令送入驱动电机,控制小车进行运动,运动模式如图4所示。
1.3.3 控制算法和流程
姿态调整过程是通过如图5所示的PID控制器实现的。PID控制器根据系统的误差,利用比例、积分、微分计算出控制量进行控制的使用中只需设定3个参数(Kp,Ki和Kd)即可;它们共同决定小车在原地晃动的程度即振幅和小车晃动的频率,即抖动强度。
在小车运行控制过程中,传统的控制算法基本是在小车到达平衡后,速度不变就立即向相反位置运动,因此,无法达到快速平衡,而PID算法则是在到达平衡之前,不停地检测小车与平衡状态时距离的差,从而调整速度,也就是离平衡点越近,速度越小,使其能在到达平衡状态后速度接近为零。这种算法使平衡可以快速达到,也就使得这种车能够投入实用。其控制流程如图6所示。
1.4 编程
初始时,把小车固定在平衡位置,在电脑中控制使其打开小车上的光感器,光感器发出红光,并测出反射回来的光强,以此光强作为平衡时的光强数值。取消固定后,小车会失去平衡,此时光感器和地面的距离不同,反射回来的光强也不同。此时的光强会和初始光强有一个误差,把这个误差带入PID算法进行计算,输出矫正值控制驱动电机运行。(见图7)
刚开始为开始符号,按下小车上的橙色按钮开始执行程序。这一部分是对三个参数的输入部分,开始的时候我们先全部调为零,之后调节P,待系统最稳定的时候调节I,以同样的流程调节D。(见图8)
声音的第一个部分为预备音,会重复3遍,之后为开始音,提示下一步即将进行自平衡,让使用者把支撑物(该实验中是直接用手)移开。影响效果储存在CPU中,执行时直接调出。第一个光线的输入为初始光强即S0,在开启程序之前我们需要让小车先保持平衡状态,并输入此时的光强,让S0和初始光强处于一致。在此之后的光强为下个时刻的光强记为Sr。(见图9,图10)
PID在程序中的写法:设定初始光线传感器和地面的距离为S0(平衡状态),之后的距离为Sr,该实验中把S0记为中间值ZJ,接下来为误差算法PID的比例,积分和微分的算法。
(1)比例部分:(ZJ-Sr)×KP,一开始实验的积分为零,所以带入一个单元积分JF的初始值为零。(2)积分部分:((ZJ-Sr)+JF)×KI,微分的时候则需要把每次的误差都记下来,然后进行不停地相减,此时本实验的上一个e必须有一个空出的单元进行存放,记为上一个e为LE。(3)微分部分:((ZJ-Sr)-LE)×KD。其中KP,KI,KD为PID的三个参数。
图11中的第一个模块为除法模块,得到输出值后使之成比例缩小,避免计算结果过大,导致电机飞速运动;最后的值如果超出-1000或1000(NXT所能输入的最大值),就表明车已倾倒,调解失败,此时会令运行中的轮子停止运行,避免倾倒后轮子继续运行所导致的仪器损坏。下一个模块为比较模块,判断小车是前倾还是后倾,随后进行调节。之后的模块为绝对值模块,计算误差值的大小,从而调节马达速度,误差越大,速度越大,当然超过了一定数值(-1000~1000)就会停止。后面两个模块为运行模块运动模块,即输入后操控马达进行运行。
数值设定:动机转数:50;范围:-1000~1000。
2 调试及结果
自平衡车能在恒定的光强与介质上进行原地的前后动态平衡,持续时间可达半小时。然而实验却存在以下问题:第一,光感传感器在不同光强下,三个参数不同;因此,必须要使平衡车自行感到光强的变化,从而自动改变参数。对于这个问题,可以再安一个光感传感器,使其能和地面的距离保持不变,这时所测量到的光感值和另外一个一一对应,就可以实现在任何光强上的平衡。第二,该自平衡车只能在原地进行平衡,而没有设计前进、后退的控制方式;因为没有使用陀螺仪。对于这个问题,可以默认为是体感操作,即身体向前,平衡车会往前倾,这时光传感器就会和初始数据产生一个偏差,从而向前进。
3 结语
通过实验证明,利用光传感器以及自行设计的PID控制算法进行的平衡车的控制实验,获得了较为满意的效果:结合nx9797等lego9797软件硬件资源,大大缩短组装和程序设计周期、减少成本、缩小平衡车体积、降低结构复杂度。它具有程序简单,操作简便等优点,但存在着性能上的不足,希望在今后的试验中能改善。通过该实验,有助于中学生理解智能小车原理,学会NXT语言,掌握和准确运用PID算法;设计性和综合性强,包括硬件组装,算法设计和程序编写,物理知识的应用;有助于激发中学生对机器人、以及科学实验的兴趣,提高动手能力,创新能力,培养创新意识。
参考文献
[1] 童诗白,华程英.模拟电子技术基础[M].4版.北京:高等教育出版社,2009.
[2] 阎石.数字电子技术基础[M].5版.北京:高等教育出版社,2009.
[3] 黄智伟,王彦,陈文光,等.全国大学生电子设计竞赛训练教程[M].北京:电子工业出版社,2013.
[4] 段其昌,袁洪跃,金旭东.两轮自平衡车无速度传感器平衡控制仿真研究[J].控制工程,2013,20(4):618-622.