华为天才少年,造出自动驾驶单车!图纸已开源,重新定义「自行」车!

本文主要是介绍华为天才少年,造出自动驾驶单车!图纸已开源,重新定义「自行」车!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

程序员的成长之路

互联网/程序员/技术/资料共享 

关注

阅读本文大概需要 6 分钟。

鱼羊 金磊 发自 凹非寺 
量子位 报道 | 公众号 QbitAI

果然高手在民间。

谁能料到,一辆自行车的硬核打开方式,竟是大火的自动驾驶

踢开脚撑,金鸡独立、稳如泰山:

单侧加个板砖?小场面:

毕竟,它是连高难度“杂技姿势”都能hold住的自行车:

没事走两步?

可以有,还是会自己拐弯的那种:

避障上路,毫无压力:

甚至还配备了特斯拉都没有的激光雷达

这就是B站“野生钢铁侠”稚晖君耗时4个月时间(基本只是周末),打造出的全新项目XUAN (轩)。

短短几天,播放量超过150W,硬核、复杂程度之高,直接看呆一众网友。

来感受一下这个画风。

连B站老板陈睿都被吸引而来:

甚至业内人士也直呼:

任何一个部分拿出来都是一篇本科毕业论文。

还有实物,硕士毕业绰绰有余……

稚晖君到底是如何打造的这么一台“赛博朋克”自行车?

接下来,让我们一起一探究竟(经授权)。

(你可能还很关心它的价格,别着急,我们文末揭晓答案~)

把自行车做成自动驾驶,共分几步?

稚晖君选择的自行车,是大家非常熟知的死飞 (Fixed Gear)。

(没错,就是漂移玩家的最爱)

这种自行车的一大特点,便是结构简单、没有刹车。

于是,稚晖君先对死飞进行了一个CAD建模的工作。

建模工作完成之后,便得到了一辆虚拟自行车

此后的所有改造工作,便可以在计算机上完成。

整体来看,XUAN的诞生一共分为三大步

  • 硬件改造:因为自行车是一个欠驱动系统,所以先要做的就是让它站稳,然后跑起来。这一步将涉及一套复杂的自动控制系统

  • 智能化:毕竟自动驾驶嘛,“工具人”就得被抹去。因此,这一步便是搭载一整套传感器组成的感知网络,以及一个算力足够强大的计算芯片作大脑

  • 软件和算法:最后一步,便是在上述的硬件基础上,开发、实现一套感知和控制算法。稚晖君称之为“注入灵魂”。

Step by Step,先来看下第一个大问题。

自行车怎么自己保持平衡?

在骑自行车的时候,前后方向的平衡,靠得是2个轮子的支撑和地面摩擦力。

左右方向上,运动过程中靠的是龙头的左右调节,获取转向的加速度,以此抵消重力的影响。像这样:

那么在静止状态下呢?

稚晖君给出的思路便是——角动量守恒

简单来说,当车子在重力作用下发生倾倒,就用动量轮来产生一个相反力矩,抵消掉重力力矩。

具体而言,稚晖君在这辆死飞座位下方安装了一个无刷电机,目的是驱动一个金属的动量轮。

而在座位后方,他也安装了一个无刷电机,这个目的则是靠摩擦力来驱动后轮,让自行车整体前后运动。

稚晖君本是想用3D打印来完成这两个零件的加工,但碍于材料硬度和刚性不足,所以金属材料成为了此次的首选。

(所幸,稚晖君朋友家里“有厂”,问题迎刃而解)

而后,便是快乐的组装环节:

OK,自行车的平衡问题,就此解决。

自行车的“机器大脑”

硬件框架有了,想让自行车能跑起来,甚至能认路,下一步就是上“脑子”。

跟人类相似,机器人也分“大脑”和“小脑”。

简单来说,小脑用来控制实时行动;大脑则负责耗费算力、高时延的感知和决策。

这一回,稚晖君给自行车上的“小脑”是ESP32。

ESP32是一种低成本、低功耗的单片机控制器,集成Wi-Fi和双模蓝牙。

基于FreeRTOS(一个开源嵌入式实时操作系统),稚晖君搭建了小脑的RPC通信框架,用来实现传感器的数据处理,以及电机的控制算法。

“大脑”则是昇腾310。这是昇腾系列的边缘计算芯片,基于达芬奇架构,最高能够提供22TOPs的算力。

大脑的算法开发,主要基于昇腾AI栈和ROS(机器人操作系统)实现。

于是,在深度相机、激光雷达等传感器的帮助之下,这辆自行车能够检测出周围的物体,实现避障和跟随:

还能够机智地识别地形,给自己规划路径:

自行车的“机器心脏”

当然啦,“成精”的自行车,不仅要有头脑,还要有一颗强劲的“心脏”来驱动它工作。

而XUAN的“心脏”来自稚晖君的另一个项目,Ctrl-FOC矢量控制驱动器

这是一个超迷你双通道无刷电机驱动器,单路最大驱动电流能超过100A

值得一提的是,稚晖君的这一FOC驱动器有两个版本的设计方案,其中一个版本,电路设计为上下叠板设计,将逻辑单元和功率单元分开。也就是说,只需要替换掉驱动电路,就可以匹配更大功率的电机。

具体到XUAN这个项目,下图中这么大点的驱动器,最终实现了两路共100A的无刷电机FOC控制,还驱动了车头60kg扭力舵机和散热风扇。

最后,注入灵魂

万事俱备,但想要上路,至此还少了一点炼丹的灵魂——调参

稚晖君表示,这辆自动驾驶自行车的控制代码中,有超过50个重要参数,包括控制周期、反馈矩阵、PID增益、滤波器截止频率等等。

此外,电机的功率、重心的分布等物理参数,也都会对最终的效果造成影响。

稍有不慎,那自行车就不是稳如老狗那画风了……

在数学建模之后,稚晖君还采用了游戏引擎Unity作为仿真环境,像正经自动驾驶研发那样,先在仿真环境里让自行车跑了个踏实。

总之,让一辆自行车成熟起来,自己上路,够不容易的。

就有网友表示:

人傻了,毕业设计题目是自行车自平衡系统设计,做到调参就不会了。

不过,受限于整车功率,目前这辆自行车还不能载人。

另外,也有网友提出,用动量轮来控制平衡属于某种意义上的作弊。对此,稚晖君回应:现在的龙头传动结构设计不太合理,之后会尝试只用龙头控制平衡。

为什么要造XUAN?

有关“栈溢出工程师”、“野生钢铁侠”稚晖君,想来关注B站科技区的小伙伴们已经很熟悉了。

稚晖君本名彭志辉,2018年毕业于电子科技大学,2020年通过“天才少年计划”加入华为。

他的视频向来以硬核著称,比如从手画PCB到写C++代码全部一人搞定的套娃小电视。

辣么这次,稚晖君又是怎么萌发了打造一辆自动驾驶自行车的念头的呢?

理由有些“暴力”……

骑车不小心摔了,脸刹着地……

稚晖君表示,“这事不能就这么过去了”,于是乎:

(心疼稚晖君几秒)

当然,稚晖君本人也在视频中表示,其实很早就有设计这种自行车的想法。

最初是因为看到清华大学的那项自行车研究,可以跟随人类,敏捷避开障碍物。

其背后的类脑芯片“天机”,也于2019年8月登上Nature封面。

好奇的小伙伴肯定会问了,二者有何区别

量子位替你们问完了哈~

首先,是原理不太一样。

清华的自行车模仿的是人类行为,没有使用动量控制,而稚晖君的“轩”则涉及到了动量控制。

此外,在龙头方面,稚晖君表示在改进过后,也可以实现清华的控制方式(移动过程使用龙头平衡,静止状态使用动量平衡)。

但最核心的一个区别就是,清华打造的自行车背后,核心是类脑芯片

对此,稚晖君表示:

他们的工作很厉害,我这个无法类比,只是受他们启发做了个类似的应用。

为了体现跟清华工作的区别,稚晖君本人还在项目名字上下点了功夫。

XUAN里的“U”,代表的意思是unNATURAL,“正经翻译”就是——没上过Nature……

这个项目一如既往地开源了,如果你也想复刻一下……

哦对了,是时候该揭晓XUAN的造价了——据大神本人不完全统计,超3万元

不过,稚晖君也表示:

最终硬件成本来算的话应该不到一万,就激光雷达贵一点,主要还是试错成本。

以及,划重点,不售卖哈~

<END>

推荐阅读:

代码对比工具,就用这7个!

为什么不建议使用 Java 自带的序列化?

互联网初中高级大厂面试题(9个G)

内容包含Java基础、JavaWeb、MySQL性能优化、JVM、锁、百万并发、消息队列、高性能缓存、反射、Spring全家桶原理、微服务、Zookeeper、数据结构、限流熔断降级......等技术栈!

⬇戳阅读原文领取!                                       朕已阅 

这篇关于华为天才少年,造出自动驾驶单车!图纸已开源,重新定义「自行」车!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/357083

相关文章

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

Flask 验证码自动生成的实现示例

《Flask验证码自动生成的实现示例》本文主要介绍了Flask验证码自动生成的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 目录生成图片以及结果处理验证码蓝图html页面展示想必验证码大家都有所了解,但是可以自己定义图片验证码

Python Excel实现自动添加编号

《PythonExcel实现自动添加编号》这篇文章主要为大家详细介绍了如何使用Python在Excel中实现自动添加编号效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍简单的说,就是在Excel中有一列h=会有重复

无需邀请码!Manus复刻开源版OpenManus下载安装与体验

《无需邀请码!Manus复刻开源版OpenManus下载安装与体验》Manus的完美复刻开源版OpenManus安装与体验,无需邀请码,手把手教你如何在本地安装与配置Manus的开源版OpenManu... Manus是什么?Manus 是 Monica 团队推出的全球首款通用型 AI Agent。Man

Springboot的自动配置是什么及注意事项

《Springboot的自动配置是什么及注意事项》SpringBoot的自动配置(Auto-configuration)是指框架根据项目的依赖和应用程序的环境自动配置Spring应用上下文中的Bean... 目录核心概念:自动配置的关键特点:自动配置工作原理:示例:需要注意的点1.默认配置可能不适合所有场景

Java中实现订单超时自动取消功能(最新推荐)

《Java中实现订单超时自动取消功能(最新推荐)》本文介绍了Java中实现订单超时自动取消功能的几种方法,包括定时任务、JDK延迟队列、Redis过期监听、Redisson分布式延迟队列、Rocket... 目录1、定时任务2、JDK延迟队列 DelayQueue(1)定义实现Delayed接口的实体类 (

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s