前一段时间,电机系的刘绍淮同学一直找我讨论关于直立两轮车模的控制问题。原来这学期他在选修自动化系的控制类的课程。一方面他自个儿喜欢鼓捣一些电子装置,另一方面也是希望能够借助于这个自平衡小车的钻研能够将课内所学习的控制原理加以应用。

基本实现直立的平衡小车
他的这种主动寻找实践机会,将课内与课外结合起来的学习做法非常值得称赞,尤其对工科专业的课程特别重要。之前看到在智能车竞赛中有直立车模组竞赛,并且看了一些早期我制作的一些辅导材料,所以对于直立车模调试中的问题就来找我询问。
教科书上写的比较清晰明了的原理和方法,大都是经过了简化抽象,这样便于进一步的推演和讲述。但是将它们应用到一个具体控制对象,就需要将那些公式进行还原具象。知识从具象到抽象再到具象的循环,才算真正将课程内的知识最终掌握,而不是在考试后就忘记了。

拆卸电机驱动芯片
这种还原过程会遇到很大的挑战。在一个具体工程中应用的时候,很多教科书上的简化抽象的条件就不存在了,同时又滋生了很多其它辅助要求。比如在两轮车控制中,需要将车模所需要的机械、电路板、传感器进行组装,掌握单片机软件的开发调试工具,电机和车体中存在的非线性环节等等。由于他都是购买的成品模块,所以还算是省去了电路板设计制作调试的工作。
尽管遇到了一些由于经验不足所带来的调试中的麻烦和困难,刘绍淮还是积极主动到我这儿来进行答疑解惑,对直立车模调试中的问题进行讨论。

车模IMU角度计算和显示
他的愿望不仅是能够将直立车模控制算法,经过自己的理解和编程调试出来,而且能够将课程中的一些控制原理和方法应用到车模控制算法中来,完成课程期末的报告作业。
但是“樱桃好吃树难栽”。美妙的理论一旦涉及到实际对象,如何建立控制对象的系统函数就成了一个很大的难题。
在普通的倒立摆实验中,控制对象结构简单,一些主要的机械参数比较容易测量得到,系统函数相对比较容易建立。但是对于直立车模上的电机、车体如何得到它对应的简化模型参数就是一个非常大的困难。

动态辨识车模系统函数中的参数
如果无法得到车模控制系统函数,教科书上的原理和方法就像水中的月亮,镜中的花朵,好看而不可得。
后来建议他可以通过系统辨识的方法得到近似的各个控制环节的系统传递函数。他也非常兴奋,学习了一些系统辨识的方法,并在MATLAB中进行了实验联系。当理论和公众准备妥当之后,便准备对自己车模进行测试。希望通过数据获得车模的各个环节的传递函数,并以此来验证和实现一些控制策略。

焊接电机驱动芯片
理想很丰满,但现实很骨感。过了几天他告诉我,在使用单片机编程中,始终无法提高传感器测量的采样频率,使得数据中无法得到对象正确的传递函数。
再加上提交报告临近,最终也没有完成系统辨识的目标,进而也没有能够验证一些基本控制器的设计方法。
虽然初步通过简单的PD控制,实现了车模的直立。但最终由于在单片机编程上的困难阻碍了进一步实验的脚步。他在最终提交的报告最后也表示了很大的遗憾。

课程报告前页
刘绍淮在报告最后写到:“虽然自平衡小车系统建模及其控制算法优化还有许多需要改进的地方,但这一项目对于本学期自控课程的学习已经提供了莫大的帮助,对一些重要概念的理解有了更为深刻的认识,而不仅仅是停留在书本概念和数学公式和证明上,对于工程的理解和如何管控项目的进度也有了进一步的认识。两轮自平衡小车项目让我真切地领略到了控制设计的魅力所在,今后也一定更加努力地进行相关方向的研究。”
他的这次没有成功的一次尝试,说明了将教科书上的原理和方法从“水中月、镜中花”的状态变成能为所用真刀实枪的过程中会遇到很多困难,有的困难可能仅仅是编程上的疏忽和不足引起的。
如何克服这样的困难是也是工程教育的挑战,也许只有时间才能够慢慢解决这一切。

“知道自己不知道的东西,是学习;知道自己知道的东西,是专家;不知道自己已经知道了,是在实践中掌握了的那些东西”
--张贝克
学习的最终目标是将需要知道的东西变成不知道(自己知道的)东西。