来自原创 小明师兄 智驾社 侵删
?本节下面的例子将演示如何实现***D***S功能之一的自动紧急制动(***EB)系统的TestRun。对于对***D***S应用感兴趣的用户来说,这个例子可以展示CarMaker在***D***S和智能驾驶开发中应用的优势。
4.1使用场景编辑器构建道路网络
在本章中,将使用场景编辑器建立一个T型道路路口。
通过 CarMaker 主 GUI 打开场景编辑器。左键点击参数 > Scenario / Road 或使用快捷键 crtl + r。
添加路段。在左侧的 "道路 "选项卡中,左键单击道路选项卡中的第一个图标 "道路段 "一次,然后在场景编辑器的绘图区域右键单击,打开一个小的下拉菜单。在路段上左键单击一次,打开另一个下拉菜单,里面有路段的所有选项。
左键选择 "路口":
图4.1:选择道路类型交叉路口
实施结点。使用光标,在绘图区左键单击一次,设置中间的交点。
注意,你在场景编辑器中定义的第一个点也会初始化x,y,z-坐标系,并设置为(0,0,0,0)值。
将光标向左移动并按住shift(shift使光标锁定在标示值上)再次点击,创建第一个交接臂,角度为180,长度为10m。
现在,将光标向右移动,按住shift,点击执行第二个连接臂,长度为10m,角度为0。
最后,将光标移动到底部,按住shift键。当光标在正确的位置定义最后一个结点臂的长度为10m,角度为270,双击,完成与最后一个结点臂的构建。
图 4.2 实现道路交叉口结点
在第一个交接臂中添加一条道路。单击并按住左侧 "道路 "选项卡中的路段图标。在下拉菜单中,选择道路段类型 "直路"。
将光标移动到第一个交接臂的末端(交接臂0),并在中间悬停,直到出现一个橙色的圆圈,光标锁定在参考线上。在这里左键单击一次开始绘制直线段,将光标向左移动,再单击一次即可实现直线。在右侧的选项卡中,你可以编辑这个直线段的长度。
将此直线段的长度设置为500米。
图 4.3:在连接臂0上增加一个直线
依次类推,增加另外两条连接臂。都在右侧和BOT-TOM之间,增加一条直段,长度分别为500米(右侧)和300米(底部)。
现在的道路网应该像下图中的样子。
图 4.4: 完成的T型交叉路口
为了让车辆知道自己在链接上按什么顺序行驶,必须确定一条路线。
点击场景编辑器左下角的路线图标。
Route_0:点击链接1右侧车道上的预定义路径(如下图所示),选择此路径。当出现一条断裂的橙色线条时,再次点击确认这是正确的路径,在此基础上开始定义路径。现在,单击直接穿过路口的路径,然后单击 Link 2 上的直行路径,通过这两条路径扩展路线。要完成路线的实现,请双击链接上的某处。
(欢迎申请加入智能驾驶交流学习群,加小编微信号zhijiashexiaoming)
智驾社聚焦智能驾驶、***D***S、车联网技术等汽车行业新技术的发展,专注于***D***S、智能驾驶开发,仿真与测试。1427篇原创内容
公众号
路径_1:首先,选择Link 3右侧车道上的路径,如前文所述,确认后,选择在路口左转的路径,延长Route。最后添加Link 1左侧车道上的路径段。双击完成。现在Route从下面来,在路口左转。
图 4.5:完成车辆行驶路线
在场景编辑器中,用户可以为他的路网工作生成地形。地形的高度剖面是由CarMaker随机生成的,用户不能对其进行任意化,只能定义一个最小和最大的高度值。此外,用户可以在生成后在右侧的选项卡中选择一个几何图形文件(.obj文件)。如果在该字段中没有选择文件,则使用CarMaker的默认图像。地形是使用地形生成器添加的。
生成地形。点击场景编辑器左侧场景选项卡中标有 "地形生成 "的图标,然后点击右侧的 "生成 "选项卡中的 "生成"。
图 4.6:场景编辑器的地形生成器
4.2 定义车辆操纵
配置完路况后,可以选择一辆测试车。
选择一辆车。在 Carmaker 主图形用户界面中,在标有 "选择 "的字段中左键单击 "选择" 汽车。
在打开的浏览中,导航到产品实例,然后选择 DemoCar。
现在需要定义一个操纵,告诉司机如何操纵车辆行驶。
通过CarMaker主图形界面>参数>操纵,或使用快捷键crtl + m打开操纵对话框。
在操纵列表中添加一个新的操纵步骤(目前仍为空),并将持续时间(Duration)改为60s。可以在右侧编辑标有 "持续时间"(Duration)的字段中的条目来改变操纵步骤的持续时间。
在标有操纵动态的字段中,确保IPGDriver是活动选项,并将速度改为70km/h。
图 4.7:添加新的操纵步骤
此外,通过点击全局设置/准备,用户可以定义各种启动值和附加命令。
点击 "全局设置/准备",将起始值速度设置为70公里/小时,并将仿真开始时的档位设置为第5档。
图 4.8: 操纵全局设置/准备工作
现在确定了道路、车辆和操纵,就可以开始TestRun了。
开始仿真。选择Route_0作为活动路线(车辆行驶的路线),在顶部菜单中点击场景设置,然后点击车辆启动位置>活动路线。在CarMaker主图形用户界面中,按绿色的 "开始 "按钮。
打开IPGMovie,观察仿真过程。
4.3 增加交通流
现在将在仿真中加入一个交通对象,展示CarMaker中的对象检测是如何工作的。这对于***EB系统的激活是必要的。有非常多的可用交通对象和可能的功能和操作方式,在后续的章节中会有更多的详细介绍。下面的例子将只演示一种整合交通对象的可能性。
打开 "交通流 "对话框。CarMaker 主 GUI > 参数 > 交通流,然后点击新建以插入一个新的交通流对象。默认情况下,这个对象被称为T00。
将起始位置(s和t坐标)设置为285m,路线1(左转的路线)上的起始位置(s和t坐标)为0m。
图 4.9:交通对象配置(1)
在交通对象中增加两个驾驶操纵的动作。
1. 持续时间->时间300s,Long.Motion -> Velocity 0 km/h, 结束条件 Car.Road.s2nextJunc < 60 (见上图中机动步骤1的定义)。
2. 持续时间->时间5s且Long.Motion-> ***cceleration 3 m/s^2 (见下图中的操纵步骤2定义)。
现在,在这个Traffic对象的全局设置/开始条件中,在末端设置***ction为冻结速度。
图 4.10:交通对象配置(2)
驾驶员将默认考虑交通对象。对于***EB测试,IPGDriver不应该考虑任何交通对象。
关闭交通流考虑:取消选择 "主界面">"参数">"驾驶员">"交通接口 "中的 "考虑交通"复选框。
图 4.11: 驾驶员参数考虑交通量
启动TestRun,观察IPGMovie中的动画。
4.4 碰撞检测
在这一步中,仿真中加入了自动碰撞检测系统。为此,需要对车辆和操纵进行修改。
在MainGUI > Parameters > Car > Sensors > Collision中激活 "General "选项。
默认情况下,碰撞检测使用车辆外皮,定义在MainGUI > 参数 > 汽车 > 其它选项中。如果需要更详细的外皮,可以选择2D Contour。
此外,碰撞检测也需要在Maneuver中定义。
在 "操纵 "对话框中,点击已定义的 "操纵"步骤0。在右侧,在标有 "结束条件 "的字段中,键入: Sensor.Collision.Vhcl.Fr1.Count>=1
对于发生碰撞的通知,可以发送一个日志消息。如果检测计数器大于或等于1,则机动控制将继续产生错误日志。为此,需要在Minimaneuver命令对话框中添加以下实时表达式。
Eval (Sensor.Collision.Vhcl.Fr1.Count>0) ? LogErr ("检测到碰撞!")
函数 LogErr 将停止仿真并将 "检测到碰撞!"打印到会话日志中。
图 4.12:实现碰撞检测
4.5 设置***EB系统
目前正在使用的是CarMaker DemoCar。在不需要扩展功能的情况下,通常会选择这种车辆作为简单的例子。对于特定的测试场景,可以使用不同的车辆,或者需要调整DemoCar。
对于***EB试验,需要一个***EB系统。由于DemoCar没有配备这样的系统,下面的练习将如何在车辆上添加传感器和控制器,以仿真***EB系统。
为车辆的纵向控制定义一个传感器。CarMaker主GUI >参数> 汽车 > 传感器 > 对象。
单击 "添加 "以添加一个对象-传感器,并将其命名为 "毫米波雷达"。编辑其余的传感器参数,使其与下图中的参数一致。
图 4.13:命名为 "毫米波雷达 "的对象传感器的定义
实现一个控制器。CarMaker主GUI > 参数> 汽车 > 车辆控制。
对于控制模型0,选择Generic Longitudinal Control,并将Referenced ObjectSensor设置为Radar(之前创建的对象传感器)。
根据下图填写其他参数。
图 4.14:用于车辆纵向控制的控制器
最后一步是通过另一个选项扩展机动结束条件。其目的是在检测到碰撞或汽车刹车静止时停止仿真。
结束条件的扩展是命令。
Sensor.Collision.Vhcl.Fr1.Count>=1 ||Car.v < 0.01
启动仿真,观察路口***EB系统的功能。
4.6 使用NamedValues
在这一步中,引入了NamedValues。这些参数允许用户使用不同的参数集来执行TestRun的变化。
第一个NamedValues将在IPGDriver操纵控件中设置。NamedValues可以用于参数变化,但一开始需要给它们一个默认值。在这种情况下,IPG Driver Target Velocity将由NamedValue来定义。
打开操纵对话框,点击操纵步骤0,在纵向动力学字段中,将速度改为$Speed=70。
现在,IPGDriver的目标速度的数量已被命名为 "Speed",并预设为70 km/h。现在,交通对象的结束条件也将被调整。
在Traffic GUI中,将交通对象的第一个操纵的结束条件改为
Car.Road.s2nextJunc<$JunctionDistance=60
$JunctionDistance是一个NamedValue,默认值为60。$JunctionDis- tance的值决定了测试车到交叉口的距离,在这个路口,交通对象开始行驶到交叉口。
图 4.15:使用NamedValues修改TestRun (1)
图 4.16:使用NamedValues修改TestRun (2)
另外,将物体传感器的水平孔径设置为另一个NamedVal- ue $RadarHoriz=10,如下图所示。这将允许用户改变检测区域。
在车辆数据集编辑器中通过 "文件">"保存 "保存,然后在CarMaker主窗口中通过 "文件">"保存 "保存TestRun。
图 4.18:使用NamedValues修改TestRun (3)
4.7 使用TestManager执行多个TestRun变量
在这最后一步中,用户将使用上一章中定义的NamedValues创建多个变体的驾驶员试验。
打开测试管理器。CarMaker主界面 > 仿真> 测试管理器,通过左键单击 "添加">"TestRun",添加一个TestRun到TestSeries。通过点击标有TestRun的文件右侧的文件夹图标,选择你已经建立的TestRun。这将打开一个浏览器,你可以在其中导航到相应的TestRun文件。
下图显示了如何使用类型为变体添加参数(步骤1)。NamedValue (NValue),以及如何通过点击***dd > Variation来创建变量本身(步骤2)。
图 4.19: TestManager的变体 (1)
此外,还添加了一个成功完成TestRun的条件。为此,选择TestRun,然后转到***dd > Criteria。在 "评估 "选项卡上,通过下面的条件定义了成功完成的好。
get Sensor.Collision.Vhcl.Fr1.Count] < 1
在这条语句中,函数get被用来访问一个CarMaker quantitiy。
图 4.20: TestManager的变体 (2)
在创建的变化中,之前在TestRun中定义的NamedValues可以被修改。在这里,测试车辆的速度、交通物体进入交叉路口的触发条件和传感器的水平孔径都会被改变。
欢迎关注、点赞与转发。
如若转载,请注明出处:https://www.haowenren.com/4697.html