关注并将「人人都是产品经理」设为星标
每天早 07 : 45 按时送达
什么是自行车?B站一位UP主可能会给你一个与众不同的回答,即不用人力就能自己行驶的车。如今,越来越多人在媒体平台上发布他们的奇思妙想,展示了无限创意。文中的AI算法工程师稚晖君便是如此,让我们一起来看一下。

作者:代润泽、陈大鑫、刘冰一
微信公众号:AI科技评论
题图来自 Unsplash,基于 CC0 协议
全文共 3570 字,阅读需要 7 分钟
—————— BEGIN ——————
不知道大家从小到大有没有思考🤔过这样一个问题:什么叫自行车?
——啊?这还用问吗?
——对啊,这还用问吗?
自行车那当然是不靠人骑着它自己就能行驶的车啊。
考虑到2021年是自动驾驶爆发元年,造手机的、送外卖的、卖袜子的等等各种大厂纷纷入局造车。
这时一位B站UP主表示:何不做一辆能自动驾驶的自行车?
这不是在开玩笑!
这是野生钢铁侠、华为天才少年、AI算法工程师稚晖君昨天刚刚“发布”的一个新项目。
稚晖解释道,他前段时间不小心骑自行车摔伤了,休养后直言不能就这么算了!表示,正在着手设计自动驾驶自行车,这是说到做到了!
话不多说,直接来看看他是怎么完成的吧。
让自行车变成自动驾驶,首先需要的是硬件改造,加入自动控制系统。
其次,为了将驾驶员的工具人存在性去掉,需要给车子搭载一整套传感器组成的感知网络,以及一个算力足够强大的计算芯片作为大脑。
最后就是在前面的硬件基础上开发实现一套感知和控制算法,俗称注入灵魂。

第一步,让车子跑

对于结构上的改造——先在CAD上面建模,得到一辆虚拟自行车,也可以称之为自行车的数字孪生。
有了车体模型,所有的改造工作都可以在计算机上完成,只需加上“一点点”的细节,那么最终的改造方案就出来了:
先给车子安装两个巨大的无刷电机,以及一个控制龙头的舵机。
传感器方面搭载了一个RGBD的深度相机,加速度计和陀螺仪,以及一个激光雷达。
电池使用的是6S的航模动力锂电池,续航大约有2-3小时。
主控计算模块被安置在了座椅的后方。
而驱动结构方面,关于控制龙头的旋转舵机,前后方向的平衡靠两个轮子的支撑和地面摩擦力,至于左右的平衡,当在骑行状态下,可以靠着左右调节龙头来获得转向加速度以此来抵消重力的影响。
那么静止状态下如何保持左右平衡呢?
要靠角动量守恒,上过小学二年级的都知道角动量守恒定律是自然界中最普遍的守恒定律之一。
当系统一个动力角动量发生变化的时候,就会将力矩传递给其他物体。所以这辆自行车中间的无刷电机,其实就是驱动一个金属的动量轮。
实际上这也是在太空中卫星🛰️在没有摩擦力的情况下调整自身姿态的一样的原理。
而后面的无刷电机就是靠摩擦力驱动后轮,让车子整体前后运动。
关于零件的加工,其中一部分零件可以用3D打印来制作,不过考虑到功率问题,3D打印塑料的硬度和刚性都不太适合作为核心的结构件,因此用于固定电机的零件,稚晖君还是选择用金属来加工。
所有的零件配齐组装完成后,就需要安装电力系统了 ,也就是主控模块和 AI计算单元。

第二步,让车子有机器大脑

和人类一样,将计算单元分为小脑和大脑,那么小脑部分就分为低算力、低时延、运行实时系统,大脑部分就分为高算力、高时延、运行非实时操作系统,用于感知、思考和决策。
在这个系统中使用的是在HoloCubic里面的MCU,ESP32作为小脑。
大脑则应用了昇腾边缘计算机芯片昇腾310 AI处理器。
然后设计一个载板,将这两个计算单元整合到一起,板子的结构为四层设计,比较简单:
PCB打样之后再手工焊接一下,这也是传统艺能环节:
之后通过总线把大脑和小脑相连,在软件上实现一套RPC框架,让它们可以方便地通信。其中小脑的框架基于FreeRtos,主要是实现传感器的数据处理,以及电机的控制算法。简单分为三个任务:闭环控制线程、电机通信线程、以及屏幕刷新线程。
另外用下面这个小屏幕来实时显示一些参数。
而大脑的软件框架就要复杂很多。除了基于昇腾的整个AI栈之外,还在系统中使用了一个做机器人常用的框架—— ROS,本质上是一个高性能的通信中间件。
到现在电路方面已经有了脑子,还缺一个很重要的模块,那就是心脏,也就是此前设计的Ctrl-FOC驱动器。
作为Ctrl的二代作品,它的表现还是非常的猛的,在很小的体积之下, 实现了两路共100安 的无刷电机FOC控制,同时还顺便 驱动了前面60Kg的舵机,以及一个散热风扇。
此时,把结构零件和电路全部 整合起来,车辆的完全体就诞生啦!
到了这里,稚晖君表示以上组装还算比较常规,接下来的注入灵魂才是关键。
这就要涉及到机器人了,机器人是一个复杂的系统,设计一台机器人的时候,科学的方法是将机器人进行理论上的分析,也就是运用运动学和动力学的建模,通过数学模型知道哪些事情是相对 容易的哪些是复杂的。
例如,这辆车子的控制代码中,有超过50个重要参数:控制周期、反馈矩阵、PID增益、滤波器截止频率等。这些魔法数字要全部得到合理的设置,才能使系统进入稳定且快速收敛的状态(这里可以类比深度学习的调参大法)。
而一些物理参数的设置,如电机功率应该选多大的?飞轮质量应该选多少?重心的分布应该怎样设置才比较合理?也都需要准确的数学模型进行指导才行。
在得到模型之后, 为了进一步验证理论的准确性,一般要在计算机中进行仿真,这里稚晖君使用的是游戏引擎Unity——先在游戏引擎中构建一个虚拟的物理环境,赋给小车真实的的质量和重力, 接着将控制算法的计算结果可视化呈现出来。

这一步验证完成之后 ,还有一个sim2real的过程,也就是把仿真结果迁移到现实环境中。
其实这是一个很复杂的过程,因为现实中有更多的不确定性因素,很多情况下机器人往往在仿真中重拳出击,而在现实中“唯唯诺诺”秒变智障🐶,有的甚至在仿真中也一言难尽。
同理,这辆车在调试的过程中也是非常艰辛的。
在这套系统中在姿态控制中,稚晖君使用的LQR控制器,方向控制使用了经典的PID算法,传感器则是对加速度计和陀螺仪数据使用了二阶的巴特沃斯滤波器之后再通过卡尔曼滤波器进行数据融合,最终得到车身姿态。
终于,在经过稚晖君漫长的参数整定之后,控制算法终于收敛到了完美的效果!
你现在已经是一辆「成熟」的自行车了,是时候拉出去遛一遛了证明自己了。
哇!可以看出它做到了静态保持静止:
这主要得益于合理的算法和设计,且当车子受到一定的冲击和突然增加负载的情况下,也能稳定地保持平衡。
甚至能在高危场景下保持平衡!
——就差在铁栅栏上跳舞💃了。
再结合下后轮电机的驱动能力,让它「走两步」也毫无压力,而且刹车功能也是很正常的,有网友表示至少要比X撕辣强。
所以说如果大家某天晚上看到一辆会自己行驶的自行车也不要害怕,它只是「成精了」而已。
第三步,实现自动驾驶
到现在,能动的基本目标已经达成,可是这就结束了吗?
当然没有,接下来就是最令人期待的自动驾驶环节了!
这就要通过引入AI 来实现了。
当然了话先说到前面,这里实现的自动驾驶也只是一定程度上的。
另外由于这个车子搭载了深度相机,在电脑上就可以看到车子WIFI实时的RGB图传画面,再结合一些AI算法即可实现一些有趣的功能,比如说自动避障、运动识别跟随。
另外,自动驾驶怎么能少的了路径规划呢?
此时车子搭载的激光雷达就排上了用场。
激光雷达通过测量激光发射到反射所需时间,再乘以光速就可以获得目标的距离位置。
由此360°成像的结果可获取摄像头更加可靠的深度信息,将这些数据用于SLAM图与路径规划,最后就可以实现让自行车自主探索了。
不过稚晖君表示这只是“非常基础”的自动驾驶设计,还有很多地方需要改进。比如龙头的传统结构设计不太合理,如果换成谐波减速伺服电机直驱,那么行驶的稳定性将大幅度提升。
另外受限于整车功率,这套系统目前还无法载人,就只能真·无人驾驶了,但是如果换成电动车可能就不一样了(不过,这可能就是另外一个故事了)。
最后,稚晖君谈起最初设计这样一俩自行车的想法最早是因为看到清华大学曾研制了一款自动驾驶的自行车,还登上了Nature封面:
所以他就想着自己也复现一个类似的项目,并给车子起名为XUAN,这是因为轩是我国古代对车子的称呼。
Tips:本次项目的结构设计是全部开源的,有兴趣想要复现的同学可以尝试一下。
最后,说到稚晖君,大家估计都很熟悉了。目前稚晖君已经加入了“华为天才少年计划”。不管是做嵌入式的还是计算机的,稚晖君都是诸多电子爱好者钦佩的大佬。他本硕就读于电子科技大学,之后进入OPPO算法岗工作,目前已经是华为AI架构师。
其实稚晖君并非第一次这般“硬核”,AI 科技评论曾报道过他自制B站百大Up奖杯,这位斜杠青年有如此充沛的精力输出高质量工作,让大家有种“平时上班的工作量还是太小了”的错觉。
视频号推荐
—————— / END / ——————
▼ 喜欢请分享&收藏,满意点个赞,最后点「在看」 ▼
继续阅读
阅读原文