近日,EDN小编关注的一位B站up主在鸽了好几个月之后,终于更新了,而这次更新的确实一个硬核项目:把自行车做成自动驾驶!
截止至EDN发文前,该视频播放量高达158.5万。up主表示这个项目应该他最近做的最硬核的一个了,研发过程断断续续花了四个月(虽然基本只有周末有空),期间遇到非常多的坑,视频时长原因有些内容并没有放到视频里,看了下素材已经拍了将近200G了...
流量够用的朋友,可以直接点开视频看细节:
稚晖君表示,他前阵子骑车由于下雨水太深,不小心摔倒受伤了。作为一个掌握了技术密码并且永远头铁的野生钢铁侠,是时候着手设计一个自行车增稳装置了。
此外,正值自动驾驶爆发时期,而稚晖君正好本职工作又是做AI的,所以一个很有意思的想法就出来了:不如就做一辆自动驾驶自行车吧!
毕竟如果自己不能跑,那凭什么叫它自行车呢?
在视频中,稚晖君向我们介绍了他将自行车改装成自动驾驶的大体思路。
首先,得让自行车跑起来,与四个轮子的汽车不同,自行车是个欠驱动系统,不进行控制的话,连站稳都难。为了让自行车平稳地跑起来,他设计了一套复杂的自动控制系统;
其次,为了去掉车上的工具人,他给车装了一套传感器组成的感知网络以及算力足够强大的芯片作为大脑;
最后,他还在这些硬件基础上开发,实现一套感知和控制算法,俗称“注入灵魂”。
他将用之前买的一部“死飞”进行改造。
要实现这套装置,首先需要设计。
在这一阶段,稚晖君使用 CAD 进行建模,得到了一辆虚拟的“死飞”自行车,之后再慢慢往上添加细节。
最终的改造方案如下:
驱动结构方面,车子安装了两个巨大的无刷电机以及一个控制龙头的舵机,用于驱动车子运动并保持静止和运动时的平衡;
传感器方面,车子搭载了一个 RGBD 的深度相机、加速度计和陀螺仪以及一个激光雷达,用于探测周围环境和车的状况;
动力方面,电池使用的是 6S 的航模动力锂电池,续航 2~3 小时;
控制方面,座椅的后方搭载了主控计算模块。
图纸设计完成,接下来就是软硬件的实现了。
为了获取硬件部分所需的零件,稚晖君选择了 3D 打印和机床加工相结合的方式(有个家里有厂的朋友),前者适合打印强度要求不高的塑料零件,后者用来加工固定电机的金属零件。
接下来到了第二个部分,车子的机器大脑——计算单元。
车子的计算单元被分为低算力、低时延、运行实时系统的“小脑”和高算力、高时延、运行非实时系统的“大脑”。
前者用于控制车身,用 ESP32 来实现;后者用于感知、思考和决策,用到了昇腾的边缘计算芯片昇腾 310。
为了将两部分整合到一起,稚晖君设计了一个四层的载板。PCB 打样之后,他手工将其焊了出来。“大脑”和“小脑”是通过总线相连的。此外,他还在软件上实现了一套 RPC 框架,让它们可以方便地进行通信。
“小脑”的框架是基于 FreeRTOS,主要是实现传感器的数据处理以及电机的控制算法,还有一个小屏幕实时显示一些参数:
“大脑”的软件框架则要复杂很多,除了基于昇腾的整个 AI 栈之外,稚晖君还在系统中使用了 ROS 框架(机器人领域常用框架,集成了大量的工具、库、协议,提供类似 OS 所提供的功能,简化对机器人的控制),后面的消息分发、业务串流、SLAM 等的实现都是基于 ROS 开发的。
“脑子”有了,电路还缺一个“心脏”,也就是驱动器。
稚晖君曾经在去年 9 月份展示过他设计的一个超迷你 FOC 矢量控制驱动器,那个项目就是为今天的自动驾驶自行车所准备的。虽然个头还没有巴掌大,但这个驱动器可以实现两路共 100A 的无刷电机 FOC 控制,同时还驱动了前面的 60KG 舵机以及一个散热风扇。
把以上结构零件和电路全部整合起来,一辆自动驾驶自行车就诞生了。
不过,这个自行车目前还没有“灵魂”,需要通过运动学、动力学建模等步骤来注入灵魂。
稚晖君表示,这个车子的控制代码中有 50 多个重要参数,比如控制周期、反馈矩阵、PID 增益等。
这些数字全部都要得到合理设置,才能使系统进入稳定且快速收敛的状态。电机功率、飞轮质量等物理参数的设置则需要有准确的数学模型来指导。
在得到模型之后,为了进一步验证模型的准确性,稚晖君使用了游戏引擎 Unity 构建一个真实的物理环境进行仿真,给小车赋予真实的质量及重力,然后将控制算法的计算结果可视化显示出来。
然后把仿真的结果迁移到现实环境。
稚晖君在姿态系统中使用的是LQR控制器,方向控制使用了经典地PID,传感器则是对加速度计和陀螺仪数据使用了二阶的巴特沃斯滤波器之后,再通过卡尔曼滤波进行数据融合。
经过漫长的参数调整之后,控制算法终于收敛到了完美的效果。
至此,“能动”的目标就完成了,接下来就要引入AI实现自动驾驶了。
前面提到,这个自行车搭载了深度相机,再结合一些 AI 算法,车子就可以实现自动避障、自动跟随等功能。
此外,车子搭载的激光雷达还可以用来完成路径规划,激光雷达通过测量激光发射到反射回来所消耗的时间,乘以光速,就可以获得目标的距离位置,由此360度成像就能获得比摄像头更可靠的深度信息,将这些数据用于SLAM图与路径规划,最后就可以实现让车子自主探索环境。
就这样,稚晖君一个人完成了一个团队的项目。
不过,稚晖君表示由于开发时间有限,这次项目的改造只是实现了非常基础的自动驾驶功能。
稚晖君表示还有很多可以改进的地方,如龙头的传统结构设计得不够合理,如果换成谐波减速伺服电机驱动,那么行驶的稳定性可以大幅提升;又比如受限于整车的功率,这套系统还不能载人,但如果换成电动车就不一样了。
稚晖君表示,设计这个项目的想法很早就有了,起因是看到清华大学当时设计出一款自行车,还登上了《Nature》杂志的封面,因此想能不能复现一个类似的项目。
因此稚晖君给这个项目起名为XUAN。
对比,评论区有网友留言表示:作为清华那个自行车项目的参与者说明一下。。那篇 Nature 文章并不是因为这个自行车本身而上的 Nature ,而是因为自行车上的那款芯片。那个自行车实验更多只是作为一个展示的 Demo 用来证明该芯片可以跑各种适用于不同场景下的算法。选取自行车一是因为“智能自行车”本身就是一个比较适合搭载多种不同小算法来实现多种功能的项目,本身这个概念也比较吸引眼球,再就是当时自动化系之前就有一辆改装过的助力自行车,能省去不少前期工作。所以侧重点还是和 UP 有区别的。但也正因为亲历过推着这个车在操场上跑实验的经历才知道 up 的工程能力有多强,这真的是一个非常考验软硬件开发能力的事,佩服。
最后,稚晖君表示,为了方便大家学习,稚晖君还开源了项目的硬件部分,有兴趣复现的同学可以去 GitHub 下载相关资料。
项目地址:https://github.com/peng-zhihui/XUAN-Bike
他是华为天天才少年项目中的一员,他的个人称号为“野生钢铁侠”,希望跟钢铁侠一样在山洞中打造出钢铁战衣,由于在B站发布了一条自制硬币大小的AI电脑爆红网络,他给这台电脑也取名贾维斯。
他叫彭志辉,2018 年研究生毕业于电子科技大学,曾就职于 OPPO 研究院 AI 实验室,后通过“天才少年计划”加入华为,职位是 AI 算法工程师,目前正致力于自研深度学习推理框架与移动计算平台的异构加速相关技术。
在自行车项目之前,稚晖君还设计、制作过“B 站最强小电视”、“电子墨水屏 NFC 智能门禁卡”等大家耳熟能详的创意作品,有兴趣的同学可以进入稚晖君主页查看。
稚晖君 B 站主页链接:https://space.bilibili.com/20259914/video
责编:Demi