电子发烧友网报道(文/李弯弯)近年来自动驾驶大爆发,不仅仅是各大厂商纷纷入局,网络上也涌现出一批科技达人,设计各种类型的自动驾驶自行车,自动驾驶电动车……
最近B站一位UP主发了一条视频,说自己之前以电动汽车为原型,设计了一辆自动驾驶两轮车,车是设计出来了,结果却因为意外把一条腿给炸没了。
车子的核心原理是,基于角动量守恒理论设计的。在车的内部,有一个高速旋转陀螺仪,速度可达到每分钟上万转,当物体高速旋转的时候,它的角动量很大,旋转的轴就会一直稳定的指向一个方向,意思是说,想要更加稳定,就必须转得足够快,以此来保证两轮车平衡。
之所以会出现意外,是因为他当时把转数调太高,导致内部的陀螺仪炸开,飞出的铁块把腿给炸没了。据他描述当时的场面惨不忍睹,机床上两公分厚的铸铁都没有抗住,炸了一个缺口,房屋墙壁也炸出来好多洞。
之前稚晖君设计过无人驾驶自行车,与他的自行车相比,这个以电动车为原型设计的无人驾驶两轮车,可以载人。不过因为受伤的缘故,这位UP主说,之前设计的这个车子也就一直搁置下来,他格外提醒,大家在工作和做研究的时候,一定要注意安全。
真的是被这位UP主深深感动到,可以说是非常励志了,在他的个性签名写的是“意外受伤截肢,很幸运的捡了条命,以后积极生活”,更有意思的是,他给自己设计了各种功能的假肢,果然没有什么可以抵挡对科技创造的热情。
如何设计一辆无人驾驶两轮车
那么具体如何设计一辆两轮无人驾驶车呢?从稚晖君视频,可以详细的了解到每一个设计步骤,他设计的是一辆无人驾驶自行车。
首先,与4个轮子的汽车不同,自行车是一个欠驱动系统,不进行控制的话,不仅不能跑,还站不稳,因此这里需要一套复杂的自动控制系统;
其次,为了把驾驶员工具人的存在性给去掉,需要给车子搭载一套传感器组成的感知网络,以及一个算力足够强大的计算芯片作为大脑;
最后,就是在前面的硬件基础上开发实现一套巧妙的感知和控制算法,俗称注入灵魂。
第一步,硬件改造,让车子跑起来
稚晖君改造的自行车是一辆死飞(Fixed Gear),它结构很简单,没有刹车,减速靠反向蹬车。首先是使用计算机辅助工具CAD来进行建模,一通操作之后得到一辆虚拟的自行车。
图:用CAD建模得到的虚拟自行车
有了车体模型之后,所有的改造工作都可以在计算机上完成。
图:在设计图纸上改造完成的车子
稚晖君给车子安装了两个巨大的无刷电机,以及一个控制龙头的舵机。传感器方面,搭载了一个RGBD的深度相机,加速度计和陀螺仪,以及一个激光雷达。电池使用的是6S的航模动力锂电池,续航大概有2-3个小时。主控计算模块被安置在座椅的后方。
两个无刷电机的作用是什么呢?自行车前后方的平衡靠的是两个轮子,以及地面的摩擦力,而左右的平衡,在骑行的时候靠左右调节龙头,来获得转向加速度,以此抵消重力的影响,而静止状态下怎么平衡呢,靠的是角动量守恒。
角动量守恒定律是自然界中最普遍的守恒定律之一,当系统中一个物体角动量发生变化的时候,就会将力矩传递给其他物体,中间的无刷电机,就是用于驱动的动量轮,后面的无刷电机,则是用于靠摩擦力驱动后轮,让车子整体前后运动。
图纸设计完之后,就是零件加工,其中一部分零件可以用3D打印制作,但由于做的东西功率比较硬核,3D打印塑料的硬度和刚性,都不太适合作为核心的结构件,所以用于固定电机的零件,使用的是金属来加工。凑齐改造所需的所有零件,组装完成就是下面的样子。
第二步,智能化,安装主控模块以及AI计算单元
我们在设计机器人时,会将计算系统分为低算力、低时延、运行实时系统的小脑,用于控制身体,以及高算力、高时延、运行非实时操作系统的大脑,用于感知、思考和决策。
在这个系统中,小脑使用的是MCU ESP32,大脑用的是昇腾310 AI处理器,昇腾310搭载达芬奇Core,可以提供最高22TOPS的AI算力。
图:再设计了一个载板,把两个计算单元整合到一起
大脑和小脑通过总线相连,并在软件上实现一套RPC框架,让它们可以方便地进行通信。
小脑的框架是基于FreeRTOS,主要是实现传感器的数据处理,以及电机的控制算法,简单地划分了三个任务:闭环控制线程,电机通信线程,以及屏幕刷新线程。
大脑的软件框架则要复杂很多,除了基于昇腾的整个AI栈之外,稚晖君还在系统中使用了ROS,这是机器人界常用的框架,它本质上是一个高性能的通信中间件,后面的消息分发、业务串流、SLAM等的实现都是基于ROS开发的。
大脑和小脑有了之后,电路方面还有一个很重要的模块,那就是心脏,采用的是Ctrl-FOC驱动器,这个驱动器很厉害,虽然体积很小,却实现了两路共100A的无刷电机FOC控制,同时还顺便驱动了前面的60KG舵机,以及一个散热风扇。
图:把结构零件和电路全部整合起来,就完成了
第三步,算法,给机器注入灵魂
稚晖君介绍,机器人是一个复杂的系统,设计的时候,科学的方法是首先对机器人进行理论上的分析,也就是运动学和动力学的建模,数学建模会告诉我们哪些事情是相对容易的,哪些是复杂的。
举例来说,在这个车子的控制代码中,有超过50个重要参数、控制周期、反馈矩阵、PID增益、滤波器截止频率等,这些数字要全部得到合理设置,才能使系统进入稳定,且快速收敛的状态。
而一些物理参数的设置,比如说,电机功率应该选多大?飞轮质量应该选多少?重心的分布怎么设置才比较合理等,也都需要有准确的数学模型来进行指导。
在得到模型之后,为了进一部验证理论的准确性,一般会先在计算机中进行仿真,视频中,稚晖君用的是一个游戏引擎Unity,在游戏引擎中构建一个虚拟的物理环境,赋给小车真实的质量和重力,然后将控制算法的计算结果可视化显示出来。
验证完成之后,还有一个sim2real的过程,就是把仿真的结果迁移到现实环境中,这个过程很复杂,因为现实中有很多的不确定性因素,很多情况下,机器人往往是在仿真中重拳出击,然后在现实中唯唯诺诺,所以整个调试的过程也是异常艰辛。
这套系统,姿态控制使用的是LQR控制器,方向控制使用的是PID,传感器则是对加速度计和陀螺仪,数据使用二阶的巴特沃斯滤波器之后,再通过卡尔曼滤波进行数据融合,最终得到车身的姿态。经过漫长的参数整定之后,控制算法终于收敛了完美的效果,到这里,一辆成熟的自行车就完成了。
图:一辆成熟的自行车
经过测试,车载的姿态保持性能非常好,受到一定冲击,或者突然增加负载,也能稳定的保持平衡。
结合后轮电机的驱动能力,让它走两步也毫无压力。至此,能动的基本目标已经达成了。
最后引入AI,实现一定程度的自动驾驶。这个自行车搭载了深度相机,可以在电脑上看到,车子WIFI实时的RGB图,再结合一些AI算法,可以实现避障、让它在行驶过程中,识别各种物体,进行跟随等功能。
除此之外,自动驾驶中的一个很重要的技术,就是路径规划,车子搭载了激光雷达,激光雷达通过测量,激光发射到反射回来所消耗的时间,乘以光速就可以获得目标的距离位置。
由此360度成像就能够获得比摄像头更可靠的深度信息,将这些数据用于进行SLM图与路径规划,最后就可以实现让自行车进行自主探索环境了。
小结
稚晖君之前在设计完这辆无人驾驶自行车的时候,提到由于开发时间有限,本次项目只是实现了非常基础的自动驾驶功能功能,还有很多可以改进的地方,比如,受限于整车的功率,这套系统目前无法实现载人,如果换成电动车,就不一样了,而如今用无人驾驶电动车载人的设计也已经有人设计出来啦,给科技爱好者们的创造力点赞。
全部0条评论
快来发表一下你的评论吧 !