https://mankaran32.medium.com/hacking-my-android-phone-to-drive-my-car-9ea98c30e91b
作者:Mankaran Singh 2023年6月21日
这篇博客文章概述了我和朋友们打造一款价格合理、安全的自动驾驶汽车系统的历程。
这个博客分为三个部分:硬件、软件和结果。
这是一个古老的故事,我认为与社区分享会很好。
硬件
你真正需要什么来制造一个ADAS系统,让你保持在车道上,并根据前车调整车速?
。传感器:加速度计、陀螺仪、指南针、GPS
。计算单元:一个好的CPU,一些好的RAM,一个用于运行神经网络的GPU。
。用户界面:一个显示器,一个触摸屏。
等等,这听起来熟悉吗。。这是一部智能手机?!
我们四处搜寻,找到了openpilot项目。这正是我想要的。
但我遇到的问题是,openpilot只在两种型号的安卓手机上运行,即oneplus 3t和leeco pro 3,它们也只在基于snapdragon的芯片上运行。新版本的openpilot只在c3上运行,c3是comma的专有芯片。我深入研究了openpilot代码库,并意识到为什么它很难移植到其他手机。特别是因为openpilot使用自定义的底层代码与相机通信,以及需要在这些设备上启动NEOS/agnos的一些内核破解。
但我的问题是,为什么没有类似openpilot的应用程序可以直接下载并开箱即用?
软件
我们决定修改openpilot代码库,使其能够在技术上可以在任何android手机上运行,可以是snapdragon、exynos、google tensor、mediatek等!
现在,第一个障碍是,很多openpilot代码库都是用c++和python编写的。但是android不运行c++或python可执行文件。要怎么办?
在手机上运行linux发行版!
答案是chroot/proot。chroot/proot允许我们模拟任何linux发行版,如ubuntu、arch-linux等,只要它们与主机的体系结构相同。
安卓运行的是bionic而非glibc。Bionic是标准C库的实现,由谷歌为其Android操作系统开发。它与GNU C库(glibc)(运行在标准linux发行版上)的不同之处在于,它是为内存和处理器能力低于典型linux系统的设备设计的。android也不包括你在典型的Linux发行版上找到的所有GNU库。它也不包括像Xorg这样的X服务器,所以您不能运行标准的图形Linux应用程序。
这意味着所有为标准linux编译的库都不能与android一起使用,除非你将它们与android NDK交叉编译以使用bionic。这似乎已经有很多工作要做了,而且根本不能保证openpilot使用的所有库都可以使用arm架构的bionic 进行编译。问题不在于arm体系结构,它得到了广泛的支持,标准x86-linux发行版上几乎所有可用的库也可用于arm。主要问题是bionic。几乎没有一个库是基于bionic预编译的。
因此,flowpilot没有为android交叉编译库,而是使用chroot或proot绕过了这一点。把chroot想象成一种“原生的虚拟机”。有了这个,您可以模拟运行一个标准的linux发行版。
我使用termux来访问android上的终端。
我将这个项目命名为“flowpilot”,这是openpilot的一个修改版本,可以在任何android和linux机器上运行。
通用安卓硬件访问,flowpilot APK
现在,您可以在chroot中完全编译openpilot的部分内容。但是等等,display/ui怎么样?你会如何访问安卓摄像头、gpu和其他硬件?这不能通过chroot环境来实现,因为尽管像gpu、摄像头这样的设备可以在/dev/上使用,但我们无法访问它们的专有驱动程序。
为此,我不得不建立一个单独的APK。这个apk将处理运行gui、gpu/dsp上的神经网络、访问传感器等,因为供应商大多很好地遵守了安卓OSP规定的硬件访问API。
应用程序和chroot环境通过sockets相互通信。
我们特别喜欢openpilot UI,由于我缺乏创造力……我无耻地复制了openpilot的UI风格,并用libgdx重新编写了它。我使用libgdx是因为它是跨平台的,并且希望为android和linux桌面PC维护统一的代码库。
测试和结果
这是一辆redmi note 9 pro驾驶的铃木alto汽车!!
这辆车是当地一所大学的研究车,他们在那里安装了用于控制转向的定制电机。电话通过无线CAN总线接口进行通信。
完整的视频稍后将在youtube上发布。
接下发生了什么?
我们一直在模拟器上开发flowpilot ,因为我们无法永久访问视频中展示的汽车。我们添加了panda支持,并使flowpilot与openpilot完全兼容。
该项目是开源的,可以在这里的github上获得(https://github.com/flowdriveai/flowpilot)。
它已经存在很长一段时间了。许多来自openpilot社区的人来测试它。
想象一下,去当地的一家商店,买一些电缆,下载一个安卓应用程序,然后就可以使用世界级的自动驾驶系统openpilot
安全问题
尽管它是一个很酷的项目,但使用它的风险自负。
以下是openpilot安全模型的摘录。
1.驾驶员必须始终能够通过踩下制动踏板或按下取消按钮立即重新手动控制车辆。
2.车辆不得过快地改变其轨迹,以免驾驶员做出安全反应。这意味着,当系统接合时,致动器被限制在合理的限度内操作。
“安全层”是确保安全的一种足够好的方式。安全层过滤输入,并保证安全层的输出在安全范围内。
手机和执行器之间有多个安全层,其中包括panda ,它运行用MISRA C编写的所有安全关键安全代码。最高级别的安全是转向电机的ECU本身。ECU限制输入指令。其扭矩和“扭矩率”是受限的。
所有ADAS代码都是不确定。但安全层将过滤这些输入,使系统具有“确定性”。
所以,除非你知道自己在做什么,并有合适的专业人员支持,否则不要绕过这些安全层。
更多行动
FlowPilot测试#1(封闭测试版), 视频链接:
B站:https://www.bilibili.com/video/BV1kM4y177pb/
Youtube: https://www.youtube.com/watch?v=FBB2XRMej9M
FlowPilot测试#2 (v0.1.0 Release), 视频链接:
B站:https://www.bilibili.com/video/BV1pg4y1A7on
Youtube: https://www.youtube.com/watch?v=mt86H67DhE0
Flowpilot F2 Beta-大众捷达2019-GX010865, 视频链接:
B站:https://www.bilibili.com/video/BV15F411o7xp
Youtube: https://www.youtube.com/watch?v=L9O-WFmigSA
Flowpilot F2 Beta-大众捷达2019-GX010865, 视频链接:
B站:https://www.bilibili.com/video/BV1TX4y1W7Zu
Youtube: https://www.youtube.com/watch?v=06DLmtF6og4
你能提供什么帮助
加入我们的discord社区,在github(https://github.com/flowdriveai/flowpilot)上投一颗星!
Discord-与朋友和社区聊天的新方式
Discord(discord.com)是通过语音、视频和文本进行交流的最简单方式。聊天,闲逛,与朋友保持亲密关系…
结束语
虽然该系统适用于大多数手机,但我们发现,如果有针对运行此系统进行优化的精简内核,将会提高整体体验。我们现在在discord上有“手机品牌”频道,人们可以在上面利用安卓手机的极限。
~ 恭喜您完成了本篇博客文章!希望您喜欢。祝您有美好的一天!