自行车什么时候能实现「自己行走」呢?
自行车属于欠驱动系统,如果不进行控制就无法实现稳定站立
最近,B站野生技术协会野生钢铁侠、「华为天才少年计划」入选者、AI算法工程师稚晖君发布了一个「自动驾驶」自行车项目,自行车化身「自动行走」的车!
视频讲解详细,网友直呼:666666
那么,稚晖君是如何打造自动驾驶「自行车」的呢?
第一步当然是最基本的让车子跑起来,这就需要硬件改造,加入自动控制系统。
第二步要去掉驾驶员工具人,这就需要给车子搭载一整套传感器组成的网络,还需要一个算力足够的芯片,而这个芯片也是整个自行车的「大脑」。
最后,在前面的硬件基础上实现感知和控制算法,也就是给这台车「注入灵魂」。
改造「死飞」
介绍完步骤,我们具体来看:
改造的对象是一辆「死飞」(Fixed Gear),结构简单,没有刹车,靠反向蹬车减速。
像钢铁侠造机器人那样,这台自动驾驶的自行车也需要用计算机辅助工具CAD来建模,得到一辆虚拟自行车,或者叫做自行车的数字孪生。
先给车子安装两个巨大的无刷电机。
以及一个控制龙头的舵机。
传感器方面搭载了一个RGBD的深度相机,加速度计和陀螺仪,以及一个激光雷达。
而电池使用的是6S的航模动力锂电池,续航大约有2-3小时。
主控计算模块被安置在了座椅的后方。
驱动结构方面,控制龙头的旋转舵机,前后方向的平衡靠两个轮子的支撑和地面摩擦力。
那么左右平衡呢?当在骑行状态下,可以靠着左右调节龙头来获得转向加速度以此来抵消重力的影响。
那么静止状态下呢?
这就要靠角动量守恒,学过大学物理的同学都知道角动量守恒定律是自然界中最普遍的守恒定律之一。
当系统一个动力角动量发生变化的时候,就会将力矩传递给其他物体。所以这辆自行车中间的无刷电机,其实就是驱动一个金属的动量轮。
实际上这也是在太空中卫星在没有摩擦力的情况下调整自身姿态的一样的原理。
而后面的无刷电机就是靠摩擦力驱动后轮,让车子整体前后运动。
关于零件,其中一部分零件可以用3D打印来制作,不过由于这次所需零件比较硬核,3D打印塑料的硬度和刚性都不太适合作为核心的结构件,因此用于固定电机的零件,稚晖君还是选择用金属来加工。
此处就要感叹一下,有一个家里有厂,可以直接开模做零件的朋友也很重要!
安装机器大脑
在所有的零件安装完成后,就需要安装电力系统了 ,也就是主控模块和AI计算单元。
和人类一样,将计算单元分为小脑和大脑,小脑包括低算力、低时延、运行实时系统,大脑包括高算力、高时延、运行非实时操作系统,用于感知、思考和决策。
而在这个项目中,小脑用的是HoloCubic里面的MCU,ESP32,大脑则应用了昇腾边缘计算机芯片昇腾310 AI处理器,搭载的达芬奇core可以提供高达22TOPS的算力。
然后,稚晖君设计一个载板,将这两个计算单元整合到一起,板子的结构为四层设计。
PCB打样之后再手工焊接一下,这也是传统艺能环节。
之后通过总线把大脑和小脑相连,在软件上实现一套RPC框架,让它们可以方便地通信。
其中小脑的框架基于FreeRtos,主要是实现传感器的数据处理,以及电机的控制算法。
简单分为三个任务:闭环控制线程、电机通信线程、以及屏幕刷新线程。
大脑的软件框架要复杂很多。
除了基于昇腾的整个AI栈之外,还在系统中使用了一个做机器人常用的框架—— ROS,本质上是一个高性能的通信中间件。
到这里,电路方面已经有了脑子,还缺一个很重要的模块,那就是心脏,也就是此前稚晖君设计的Ctrl-FOC驱动器。
作为Ctrl的二代作品,它的表现还是非常的猛的,在很小的体积之下, 实现了两路共100安 的无刷电机FOC控制,同时还顺便 驱动了前面60Kg的舵机,以及一个散热风扇。
到这里自动驾驶自行车就整合完成了。
稚晖君简单做了一个总结:
机器人是一个复杂的系统,设计的时候,科学的方法是将机器人进行理论上的分析,也就是运用运动学和动力学的建模,通过数学模型知道哪些事情是相对 容易的哪些是复杂的。
例如,这辆车子的控制代码中,有超过50个重要参数:控制周期、反馈矩阵、PID增益、滤波器截止频率等。
这些魔法数字要全部得到合理的设置,才能使系统进入稳定且快速收敛的状态。
而一些物理参数的设置,如电机功率应该选多大的?飞轮质量应该选多少?
重心的分布应该怎样设置才比较合理?也都需要准确的数学模型进行指导才行。
在得到模型之后, 为了进一步验证理论的准确性,一般要在计算机中进行仿真,这里稚晖君使用的是游戏引擎Unity——先在游戏引擎中构建一个虚拟的物理环境,赋给小车真实的的质量和重力,接着将控制算法的计算结果可视化呈现出来。
这一步验证完成之后 ,还有一个sim2real的过程,也就是把仿真结果迁移到现实环境中。
其实这是一个很复杂的过程,因为现实中有更多的不确定性因素,很多情况下机器人往往在仿真中重拳出击,而在现实中「唯唯诺诺」秒变智障,这里视频中举了一个DARPA参赛作品的例子。
同理,这台车在调试的过程中也是非常艰辛的。
在这套系统中在姿态控制中,稚晖君使用的LQR控制器,方向控制使用了经典的PID算法,传感器则是对加速度计和陀螺仪数据使用了二阶的巴特沃斯滤波器之后再通过卡尔曼滤波器进行数据融合,最终得到车身姿态。
经过漫长的参数整定,终于得到了一台成熟的「自动驾驶」自行车。
那么,自动驾驶效果到底如何呢?
静态站立非常稳!
戳它也一副「我自岿然不动」的样子
突然在一侧增加重物仍然能保持平衡
甚至可以来点杂技动作
前进、倒退也是一如既往的稳
实现自动驾驶功能
至此,能动的基本目标已经达成。
接下来就是引入AI,实现「一定程度」的自动驾驶。
由于这个车子搭载了深度相机,在电脑上就可以看到车子WIFI实时的RGB图传画面,再结合一些AI算法即可实现一些有趣的功能,比如说自动避障、运动识别跟随。
另外,还有自动驾驶少不了的路径规划,此时车子搭载的激光雷达就排上了用场。
激光雷达通过测量激光发射到反射所需时间,再乘以光速就可以获得目标的距离位置。
由此360°成像的结果可获取摄像头更加可靠的深度信息,将这些数据用于SLAM图与路径规划,最后就可以实现让自行车自主探索了。
稚晖君表示这只是「非常基础」的自动驾驶设计,还有很多地方需要改进。
比如龙头的传统结构设计不太合理,如果换成谐波减速伺服电机直驱,那么行驶的稳定性将大幅度提升。
另外受限于整车功率,这套系统目前还无法载人,就只能真·无人驾驶了,但是如果换成电动车可能就不一样了。
稚晖君给这辆自动驾驶自行车取名XUAN(eXtremely Unnatural Auto-Navigation),同时也是「轩」的意思,因为「轩」在古代是车子的意思。
目前该项目已经在GitHub上开源,感兴趣的朋友可以前往下载。
https://github.com/peng-zhihui?tab=repositories
并非第一辆「成精」的自行车
以后如果你在晚上看到一辆自行车「鬼鬼祟祟」,不要惊慌,那只不过是一辆「成精」的自行车。
而这其实并不是第一辆成精的自行车。
2019年8月1日,《自然》封面文章介绍了清华大学在通用人工智能上的新尝试:一款名为「天机」的全新芯片架构,结合类脑计算和人工智能算法,展示了一辆由新型人工智能芯片驱动的自动驾驶自行车。
试验中,无人自行车不仅可以识别语音指令、自动控制平衡,还能对前方行人进行探测和跟踪,并自动避开障碍。
没错,不仅能自动避障,还在追赶目标,这速度也是相当快了。