引言
基于
雷克萨斯RX 450h平台
的StarLine无人驾驶汽车是一项于2018年启动的研究项目。 该项目向来自
开源社区的有抱负的专业人员
开放 。 我们为所有人提供代码级别的开发流程,以在配备了昂贵设备的真实汽车上测试其算法。 为了控制汽车,决定使用开放框架Apollo。 为了使Apollo正常工作,我们需要连接一组模块。 这些模块帮助程序接收有关汽车的信息,并根据指定的算法对其进行控制。
这些模块包括:- 使用GPS坐标在空间中定位汽车的模块;
- 用于汽车转向,加速和制动的模块;
- 汽车系统状态模块:速度,加速度,方向盘位置,踩下踏板等;
- 用于获取有关汽车环境的信息的模块。 超声波传感器,照相机,雷达和激光雷达可以处理此问题。
首先,我们的团队面临着学习控制方向盘,汽车加速和制动的任务。 并且还接收有关汽车系统状态的信息。 为此,做了很多工作来研究雷克萨斯CAN总线。
理论部分
什么是CAN总线?
在现代汽车中,电子系统控制了所有系统(图1)。 电子部件是专用计算机,每台计算机都具有与汽车集成的所有必要接口。 使用数字通信接口,将这些单元联网以相互交换信息。 汽车中最常见的数字接口是CAN,LIN,FLEXRay。 其中,CAN被最广泛地使用。
CAN(控制器局域网)总线是行业标准网络。 1986年,该标准由博世开发。 1991年发布的第一辆配备CAN总线的汽车是Mercedes-Benz W140。 开发该标准是为了允许设备在没有主机的情况下彼此通信。 使用特殊消息交换信息,特殊消息包括ID字段,消息长度和数据。 每个块都有自己的一组ID。 在这种情况下,具有较低ID的消息在总线上具有优先权。 数据字段可以携带例如有关系统和传感器的状态,用于控制机构的命令等信息。
图 1.车辆CAN总线。在物理层面上,总线是双绞铜导体。 信号以差分方式传输,因此具有很高的抗噪能力。
图 2. CAN总线上信号的物理表示通过CAN总线,您可以接收有关各种传感器和车辆系统状态的信息。 同样通过CAN,您可以控制汽车的组件。 我们将这些机会用于项目。
我们选择雷克萨斯RX,是因为我们知道我们可以通过CAN管理所有必要的节点。 由于研究汽车时最困难的事情是封闭协议。 因此,选择此特定汽车型号的原因之一是Openpilot开源项目中存在CAN总线协议部分的描述。
正确驾驶汽车意味着了解汽车系统的机械部件如何工作。 我们需要对如何使用功率放大器或控制汽车的减速有很好的了解。 实际上,例如,当车轮转弯时,它们会产生对转向的阻力,这会在转弯时对转向产生限制。 某些系统必须在特殊操作模式下进入汽车才能使用。 我们必须在此过程中研究这些和其他细节。
电动助力转向
电动助力转向系统EPS(Electric Power Steering)是一种旨在降低转弯时的转向力的系统(图3)。 前缀“电子”是指系统的类型-电。 使用此系统操纵方向盘变得舒适,驾驶员将方向盘向正确的方向旋转,电动机帮助将方向盘旋转至所需角度。
功率放大器安装在汽车的转向轴上,其部件通过扭力轴互连。 扭矩传感器(扭矩传感器)安装在扭力轴上。 当方向盘旋转时,扭力轴会扭转,扭矩传感器会记录下来。 从扭矩传感器,速度传感器和曲轴转数接收的数据被馈送到ECU电子控制单元。 然后,ECU已经计算出必要的补偿力并向放大器的电动机发出命令。
图 3.电动助力转向系统示意图视频:LKA系统使用EPS系统操纵汽车。电子油门踏板
节气门是一种用于调节将落入发动机的混合燃料量的机构。 混合得越多,汽车行驶得越快。
电子油门踏板是一个涉及多个电子组件操作的系统。 踩下踏板时,有关踏板位置的信号会进入发动机控制单元ECM(发动机控制模块)。 ECM基于此信号,计算必须提供给发动机的所需燃油量。 根据所需的燃油量,ECM调节节气门开度。
图 4.电子油门踏板系统。视频:电子油门踏板用于操作巡航控制系统。电子驾驶员辅助系统
我们购买了装有各种数字单元和驾驶员辅助系统(ADAS)的汽车。 在我们的项目中,我们使用LKA,ACC和PCS。
LKA(车道保持辅助系统)是一种带状保持系统,由前置摄像头和计算单元组成。 例如,当驾驶员分心时,LKA会将汽车保持在车道上。 计算单元中的算法从摄像机接收数据,并根据这些算法做出有关汽车在道路上状况的决策。 该系统能够了解汽车正在向右或左车道无节制地行驶。 在这种情况下,会发出蜂鸣声以吸引驾驶员的注意。 越过车道时,系统本身将调整车轮的旋转角度,以使汽车保持在车道中。 仅当系统意识到车道之间的操纵不是由驾驶员引起时,才应进行干预。
ACC(自适应巡航控制)-自适应巡航控制系统,可让您设置所需的速度。 汽车本身会加速和减速以保持所需的速度,而驾驶员可以将脚从油门踏板和制动踏板上移开。 在高速公路和高速公路上行驶时,此模式使用方便。 自适应巡航控制系统能够看到汽车前方的障碍物并减速,以免与障碍物碰撞。 如果另一辆低速行驶的车辆向前行驶,则ACC会减速并跟随。 当检测到静态物体时,ACC将减速直到停止。 为了检测汽车前方的物体,这种系统使用了毫米波长范围的雷达。 通常,此类雷达以24-72 GHz的频率运行,并能够自信地看到300米距离处的物体。 雷达通常安装在格栅前徽章的后面。
PCS(预碰撞系统)-防撞系统。 该系统旨在防止与前方行驶的汽车发生碰撞。 当不可避免发生碰撞时,系统将碰撞损坏降至最低。 它还使用雷达估计到物体的距离,并使用前置摄像头对其进行识别。 PCS正面根据车辆的速度,与物体的距离及其速度来预测发生碰撞的可能性。 通常,系统具有两个操作阶段。 第一阶段-系统响起并显示在仪表板上,告知驾驶员危险。 第二阶段-使用ABS系统激活紧急制动,并激活安全带预紧器。
实践部分
方向盘
我们团队想要做的第一件事就是学会驾驶。 汽车中的方向盘可以由两个系统控制:IPAS泊车辅助系统(Intelligent Park Assist)和LKA。
IPAS允许您直接以度为单位设置转向角。 由于我们的汽车没有此系统,因此无法以这种方式检查和掌握转向。
因此,我们研究了汽车的电路,并意识到哪些CAN总线可能有用。 我们连接了一个CAN总线分析仪。 该日志按时间顺序包含总线中消息记录的文件。 我们的任务是找到EPS动力转向小组(Electric Power Steering)。 我们从一侧到另一侧取了方向盘日志,在日志中我们可以找到方向盘旋转角度和旋转速度的读数。 以下是更改CAN总线中数据的示例。 我们感兴趣的数据用标记突出显示。
向左360度转向
将方向盘向右旋转270度在下一步中,我们检查了车道保持系统。 为此,我们去了一条安静的街道,并记录了车道保持单元和DSU(驾驶辅助ECU)之间的交换日志。 使用CAN总线分析仪,我们能够从LKA系统计算消息。 图6显示了EPS控制命令。
图 5.使用LKA系统的转向命令LKA通过设置方向盘轴(STEER_TORQUE_CMD)上的扭矩值来控制方向盘。 该命令被EPS模块接受。 每条消息的头中都包含一个计数器值(COUNTER),该值随每次发送而增加。 LKA_STATE字段包含LKA状态信息。 要捕获控制,必须将STEER_REQUEST位置1。
负责重要自动系统运行的消息受校验和(CHECKSUM)保护,以最大程度地减少错误警报的风险。 如果消息中包含错误的校验和或计数器值,则汽车将忽略此类命令。 这是制造商提供的针对第三方系统干扰和通信线路干扰的保护措施。
该图(图6)显示了LKA操作图。 扭矩传感器-扭矩轴上扭矩传感器的值。 扭矩命令是LKA的转向团队。 图为如何操纵LKA将汽车固定在车道上。 当穿越零时,方向盘的旋转方向会改变。 即 负信号表示向右转,左值表示正。 将命令保持为零表示LKA缺乏控制。 在驾驶员的干预下,系统停止发出控制权。 LKA通过方向盘一侧的轴上的第二个扭矩传感器检测驾驶员的干预。
图 6. LKA系统时间表我们不得不检查指导小组的工作。 使用StarLine Sigma 10模块,我们准备了用于控制测试的固件。 StarLine Sigma 10应该向方向盘发出命令以向左或向右转动方向盘。 当时,我们没有用于控制模块的图形界面,因此我们不得不使用汽车的标准方法。 我们在CAN总线中找到了巡航控制杆的位置状态,并对模块进行了编程,以使操纵杆的上方位置将方向盘向右旋转,而下方位置-则向左旋转(图7)。
图 7.首次转向视频显示,控制是在较短的部分中进行的。 发生这种情况有几个原因。
第一个原因是缺乏反馈。 如果Torque Cmd信号与Torque Sensor之间的差异超过某个Δ值,系统将自动停止接受命令(图8)。 我们设置算法以根据轴上的扭矩值(扭矩传感器)来调整输出命令(扭矩CMD)。
图 8.信号差异会导致系统错误以下限制与EPS内置的安全系统有关。 EPS系统不允许LKA团队进行大范围的操纵。 这是很合逻辑的,因为 在道路上行驶时,突然进行操作并不安全。 因此,当超过轴上扭矩的阈值时,LKA系统会产生错误并关闭(图9)。
图 9.超过轴上转矩控制的阈值不管LKA系统是否被激活,带有来自其的命令的消息始终存在于总线上。 我们指示EPS模块以特定的力向左或向右转动车轮。 同时,LKA用“空”消息中断我们的程序包。 在我们的团队获得了当下的价值之后,标准才有了零(图10)。
图 10.常规消息带有零力矩值并中断我们的控制然后,使用StarLine Sigma 10模块,我们可以过滤来自LKA的所有流量,并在需要时阻止ID为2E4的消息。 这解决了问题,并且我们设法获得了平稳的转向控制(图11)。
图 11.顺畅的方向盘调整,无错误气体管理
ACC自适应巡航控制系统通过CAN总线控制加速和制动软件。 ECU引擎控制单元接收DSU命令,如果您需要加速,它将激活电子油门踏板。 再生制动用于制动汽车。 在这种情况下,一个命令用于制动和加速,只有值不同。
加速或减速控制命令如图12所示。它由加速值ACCEL_CMD,一对开销位和一个校验和校验和组成。 对于车辆加速,ACCEL_CMD为正;对于减速,为负。 加速度设置在0到3 m / s ^ 2的范围内,减速度类似,但是带有负号。 要将数据发送到总线,必须以系数0.001重新计算所需的加速度或减速度。 例如,要加速1 m / s ^ 2,ACCEL_CMD = 1000(0x03E8)。
图 12.控制汽车加减速的命令我们从标准ACC系统中删除了日志,并对团队进行了分析。 与我们对团队的描述进行比较并开始测试。
图 13. ACC自适应巡航控制加/减速日志(以标记突出显示)这并非没有困难。 我们在交通繁忙的道路上行驶,对加速团队进行测试。 车辆的加速或减速控制命令仅在巡航控制系统被激活时有效,不足以通过按钮激活它。 有必要找到前面行驶的汽车,然后打开以下模式。
图 14.当前面有另一辆车时,将启动巡航控制系统使用StarLine Sigma 10模块,我们发送加速命令,然后汽车开始加速。 至此,我们连接了用于控制StarLine Sigma 10模块的图形界面,现在我们可以使用应用程序中的按钮来控制方向盘,加速和制动。
车队一直努力直到输掉前面的赛车。 巡航控制系统已关闭,因此加速命令停止工作。
我们开始研究使用没有主动巡航控制系统的团队的可能性。 我不得不花很多时间分析CAN总线中的数据,以了解如何为团队工作创造条件。 首先,我们感兴趣的是,该块阻止了ACC命令的执行以加速或减速。 我必须研究哪些ID来自DSU,LKA,雷达和照相机,并且不使用各种传感器的假数据。
这个决定是在3周后作出的。 到那时,我们已经知道了汽车的各个模块是如何相互作用的,对消息流量进行了研究并确定了每个模块发送的消息组。 驾驶支持ECU(DSU)负责自适应巡航控制ACC。 DSU发出命令来加速和减速汽车,而正是这个单元从毫米范围雷达接收数据。 雷达以什么相对速度告诉DSU对象移动到机器的距离是什么,并确定其水平位置(向左,向右或向中心)。
我们的想法是替换雷达数据。 我们删除了跟踪汽车的日志,并在跟踪时从其中提取了雷达数据。 现在,打开巡航控制系统后,我们会发送有关前排汽车存在的虚假数据。 原来是欺骗我们的汽车,说前面的另一辆汽车在特定距离处移动。
a)

b)
图 15.巡航启动:a)尝试启动而不更换雷达数据; b)替换雷达数据时激活。当我们开始遇到障碍时,在仪表板上,前面车辆的存在图标点亮。 现在我们可以测试我们的管理了。 我们启动加速命令,汽车开始快速加速。
如我们所知,加减速命令是其中之一。 因此,他们立即检查了减速度。 我们通过主动巡航控制以极速行驶,发出了制动命令,汽车立即减速。
结果,现在事实证明是完全按照我们的需要来加速和减速汽车。
目标已实现。
我们还用什么
要制造无人机,必须控制辅助系统:转向信号,刹车灯,警报器,喇叭等。所有这些都可以通过CAN总线进行控制。硬件和软件
为了今天与汽车一起工作,我们使用了各种设备:- Marathon总线分析器使您可以同时连接和读取两条总线中的数据。分析仪制造商的网站提供免费的日志分析软件。但是我们使用公司编写的软件供内部使用。
- StarLine 10 . CAN LIN . C, . CAN-. , ID .
- Toyota/Lexus. : , -, , .
, , .
StarLine — , .
GitLab