大家好,我是李慢慢。
你听说过“鬼探头”吗?
你遭遇过“鬼探头”吗?
这里说的“鬼探头”可不是恐怖电影情节,而是开车遇到的突然冲出来的行人场景,因为同样迅疾,同样惊悚,故而被称为“鬼探头”场景,案例如下:

这种“鬼探头”场景,行人或者电瓶车通常是被遮挡的,对于遭遇“鬼探头”场景的司机来说,行人或者电瓶车的出现是非常突然的,因而难以快速反应过来,非常容易发生碰撞事故。而鉴于“行人都是大爷”的律法,司机一般都是主责,遇到这种场景,只能自认倒霉。
在自动驾驶盛行的今天,自动驾驶技术能帮车主避免“鬼探头”场景吗?
从理论上来讲,对于在可能出现鬼探头的地方,如果自动驾驶能主动提前减速,没有“鬼探头”自然最好,真遇到“鬼探头”,又能更迅速地制动或者转向避让,那么是可以有效帮助车主避免厄运的。
所以开发针对“鬼探头”场景的智驾功能,对于汽车来说自然是个很好的卖点。那么在开发过程中,如何快速而高效且安全地测试这个功能呢?
本文尝试借助CARLA这款模拟器,来搭建这类“鬼探头”场景,以帮助开发进行测试。
CARLA提供了3中搭建场景的方式:
通过Python API直接在客户端程序中DIY各种场景;
通过ScenarioRunner工具运行基于NewScenario(BasicScenario)这个Python类创建的场景;
通过ScenarioRunner工具运行基于OpenSCENARIO标准的场景;
下面简单通过方式1来尝试构建场景。
代码逻辑其实很简单:
第一步、加载地图;
第二步、在指定位置创建主车,并给一个初始速度;
第三步、在指定位置创建小孩儿,并给一个初速度;
第四步,运行仿真一段时间后关闭;
这里小孩儿的创建和速度的指定主要用了如下的API:
# 指定地点生成行人目标物obj_bp = blueprint_library.filter("walker.pedestrian.0048")[0]obj_position_loc = carla.Location(x=24, y=35.0, z=1.0)obj_position_rot = carla.Rotation(pitch=0, yaw=-90, roll=0)obj_spawn_point = carla.Transform(obj_position_loc, obj_position_rot)# 在仿真世界中创建目标行人-小孩儿obj_ped = my_world.try_spawn_actor(obj_bp, obj_spawn_point)if obj_ped:my_actors_list.append(obj_ped)print("obj_ped created:", obj_ped)# 控制行人的速度及方向obj_direction = carla.Vector3D(0, -1, 0)obj_control = carla.WalkerControl(direction=obj_direction,speed=10/3.6,jump=False)obj_ped.apply_control(obj_control)else:print("obj_ped not created.")
小孩儿横穿的仿真效果如下:

如果给小孩儿的横穿加一个遮挡物,则瞬间就能变成一个“鬼探头场景”,只需要在路边指定位置生成一辆静止的车辆即可。

当然测试的场景难度还能升级一些,变成晚上。

如果这个时候再下点雨,起点雾,就变成地狱级难度了。

此时,从驾驶位看去,即使是人类司机,对于“小孩儿+遮挡+夜晚+下雨+起雾”这类“鬼探头”场景,也是非常模糊。

场景到这里其实已经很够意思了,接下来只需要在运行场景时,把传感器数据和其它车辆数据按照指定的通信方式,喂给智驾算法,并把智驾算法的控制指令接回来给仿真中的主车,即可完成最简单的仿真测试。

后记:“鬼探头”场景是智驾安全路上难以逾越的badcase,极端天气下,传感器性能受限,留给智驾算法的反应时间也特别短。但不管是人类老司机还是智驾算法,在此类场景下,都应该主动降低车速,以此赢得更多的反应时间。
本文完