本篇文章2343字,读完约6分钟
雷锋。(公开号码:雷锋。出版社:最近,乔治·霍兹创办的自主驾驶创业公司“娱乐”用medium写了一篇文章,分享他开发的开源驾驶助手。
根据雷的说法,逗号一号,逗号. ai发布的第一个产品,一个月后被美国公路交通安全局停止使用,因为它不能证明它的安全性。然后hotz改变了想法,打开了逗号. ai的自动驾驶软件,甚至提供了一个硬件组装指南来指导极客用户自己构建一个即插即用的辅助驾驶套件。
Openpilot就是这个想法的产物。具体来说,openpilot可实现油门、刹车和方向的自主控制,控制时间可达6分钟(使用时驾驶员应注意路况)。让我们来看看openpilot是如何工作的,希望业内专家能够判断这种方法是否可靠。
Openpilot正在使用
如何与汽车交流?
如今,大多数商用车辆都通过多条can总线连接。其中一辆can总线将连接到obd-ii,其余大部分将隐藏在车内板下。
图1:熊猫
Openpilot可以使用neo或panda作为can的接口。Openpilot还可以支持openxc、kvaser或canbus triple,因为它是开源设计。
在最初由openpilot支持的本田思域(Honda Civic)和伊尔克斯(ilx)汽车上,所有通信只能由两辆can总线完成,一辆用于车辆,另一辆用于雷达。然而,其他车辆可能不同。
汽车会说什么语言?事实上,can是一个非常简单的协议,任何设备都只能通过一条总线向局域网上的其他设备发送信息。该信息将包含标识符,在标准can协议中长度为11位,在扩展版本中长度为29位。消息的最大长度是8字节。
标准can信息
标识符决定如何解析信息,dbc文件是指定解析方法的标准方式。以下代码是从参与本田思域测试的dbc文件中截取的,从中我们可以看到转向控制包是如何被解析的:
bo_ 228转向控制:5 adas
sg_ steer_torque : 7|16@0- (1,0) [-3840|3840] "" eps
SG _ steer _ torque _ request:23 | 1 @ 0+(1,0) [0|1] "" eps
sg_ checksum : 39|4@0+ (1,0) [0|15] "" eps
sg_ counter : 33|2@0+ (1,0) [0|3] "" eps
该代码第一行的信息标识符是228或0xe4,另外四行显示了将四个字段打包成5字节信息的方法。
如果您想查看更多解析can信息的代码,可以在github上搜索can_parser.py和dbc.py。
如何实现精确转向?恐怕你已经注意到了转向控制组件并没有规定车轮转向的精确方向,而是控制着传递给车轮的扭矩。这确实是许多车辆转弯时的控制模式,但是需要在这里添加一些附加的控制来构建闭环控制系统。此外,车辆的转向角度已集成在can总线上。
bo_ 330转向传感器:8个eps
sg_ steer_angle : 7|16@0- (-0.1,0)[-500 | 500]“deg”neo
这样,预定角度、当前角度和转矩控制都完成了,这适合于建立pid回路。然而,因为扭矩小,所以仅使用pi电路。
如果你想看到更多的pi循环执行方法,你可以在github上搜索
Ros 2.0说得太多了,我们也应该谈谈openpilot的架构。
乍一看,它非常类似于ros(机器人操作系统),但后者有些臃肿,定制的消息传递系统和输入系统并不流行。
在openpilot上,开发人员使用zmq发布/订阅模型来处理信息传输,而输入使用cap'n proto。有趣的是,在ros发展到2.0时代后,同样的解决方案将被使用。
在车辆抽象层的设计中,R&D人员希望openpilot能够与不同的车辆进行通信。如果你想知道车辆抽象层的相关代码,你可以在github上搜索car.capnp。
自适应巡航(纵向)在开放式驾驶中,开发人员将油门/刹车与方向盘分开。纵向控制与传统车辆相同,这里不使用神经网络。
开发者还在github上发布了radard.py代码,该代码可用于分析来自车载雷达的信息。同时,它基本上与视觉系统集成在一起,并能以最高的速度返回它前面两辆车的位置信息。
有了这些信息,自适应巡航系统可以决定驾驶时的速度。
视觉系统(水平)visiond负责控制神经网络,但由于业务模型,这部分采用了封闭源代码设计,但api是开源的。
struct modeldata {
frame id @ 0:uint 32;
path @ 1:path data;
left lane @ 2:path data;
right lane @ 3:path data;
lead @ 4:lead data;
...
在视觉系统的帮助下,openpilot可以成功地完成路线规划,同时,它可以像它的手背一样知道左右车道和前方车辆的方向。
在pathplanner.py代码的帮助下,将各种路径选择进行整合,从而完成最佳方案的选择。同时,latcontrol.py代码还将为道路上的车辆设置目标点,然后车辆将跟随这些目标点。当然,这个系统还有很大的进步,将来还会增加更复杂的控制策略。
综合经理负责控制车辆的启动和停止。Boardd、sensord和visiond可以与外界通信,loggerd负责记录机器学习的数据,plannerd负责告知车辆的目的地。Controlsd是与车辆通信的主要过程,在车辆启动后将一起运行。
雷锋。com推荐阅读:
继开源软件之后,中国第一个早期采用者逗号艾嗅到了自主驾驶的新商机?
雷锋原创文章。严禁擅自转载。详情请参考转载说明。
标题:Comma.ai开发了一款驾驶助理openpilot,它是如何工作的?
地址:http://www.hcsbodzyz.com/hcxw/9434.html