“华为天才少年”把自行车做成了自动驾驶!

程序员的那些事 2021-06-11 19:13

推荐关注↓

转自:机器之心

2016 年的愚人节,谷歌跟全世界开了一个玩笑。

在一段视频中,他们展示了一个融合了自动驾驶技术的「真 · 自行车」。它不仅可以自己过马路,还能接你下班、让你坐在上面办公。



不过,在被疯传了两天之后,谷歌又跳出来亲自辟谣,说这个视频是他们 P 的,自行车旁边其实是有人的:



对此,有网友嘲讽道:「有这 PS 的工夫,做个真的不香吗?」

或许连谷歌都没想到,五年后的今天,真有人帮他们把坑填了。

而这个填坑的人,就是 B 站科技区大名鼎鼎的稚晖君。


在投稿这个视频之前,这位拥有 80 多万粉丝的 up 主已经鸽了好几个月了。当事人交代说,除了工作有亿点点忙之外,雨天骑车摔跤也是一个很重要的原因。

这次摔跤不仅让稚晖君领悟到了什么叫「水太深,你把握不住」,还让他下定决心设计一个自行车增稳装置,如下图:


啊,不好意思,放错图了,是这个:


这个改装后的车有多稳呢?上点难度试试:


原地不动看上去确实挺稳重的,那让它走两步看看:


路上有障碍物怎么办?上自动驾驶呗:


好家伙,自动驾驶都已经火到这种程度了吗?以后年轻人的第一辆自行车都得上自动驾驶了吗?

稚晖君介绍说,由于受限于整辆车的功率,目前这辆车还不能载人,不过换上电动车可能就不一样了。

这个项目看上去复杂,其实做起来更加复杂,心灵手巧如稚晖君都花了四个月的时间(虽然大部分是周末)。为了方便大家学习,稚晖君还开源了项目的硬件部分,有兴趣复现的同学可以去 GitHub 下载相关资料。(网友:我缺的是开源项目和兴趣吗?)


项目地址:https://github.com/peng-zhihui/XUAN-Bike

把自行车做成自动驾驶有多硬核?

在视频中,稚晖君向我们介绍了他将自行车改装成自动驾驶的大体思路。首先,为了让自行车平稳地跑起来,他设计了一套复杂的自动控制系统;其次,为了去掉车上的工具人,他给车装了一套传感器组成的感知网络以及算力足够强大的芯片;最后,他还在这些硬件基础上开发、实现了一套感知和控制算法,俗称「注入灵魂」。


要实现这套装置,首先需要设计。在这一阶段,稚晖君使用 CAD 进行建模,得到了一辆虚拟的「死飞」自行车,之后再慢慢往上添加细节,最终的改造方案如下:


如图所示:驱动结构方面,车子安装了两个较大的无刷电机以及一个控制龙头的舵机,用于驱动车子运动并保持静止和运动时的平衡。传感器方面,车子搭载了一个 RGBD 的深度相机、加速计、陀螺仪以及一个激光雷达,用于探测周围环境和车的状况;动力方面,电池使用的是 6S 的航模动力锂电池(续航 2~3 小时);控制方面,座椅的后方搭载了主控计算模块。


图纸设计完成,接下来就是软硬件的实现了。

为了获取硬件部分所需的零件,稚晖君选择了 3D 打印和机床加工相结合的方式(有个家里有厂的朋友),前者适合打印强度要求不高的塑料零件,后者用来加工金属零件。


车子的计算单元被分为低算力、低时延、运行实时系统的「小脑」和高算力、高时延、运行非实时系统的「大脑」。前者用于控制车身,用 ESP32 来实现;后者用于感知、思考和决策,用到了昇腾的边缘计算芯片昇腾 310。


为了将两部分整合到一起,稚晖君设计了一个四层的载板。PCB 打样之后,他手工将其焊了出来。「大脑」和「小脑」是通过总线相连的。此外,他还在软件上实现了一套 RPC 框架,让它们可以方便地进行通信。


「小脑」的框架是基于 FreeRTOS,主要是实现传感器的数据处理以及电机的控制算法,还有一个小屏幕实时显示一些参数:


「大脑」的软件框架则要复杂很多,除了基于昇腾的整个 AI 栈之外,稚晖君还在系统中使用了 ROS 框架(机器人领域常用框架,集成了大量的工具、库、协议,提供类似 OS 所提供的功能,简化对机器人的控制),后面的消息分发、业务串流、SLAM 等的实现都是基于 ROS 开发的。

「脑子」有了,电路还缺一个「心脏」,也就是驱动器。稚晖君曾经在去年 9 月份展示过他设计的一个超迷你 FOC 矢量控制驱动器,那个项目就是为今天的自动驾驶自行车所准备的。虽然个头还没有巴掌大,但这个驱动器可以实现两路共 100A 的无刷电机 FOC 控制,同时还驱动了前面的 60KG 舵机以及一个散热风扇。


把以上结构零件和电路全部整合起来,一辆自动驾驶自行车就诞生了。不过,这个自行车目前还没有「灵魂」,需要通过运动学、动力学建模等步骤来注入灵魂。稚晖君表示,这个车子的控制代码中有 50 多个重要参数,比如控制周期、反馈矩阵、PID 增益等。这些数字全部都要得到合理设置,才能使系统进入稳定且快速收敛的状态。电机功率、飞轮质量等物理参数的设置则需要有准确的数学模型来指导。

在得到模型之后,为了进一步验证模型的准确性,稚晖君使用了游戏引擎 Unity 进行仿真,然后把仿真的结果迁移到现实环境。


经过漫长的参数调整之后,控制算法终于收敛到了完美的效果。

至此,「能动」的目标就完成了,接下来就要引入自动驾驶了。

前面提到,这个自行车搭载了深度相机,再结合一些 AI 算法,车子就可以实现自动避障、自动跟随等功能。此外,车子搭载的激光雷达还可以用来完成路径规划,让车子自主探索环境。


就这样,稚晖君一个人完成了一个团队的项目。不过,由于开发时间有限,这次项目的改造只是实现了非常基础的自动驾驶功能。


稚晖君表示,这个项目其实是受到了清华类脑芯片项目的启发。2019 年 8 月,清华的「天机」芯片登上了《Nature》杂志的封面,搭载该芯片的自动驾驶自行车作为一个展示的 demo 出现在论文中。


作者


稚晖君,2018 年研究生毕业于电子科技大学,曾就职于 OPPO 研究院 AI 实验室,后通过「天才少年计划」加入华为,职位是 AI 算法工程师,目前正致力于自研深度学习推理框架与移动计算平台的异构加速相关技术。他的个人称号为「野生钢铁侠」,喜欢干脆面和可乐,且保持着浓密的发量。



- EOF -

推荐阅读  点击标题可跳转

1、“华为天才少年”自制百大Up奖杯,网友:技术难度不高侮辱性极强

2、解雇了天才员工,这是我们做过最正确的决定

3、信息论之父香农,他这个天才是如何解决问题的


关注「程序员的那些事」加星标,不错过圈内事

点赞和在看就是最大的支持❤️

推荐阅读