首页/文章/ 详情

玩转CARLA-鬼探头场景如何进行仿真测试

10月前浏览166

大家好,我是李慢慢。

你听说过“鬼探头”吗?

你遭遇过“鬼探头”吗?

1、鬼探头概述

这里说的“鬼探头”可不是恐怖电影情节,而是开车遇到的突然冲出来的行人场景,因为同样迅疾,同样惊悚,故而被称为“鬼探头”场景,案例如下:

这种“鬼探头”场景,行人或者电瓶车通常是被遮挡的,对于遭遇“鬼探头”场景的司机来说,行人或者电瓶车的出现是非常突然的,因而难以快速反应过来,非常容易发生碰撞事故。而鉴于“行人都是大爷”的律法,司机一般都是主责,遇到这种场景,只能自认倒霉。

在自动驾驶盛行的今天,自动驾驶技术能帮车主避免“鬼探头”场景吗?

从理论上来讲,对于在可能出现鬼探头的地方,如果自动驾驶能主动提前减速,没有“鬼探头”自然最好,真遇到“鬼探头”,又能更迅速地制动或者转向避让,那么是可以有效帮助车主避免厄运的。

所以开发针对“鬼探头”场景的智驾功能,对于汽车来说自然是个很好的卖点。那么在开发过程中,如何快速而高效且安全地测试这个功能呢?

2、鬼探头场景搭建

本文尝试借助CARLA这款模拟器,来搭建这类“鬼探头”场景,以帮助开发进行测试。

CARLA提供了3中搭建场景的方式:

  1. 通过Python API直接在客户端程序中DIY各种场景;

  2. 通过ScenarioRunner工具运行基于NewScenario(BasicScenario)这个Python类创建的场景;

  3. 通过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.")


小孩儿横穿的仿真效果如下:


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


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


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


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

3、智驾算法测试

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


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

本文完



来源:车路漫漫
ACT碰撞汽车python通信UM理论自动驾驶控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-12-10
最近编辑:10月前
李慢慢
硕士 自动驾驶仿真工程师一枚
获赞 14粉丝 93文章 322课程 0
点赞
收藏
作者推荐

这个有点酷|多线程运行仿真测试-esmini

作者:李慢慢编辑:李慢慢出品:车路慢慢·微信公众号头图:esmini运行截图大家好,我是李慢慢。继续研究用esmini做自动驾驶仿真SIL测试。本文的研究方向是大规模测试,亦或者多并发测试,也就是同时跑很多个测试场景,以达到加速仿真测试的效果。研究设备:虚拟机-Ubuntu20.04研究软件:esmini-2.31.3编程语言:python-3.8基础概念:进程池关于进程池,可以看看我此前的文章。自动驾驶仿真测试的多并发测试-进程池开搞前,我的设想是:在电脑上打开多个窗口(可自定义,如2x3、3x3等),每个窗口运行一个仿真场景。仿真场景都是泛化出来的,比如一个车撞车的追尾场景(CCRs),简单泛化下主车的速度,生成一系列场景。场景运行过程中时刻接入AEB的规控算法,以测试算法的效果。每个窗口运行完成后,自动关闭,然后再度打开以运行下一个场景。直到所有场景测试完成。编程思路:创建一个进程池,进程池中可以运行多个进程,每个进程都是一个运行esmini的指令(这次就只启动esmini,下次再将算法也集成进来),但是每个进程都需要有些参数支持传递,比如运行哪个场景,比如窗口的位置。为了实现窗口的位置的记忆功能,我还用到了multiprocessing的Value类和Manager类。这两个类可以在进程之间通过共享内存进行信号交互。代码和测试场景工程如下:https://gitee.com/li_man_man/esmini_multiprocessing_simulation/tree/v1.0.0/运行后的截图如下:窗口:2x2窗口:2x3窗口:3x3窗口:3x4窗口:3x5最后,如果不想打开窗口(适用于服务器上进行大规模测试),直接在后台运行esmini,可以用以“--headless”模式启动esmini。如:../../bin/esmini--window6060800400--osc./CCRm.xosc--headless本文完。后言:整个openSIL的项目,从立项到现在将近大半年了。已经有了很多研究成果了哦,感兴趣的小伙伴可以后台搜索了看看。来源:车路慢慢

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈