多物理场仿真 Chrono(2.8) 驱动器子系统

为方便查阅,此文是原网站文档翻译,如有侵权,请与本人联系。
官网



驾驶员输入(转向、油门和制动)由驾驶员子系统提供,Chrono::车辆中有可用选项,包括交互式、数据驱动和闭环(例如,基于PID控制器的路径跟踪)。
驱动程序系统的基类ChDriver对驱动程序系统模板提出了最低要求,特别是返回节气门输入(在 [ 0 , 1 ] [0,1] [0,1]范围内归一化)的能力,转向输入(在 [ − 1 , + 1 ] [-1,+1] [1+1]范围内标准化,负值表示向左转向)和制动输入(在 [ 0 , 1 ] [0,1] [0,1]范围内规范化)。此外,驾驶员系统可以通过其Synchronize方法从任何其他系统接收信息(例如,车辆状态),并且可以具有内部动态(在其Advance方法中实现)。驾驶员系统的特定模板可以扩展所生成的一组车辆输入,例如包括手动变速器的当前选定档位、启用/禁用履带车辆上的交叉驾驶能力等。
Chrono::Vehicle包括用于驱动程序系统的几个模板。对于软实时运行的交互式模拟,它为驾驶员系统提供了一个模板,该系统根据用户控制(键盘和鼠标或游戏控制器)生成车辆输入。
为了设计实验模拟,它提供了一个驾驶员系统模板,该模板基于通过文本数据文件提供的输入,车辆输入通过线性插值获得。这样的数据文件也可以由交互式运行期间收集的数据自动生成。
最后,Chrono::Vehicle包括几个闭环驱动系统模型,基于对PID控制器的底层支持。这些包括速度控制器(同时调节节气门和制动输入以保持恒定的车辆速度)和路径跟随器控制器。后者调整转向输入,使车辆遵循指定为贝塞尔曲线的用户定义路径。

交互式驱动程序

交互式驾驶员ChIrrGuiDriver可以通过用户输入控制(转向/加速/制动)模拟车辆。由于它依赖Irrlicht来处理键盘和控制器事件,因此它仅适用于基于Irrlicht的程序。
该驱动机子系统模型的其他功能包括:

  • 实验控制器支持
  • 将驾驶员输入锁定/解锁至当前值的能力(通过按键J控制)
  • 记录和回放用户输入的能力(使用嵌入式基于数据的驱动程序;见下文)

键盘驱动程序

  • 按键A增加左转向方向盘角度
  • 按键D增加右转向方向盘角度
  • 按键W加速
  • 按键S减速
    节气门和制动控制是耦合的,在增加节气门输入之前,加速度首先将制动驱动到零(减速时反之亦然)。

控制器驱动程序

现代模拟器通常具有用于汽车中所有不同控制元件的多个(USB)设备。它们配有踏板、车轮、H型换档器、顺序换档器、手刹和按钮盒(汽车系统中有大量可更换的按钮)。Chrono通过能够将控制器轴和按钮分配给连接的多个设备来支持这一点。也可以校准轴,设置该轴的最小值和最大值(原始)以及预期(缩放)输出值。
映射和校准是使用data/vehicles文件夹中的“controller.json”文件完成的,该文件允许您将控件分配给这些“控制器”的轴和按钮。我们提供了一些此类文件的示例,但通常您需要根据自己的设置自定义此文件:

  • ontroller_XboxOneForWindows.json是一个相当标准的控制器设置,对于大多数用户来说应该很容易适应,它映射了所有轴,包括顺序换档器设置以及在自动和手动变速箱之间切换的方式。
  • controller_WheelPedalsAndShifters.json是一个更复杂的多控制器设置示例,具有方向盘、三个踏板以及顺序和H档设置。如果您想使用此示例,可能需要对其进行大量修改,但它显示了如何使用不同的控制器。

控制器文件示例,

{
    "steering": {
        "name": "Steering Wheel", "axis": 0,
        "min": -32768, "max": 32767, "scaled_min": 1, "scaled_max": -1
    },
    "throttle": {
        "name": "Pedal Box", "axis": 2,
        "min": -1, "max": -32767, "scaled_min": 0, "scaled_max": 1
    },
    "brake": {
        "name": "Pedal Box", "axis": 2,
        "min": 0, "max": 32767, "scaled_min": 0, "scaled_max": 1
    },
    "clutch": {
        "name": "Pedal Box", "axis": 4,
        "min": 0, "max": 32767, "scaled_min": 0, "scaled_max": 1
    },
    "gearReverse": { "name": "H-Shifter", "button": 0 },
    "gear1": { "name": "H-Shifter", "button": 1 },
    "gear2": { "name": "H-Shifter", "button": 2 },
    "gear3": { "name": "H-Shifter", "button": 3 },
    "gear4": { "name": "H-Shifter", "button": 4 },
    "gear5": { "name": "H-Shifter", "button": 5 },
    "gear6": { "name": "H-Shifter", "button": 6 },
    "gear7": { "name": "H-Shifter", "button": 7 },
    "gear8": { "name": "H-Shifter", "button": 8 },
    "gear9": { "name": "H-Shifter", "button": 9 },
    "shiftUp": { "name": "Steering Wheel", "button": 4 },
    "shiftDown": { "name": "Steering Wheel", "button": 5 },
    "toggleManualGearbox": { "name": "Button Box", "button": 2 }
}

在文件的顶层,我们有一组控制器功能(转向、油门、shiftUp…),对于其中的每一个,我们都可以指定一个轴或按钮定义以及所有映射细节:

  • 轴:转向、油门、制动器、离合器具有以下属性:
      name是系统上控制器的名称;
      axis是要映射到的轴的编号;
      minmax是该轴的原始最小值和最大值;
       scaled_minscaled_max是该轴的输出最小值和最大值;
  • 按钮:shiftUpshiftDowngearReversegear1gear2···,gear9toggleManualGearbox具有以下属性:
      name是系统上控制器的名称;
      axis是要映射到的轴的编号;
    关于控制变速箱的一句话:
  • 如果您有手动变速箱,则支持顺序换档。您可以使用另一个按钮在自动变速箱和手动变速箱之间切换。
  • 还有H型换档杆支撑。该代码最多支持9个前进档,并支持换档(只要离合器完全按下)。
    还有一种调试模式,每秒打印两次所有连接控制器的轴和按钮的所有值。这在定义文件时很有用,否则可能会被禁用。

当前实施的局限性

  • 所有控制器操作都与IrrLicht相连,这意味着您需要使用它进行可视化。这也意味着我们继承了IrrLicht处理控制器的所有限制。这主要反映在支持的每个控制器的按钮数量上,但也可能存在其他限制

基于数据的(开环)驱动器

一些重要的车辆测试动作基于与时间相关的转向/节流/制动信号。不考虑任何形式的反馈。该驱动程序模型在ChDataDriver中实现。
具有驾驶员输入的ASCII数据文件包含四列,分别表示时间、转向输入( [ − 1 , 1 ] [-1,1] [1,1]中的无量纲量,−1表示向左完全转向)、油门输入( [ 0 , 1 ] [0,1] [0,1]之间的无量纲数,1表示完全油门)和制动( [ 0 , 1 ] [0,1] [0,1]之间的无量纲量,1表示全制动力)
下面列出了一个示例驱动程序数据文件

0.0 0.0 0.0 0.0 0.0
0.5 0.0 0.5 0.0 0.0
3.0 0.0 0.5 0.0 0.0
5.0 0.5 0.4 0.0 0.0
9.0 0.0 0.0 1.0 0.0
在这里插入图片描述
在任何给定时间,当前驾驶员输入(转向、油门和制动)都是通过所提供数据的逐段线性插值获得的。在最后一次输入之后,驾驶员输入保持恒定在其最后值。

闭环驱动程序模型

闭环驱动器模型需要一个控制策略并考虑反馈。反馈会导致不稳定行为,因此必须明智地选择控制器参数。示例参数已广泛使用。用户应该从给定的示例参数集之一开始,只有在必要时才对其进行修改

路径跟随器控制器

为了使车辆沿着给定的路径行驶,有必要测量横向路径偏差,并生成将偏差最小化的方向盘角度。
这个问题的一个众所周知的解决方案是PID控制器(P=比例,I=积分,D=微分)。
取纯P变量,只需要设置P增益。这在许多情况下都有效,但纯P控制器永远无法将横向偏差降至零
残余偏差随着P增益的增加而减小。如果P增益过大,车辆开始在要求的车辆路径周围振荡,可以通过将I增益设置为P增益的大约5%至10%的值来消除残留路径偏差。通过设置D增益,可以在发生路径振荡时施加阻尼。如果使用I增益,模拟机动的时间不应超过约2分钟。如果需要更多时间,控制器状态应每2分钟重置一次,以避免不稳定。
下一张图表(维基百科)显示了Chrono如何实现PID控制器:
在这里插入图片描述

  • r(t) =所需路径信号
  • e(t) =横向路径偏差
  • y(t) =实际路径信号
  • u(t) =转向信号
    此图表(维基百科)显示了增益因素的影响:
    在这里插入图片描述
    人类驾驶员不仅对偏差变化做出反应,而且能够预测。在Chrono中,通过取一个参考点来测量车身前部的偏差来模拟这种能力,参考点与车辆参考系统的距离称为向前看距离,是一个重要的控制器输入参数。
    所需的路径指定为Bezier曲线(请参见ChBezier曲线)。误差定义为“哨点”(位于车辆前进方向前方距离处的点)和“目标点”(哨点投影到所需路径上)之间的偏差。
  • r(t) =所需路径信号
  • e(t) =横向路径偏差
  • y(t) =实际路径信号
  • u(t) =节气门/制动器信号
    ChPathFollowerDriver类结合PID速度控制器实现PID横向控制器。它在像双车道变换这样的极端操作中效果很好。
    标准道路驾驶操作的一个有趣的替代方案是ChPathFollowerDriverSR。它有一个PID速度控制器,但采用了考虑人和车辆特性的横向控制策略。预期使用前瞻时间而不是前瞻距离,这意味着有效的前瞻距离随速度而变化。

最佳速度控制器

恒速控制器适用于许多标准驾驶操作。对于在长而弯曲的道路上行驶,车辆在整个过程中的速度是关注的。对于这种情况,已经开发了ChHumanDriver类。横向控制器和速度控制器都使用人的行为、车辆特性、预期以及驾驶员的视野。横向控制器与ChPathFollowerDriverSR中实现的控制器相同。


欢迎交流,一起学习,Q群:902809729
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值