首发于Apollo18号
线控车辆控制组件与自动驾驶的控制

线控车辆控制组件与自动驾驶的控制

Apollo项目中,对参考车辆的要求:“Drive-by-wire”,线控车辆。本文从自动驾驶控制考虑,介绍车辆线控的三个方面:速度(Speed)、转向(Steering Angle)和刹车制动(Brake)。

对于车辆控制的疑问有很多。比如转向,具体跟车辆的交互,是传入转向角度还是力度?刹车制动是由IPC告诉硬件多少力度呢,还是智能到具体的制动百分比就可以?要实现这些控制指令,首先与参考车辆的底盘组组件有很大的关系,要了解与车辆底盘的各个组件交互,就要先了解这些控制组件。

速度(Speed)

传统发动机节气门操纵机构是通过拉索或者拉杆,一端联接油门踏板,另一端联接节气门连动板而工作。但这种传统油门应用范畴受到限制并缺乏精确性。

电子油门

技术的发展,随着定速巡航(Cruise Main)功能的引入,车辆速度靠电子油门控制,即线控油门,现在已经有大量应用。

电子油门通过位置传感器,传送油门踩踏深浅与快慢的信号,这个信号会被ECU接收和解读,然后再发出控制指令要节气门(throttle)依指令快速或缓和开启它应当张开的角度,这个过程精准而快速。

电子油门通过用导线来代替拉索或者拉杆,在节气门安装微型电动机,用来驱动节气门开度。一般而言,增减油门就是指通过油门踏板改变发动机节气门开度,从而控制可燃混合气的流量,改变发动机的转速和功率,以适应汽车行驶的需要。

电子油门的主要功能是把驾驶员踩下油门踏板的角度转换成与其成正比的电压信号,同时把油门踏板的各种特殊位置制成接触开关,把怠速、高负荷、加减速等发动机工况变成电脉冲信号输送给电控发动机的控制器 ECU,以达到供油、喷油与变速等的优化自动控制。


博世智能电子油门踏板

电子油门控制系统主要由油门踏板、踏板位移传感器、ECU(电控单元)、数据总线、伺服电动机和节气门执行机构组成。位移传感器安装在油门踏板内部,随时监测油门踏板的位置。当监测到油门踏板高度位置有变化,会瞬间将此信息送往ECU,ECU对该信息和其它系统传来的数据信息进行运算处理,计算出一个控制信号,通过线路送到伺服电动机继电器,伺服电动机驱动节气门执行机构,数据总线则是负责系统ECU与其它ECU之间的通讯。在自适应巡航中,则由ESP(ESC)中的ECU来控制电机,进而控制进气门开合幅度,最终控制车速。

与自动驾驶控制关系

接收到规划决策输出的有油门速度,做到自动化的定速巡航。

转向(Steering Angle)

电子助力转向(EPS)

了解车、开过车的朋友,多少知道点电子助力转向(EPS),如果没有这个助力,为上吨重的车辆转向过程是很费力的,EPS根据驾驶员的转角来增加转向力,达到转向目的。

线控转向

线控转向技术最先来自航空技术,如今慢慢在汽车行业出现。飞机使用线控技术是因为需要用很快的控制速度,更能灵敏地控制飞机很强的机动性、很高的速度。线控转向取消了方向盘与车轮之间的机械连接,用传感器获得方向盘的转角数据,然后ECU(电子计算单元)将其折算为具体的驱动力数据,用电机推动转向机转动车轮。


日产旗下的英菲尼迪Q50是首批使用线控转向的量产车辆

线控转向的缺点是需要模拟一个方向盘的力回馈,因为方向盘没有和机械部分连接,驾驶者感觉不到路面传导来的阻力,会失去路感,不过在无人车上,就无需考虑这个了。在Q50L上线控转向还保留机械装置,保证即使电子系统全部失效,依然可以正常转向。

Question:控制命令中转向角度还是力度?

线控助力将解答我的一个问题,就是控制命令中转向角度还是力度的问题,其实这个问题的答案就在于转向所用的技术,如果是线控转向,必然是角度。

率先将线控转向技术运用与量产线的Q50,价格自然不便宜。那么一般的电子转向助力对转向的支持如何?是否意味着跟自动驾驶说拜拜?

制动



传统液压制动原理

传统制动系统主要由真空助力器、主缸、储液壶、轮缸、制动鼓或制动碟构成。当驾驶者踩下制动踏板时,机构会通过液压把驾驶人脚上的力量传递给车轮。但实际上要想让车停下来必须要一个很大的力量,这要比人腿的力量大很多。所以制动系统必须能够放大腿部的力量,要做到这一点有两个办法:

  • 杠杆作用
  • 利用帕斯卡定律,用液力放大
    制动系统把力量传递给车轮,给车轮一个摩擦力,然后车轮也相应的给地面一个摩擦力。

人们对制动性能要求的不断提高,传统的液压或者空气制动系统在加人了大量的电子控制系统如ABS、ESP等后,结构和管路布置越发复杂,液压(空气)回路泄露的隐患也加大,同时装配和维修的难度也随之提高。

制动控制是自动驾驶执行系统的重要部分,目前ADAS与制动系统高度关联的功能模块包括ESP(车身稳定系统)/AP(自动泊车)/ACC(自适应巡航)/AEB(自动紧急制动)等。


线控制动系统与各个模块的高度关联

线控液压制动器(EHB)

EHB(Electro-Hydraulic Brake)即线控液压制动器,是在传统的液压制动器基础上发展而来的。EHB用一个综合的制动模块来取代传统制动器中的压力调节器和ABS模块等,这个综合制动模块就包含了电机、泵、蓄电池等等部件,它可以产生并储存制动压力,并可分别对4个轮胎的制动力矩进行单独调节。比传统的液压制动器,EHB有了显著的进步,其结构紧凑、改善了制动效能、控制方便可靠、制动噪声显著减小、不需要真空装置、有效减轻了制动踏板的打脚、提供了更好的踏板感觉。由于模块化程度的提高,在车辆设计过程中又提高了设计的灵活性、减少了制动系统的零部件数量、节省了车内制动系统的布置、空间。可见相比传统的液压制动器,EHB有了很大的改善。但是EHB还是有其局限性,那就是整个系统仍然需要液压部件,其基本的还是离不开制动液。

电子机械制动(EMB)

如果把EHB称为“湿”式brake-by-wire制动系统的话,那么EMB就是“干”式brake-by-wire制动系统。

EMB全称Electro Mechanical Brake,和EHB的最大区别就在于它不再需要制动液和液压部件,制动力矩完全是通过安装在4个轮胎上的由电机驱动的执行机构产生。因此相应的取消了制动主缸液压管路等等,可以大大简化制动系统的结构、便于布置、装配和维修,更为显著的是随着制动液的取消,对于环境的污染大大降低了。


西门子 VDO的EMB示意图

因此结构相对简单、功能集成可靠的电子机械制动系统越来越受到青睐,可以预见EMB将最终取代传统的液压(空气)制动器,成为未来车辆的发展方向。

总结一下制动组件的发展里程:

Question:说了这么多,线控制动与自动驾驶的关联如何,线控制动需要什么样的参数才能达到制动效果?通过下面Apollo与线控各组件的交互过程,可以解答这个问题。

Apollo与线控控制组件的交互

Apollo自动驾驶中,数据主要来源于传感器的原始数据,包括图像、激光雷达、雷达等。end-to-end输入以图像为主。输出是车辆的控制决策指令,如方向盘角度、加速、刹车。

策略规划(planning)

  • 输入:定位、感知、预测
  • 输出:无碰撞、舒适的轨道

控制模块(control)

  • 输入:
    • 车道规划
    • 车辆状态
    • HMI自动状态切换
  • 输出:给canbus模块执行的控制命令(转向,气节门,制动)

Canbus模块

  • 输入:
    • 控制命令
  • 输出:底盘接受,执行,并给出状态反馈
    • 底盘状态
    • 底盘详细状态


底盘组件接受控制消息(进入自动驾驶状态),通过Can执行Update:

  • 齿轮(Gear)控制
  • 气节门(Throttle)控制,调整速度
  • 制动(Brake)控制
  • 根据预测给出的转向目标、转向速率做响应的调整
  • 如果有信号灯,设置喇叭(horn)、信号灯(turningSignal)、灯光光束(Beam)等

以Lincoln为参考车辆实现的自动驾驶状态的控制序列:

ErrorCode LincolnController::EnableAutoMode() {
  if (driving_mode() == Chassis::COMPLETE_AUTO_DRIVE) {
    AINFO << "already in COMPLETE_AUTO_DRIVE mode";
    return ErrorCode::OK;
  }
  brake_60_->set_enable();// 制动可用
  throttle_62_->set_enable(); // 气节门可用
  steering_64_->set_enable(); // 转向请求可用

  can_sender_->Update();
  const int32_t flag =
      CHECK_RESPONSE_STEER_UNIT_FLAG | CHECK_RESPONSE_SPEED_UNIT_FLAG;
  if (!CheckResponse(flag, true)) {
    AERROR << "Failed to switch to COMPLETE_AUTO_DRIVE mode.";
    Emergency();
    return ErrorCode::CANBUS_ERROR;
  } else {
    set_driving_mode(Chassis::COMPLETE_AUTO_DRIVE);
    AINFO << "Switch to COMPLETE_AUTO_DRIVE mode ok.";
    return ErrorCode::OK;
  }
}


在与底盘各组件交互的过程中,组件控制需要基于ProtocolData实现与各组件的控制协议,确保控制命令在个性化平台上,兼容处理无误。



Apollo实现的众多Lincoln数据协议

总结

  • 梳理了车辆自动驾驶的基础,从三方面介绍了线控硬件组件:速度(Speed)、转向(Steering Angle)和刹车制动(Brake);
  • 自动驾驶从预测的指令,到canbus到车辆控制器(vehicle controller)的传递执行过程;
  • 参考车辆需要基于ProtocolData基类实现自己的数据协议;

引用参考


原文发表在fzb.me博客。

编辑于 2020-07-03 13:38