大家好,我是李慢慢。
上一篇关于esmini的文章《自动驾驶仿真|如何基于esmini做规控SIL测试?》中,描述了仿真中的闭环数据,即仿真中,esmini怎么与外部进行通信。文末也留了些探索项,其中一个就是传感器怎么使用。
为什么要研究传感器的使用?
原文中,我们拿到场景中的目标信息,用的是OSI接口直接去拿场景中的各种信号。但我总觉得这种方式有些粗暴,实车驾驶中难道不应该是靠传感器去获得外界的信号嘛。于是又从官方文档中去找传感器的使用方法(更多的还要感激孙工的点拨),然后就找到了这么一段代码:
大致理解了一下代码,就是利用了esmini的lib库里的一些接口,去创建传感器(貌似是只支持‘理想传感器’),然后把传感器探测到的目标数据打印了出来。这段代码也打开了我的新思路,就是它编译后,运行它直接就能:加载openSCENARIO的场景-->创建传感器模型-->运行esmini进行仿真-->获得传感器探测到的数据-->关闭esmini仿真。
还是一贯的轻量级作风,瑞斯拜。
想要让这段代码跑起来,还不能用传统的编译方式(g++/gcc),倒腾了一阵子,最后参照官方的某个build教程才成功:
我这里跑起来后的效果如下(运行起来后通过键盘上的“r”键,可以切换是否显示FOV框):
顺便贴上传感器的接口的使用方法。
1、这个传感器如何配置参数:
/**
Create an ideal object sensor and attach to specified vehicle
@param object_id Handle to the object to which the sensor should be attached
@param x Position x coordinate of the sensor in vehicle local coordinates
@param y Position y coordinate of the sensor in vehicle local coordinates
@param z Position z coordinate of the sensor in vehicle local coordinates
@param h heading of the sensor in vehicle local coordinates
@param fovH Horizontal field of view, in degrees
@param rangeNear Near value of the sensor depth range
@param rangeFar Far value of the sensor depth range
@param maxObj Maximum number of objects theat the sensor can track
@return Sensor ID (Global index of sensor), -1 if unsucessful
*/
SE_DLL_API int SE_AddObjectSensor(int object_id,
float x, float y, float z,
float h, float rangeNear, float rangeFar,
float fovH, int maxObj);
2、这个传感器能探测到哪些数据:
最后,简单总结下:
1、esmini自带的理想传感器,无法实现遮挡效果。
2、esmini自带的理想传感器,输出坐标实测为世界坐标系。个人猜测它的原理就是用FOV等参数对场景中的目标物做了个过滤。
3、对完美传感器的效果不满的话,或者需要开发其它种类的传感器,需要自己开发。
本文完。