CAN驾驶

引言


基于雷克萨斯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

Source: https://habr.com/ru/post/zh-CN450140/


All Articles