首页/文章/ 详情

自动驾驶仿真|如何基于esmini做规控SIL测试?

10月前浏览834

大家好,我是李慢慢。

此前曾发表过一篇文章:

介绍一款开源的自动驾驶仿真场景播放器:esmini

文章中描述了如何下载、安装、及使用esmini工具,用它进行openDRIVE地图查看,和openSCENARIO场景播放。当时已然对这个工具赞不绝口了,因为它开源、安装简单、秒打开、支持三维旋转、缩放、支持录制和回放等功能。

然而就在前不久的茶话会的交流中,得到高人点拨,才知道esmini的强大远不止如此,它还可以用来做算法测试,尤其是规控算法的逻辑验证。

鉴于此,自己私下做了些探索。
正文如下:
1、SIL规控测试原理
既然esmini已经可以播放openSCENARIO场景了,那么距离SIL测试还有两个问题要解决。
1、如何把外部(规控算法)的控制信号接进去?
2、如何把场景中的信号拿出来?
逻辑图如下:
2、把驾驶控制信号接进去
先来解决第一个问题,如何将外部的算法控制指令,输入仿真场景内,用来控制主车的行为。这里我们借用官方的案例。
在这个名叫“testUDPDriver.py”的脚本起始部分就讲述了如何使用它。打开两个终端,第一个用esmini打开一个场景,第二个是运行本脚本。
终端1:
      
    ./bin/esmini --window 60 60 800 400 --osc ./scripts/udp_driver/two_cars_in_open_space.xosc  
    注意1:在esmini的安装目录下运行;
    注意2:在windows中运行的话,需要把“/”改为“\”;
    --osi是指定要运行的openSCENARIO场景文件;
    终端2:
      python ./scripts/udp_driver/testUDPDriver.py --id 0 --id 1
      这个脚本将打开一个可以操作的界面,通过拖动滑块,可以操控主车0或者目标车1的位姿、油门、刹车、转向等行为。
      3、把场景信号拿出来
      再来解决第二个问题,从场景里拿到信号。这里我们依然借用官方的案例。
      这个名叫“testUDPDriver-print-osi-info.py”的python脚本,打开它其实就可以在开头看到它的使用方法,简单解释下,就是打开两个终端,其中一个运行一个OpenSCENARIO的场景,另一个运行当前代码。效果就是打印出来场景里的一些信息。
      终端1:
        ./bin/esmini --window 60 60 800 400 --osc ./scripts/udp_driver/one_car_on_road.xosc --osi_receiver_ip 127.0.0.1
        --osi_receiver_ip是指定OSI仿真接口UDP数据包的发送地址;后续可以写一个UDP接收程序,丛这个端口拿到仿真中的数据。
        终端2:
          python ./scripts/udp_driver/testUDPDriver-print-osi-info.py
          注意:protobuf版本:3.19.0;
          注:上述的输出内容,都是通过OSI接口(Open Simulation Interface)来获得的,想知道通过这个接口能获得哪些信号,使用者还需要详细去学习一个这个行业标准哦。esmini提供的OSI的proto-pb库如下:
          附上OSI标准github链接:
          https://github.com/OpenSimulationInterface/open-simulation-interface
          4、规控测试的闭环实现
          接下来,将上述过程串起来,形成闭环,为此我简单做了个的demo。

          为了方便演示,我这边计划用Python写一个AEB的算法脚本,该脚本通过udp从场景里拿到目标车的位置,并计算主车撞击目标车的时间ttc,当该时间小于2s时,输出制动指令给主车。
          我的预期效果是:如果我不加入AEB控制算法,将发生车辆追尾;如果加入AEB控制算法,主车将制动。
          5、后期课题
          ok,既然闭环走通了,就可以上批量测试了。
          相比于简单的demo,SIL批量测试可能又会出现新的需求需要解决。
          我能想到的比如:
          需求1、esmini支持多少种目标类型,可以私人定制化扩展吗?
          需求2、大量case测试过程中如何隐藏窗口,结果分析时又如何回放单个case数据?
          需求3、如何高并发大规模测试?
          需求4、如何配置传感器或开发传感器模型?
          需求5:如何连接车辆动力学模型?
          需求6:如何渲染更逼真的视景?
          需求7、openSCENARIO中的DefaultDriver和UDPDriver之间的如何实现无缝切换?
          鉴于文章不能写的又臭又长,上述问题还是留待后续更新好了。欢迎有经验的小伙伴前来讨论,共同进步。
          本文完。瑞斯拜。
          来源:车路慢慢
          python自动驾驶控制渲染
          著作权归作者所有,欢迎分享,未经许可,不得转载
          首次发布时间:2023-06-22
          最近编辑:10月前
          李慢慢
          硕士 自动驾驶仿真工程师一枚
          获赞 10粉丝 57文章 122课程 0
          点赞
          收藏
          未登录
          还没有评论

          课程
          培训
          服务
          行家

          VIP会员 学习 福利任务 兑换礼品
          下载APP
          联系我们
          帮助与反馈