华为云用户手册

  • 场景预览 场景预览当前有两种呈现方式:动态场景预览和地图场景预览。 动态场景预览:场景文件中存在完整的地图文件和动态场景文件,且动态场景文件为.xosc格式时显示。 地图场景预览:场景文件缺失或部分缺失,动态场景文件为.xml格式,场景文件解析失败或其他不支持动态场景预览的情况时显示。 动态场景预览 图6 动态场景预览页面 表2 动态场景预览页面详细说明 序号 区 域名 称 说明 1 动态场景预览区域 车辆的行驶轨迹,随着主车的行驶感知在主车辆周围出现的其他物体,如其他车辆、行人和交通信号等。目前可感知的物体类型请见感知物体类型。鼠标移动至道路时,道路会变红。遇到信号灯,车辆会按照红绿灯指示行驶。 2 交通参与物状态 可根据需要选择显示参与物状态。当前支持的参与物有参考线、车道、车道线、中心车道、交通信号、Trigger。 默认勾选Trigger,当出现时,单击图标,地图中会出现trigger的详细信息。 交通信号包含信号灯和交通标识牌。 3 视频播放控件 控制视频播放暂停回放按钮,支持逐帧和倍速播放。地图文件超过1MB不支持高倍速预览。 4 场景切换 视角切换:跟车、俯视、驾驶,自由。当在3D回放页面拖动鼠标时,即可切换为自由视角。 2D/3D切换:可单击“2D/3D”,可切换2D,3D场景。 地图场景预览 图7 地图场景预览页面 表3 地图场景预览页面详细说明 序号 区域名称 说明 1 地图场景预览区域 鼠标上下滚动,可以放大缩小图片,鼠标左键可旋转图片,右键可拖动图片。 2 交通参与物状态 可根据需要选择显示参与物状态。当前支持的参与物有参考线、车道、车道线、中心车道、信号灯。 3 场景刷新 单击右下方加号、减号和刷新按钮,放大、缩小、还原地图。
  • merge匝道合流 用途:创建merge高速匝道合流的静态场景(地图) 参数:参数如下表. 表1 merge参数 Parameter Type Mandatory Description lane_width length yes 每个车道宽度. left_lane_num int yes 左侧车道数量. right_lane_num int yes 右侧车道数量. ramp_lane_num int yes 匝道车道数量. main_speed speed yes 主路的限速值. ramp_speed speed yes 匝道的限速值. radius_of_curvature length yes 匝道的曲率半径. ramp_length length yes 匝道的长度. road_aids_type road_aids_type yes 道路辅助设施类型,匝道合流时匝道和主路的连接方式,目前共有三种:DType-1(直接式1)、DType-2(直接式2)和PType(平行式). 参数取值范围: lane_width: length = [3m..4m] left_lane_num: int = [0, 1, 2, 3, 4] right_lane_num: int = [1, 2, 3, 4] ramp_lane_num: int = [1, 2] main_speed: speed = [80kph..120kph] ramp_speed: speed = [40kph..60kph] radius_of_curvature: length = [150m..1000m] ramp_length: length = [200m..500m] road_aids_type: road_aids_type = ["DType-1", "DType-2", "PType"] keep创建 my_road_aids_type: road_aids_type = "DType-1" my_merge: merge with: keep(it.lane_width == 3m) keep(it.left_lane_num == 0) keep(it.right_lane_num == 3) keep(it.ramp_lane_num == 1) keep(it.main_speed == 120kph) keep(it.ramp_speed == 60kph) keep(it.radius_of_curvature == 200m) keep(it.ramp_length == 250m) keep(it.road_aids_type == my_road_aids_type) create创建 my_road_aids_type: road_aids_type = "DType-1" my_merge: merge = scenery.create_merge(lane_width: 3m, left_lane_num: 0, right_lane_num: 3, main_speed: 120kph, ramp_speed: 60kph, radius_of_curvature: 200m, ramp_length: 250m, road_aids_type: my_road_aids_type) 父主题: 领域模型设计
  • 静态场景样例 下文提供keep创建和create创建两种写法. 声明所有要泛化的变量,即为本例中第2-4行. 关键字merge 说明是匝道合流的种子场景,即为本例中的第6行. 明确本场景中所有参数的具体值,即为本例中的第7行到最后. scenario HighwayMerge: lane_width: length = [3m, 4m] left_lane_num: int = [0] ramp_length: length = [200m, 500m] road_aids_type: road_aids_type == "DType-1" merge_1: merge with: keep(it.lane_width == lane_width) keep(it.left_lane_num == left_lane_num) keep(it.right_lane_num == 2) keep(it.ramp_lane_num == 1) keep(it.main_speed == 120kph) keep(it.ramp_speed == 60kph) keep(it.radius_of_curvature == 200m) keep(it.ramp_length == ramp_length) keep(it.road_aids_type == road_aids_type) 声明本场景为静态场景,即为本例中第2行. 声明所有要泛化的变量,即为本例中第4行. create_merge说明是匝道合流的种子场景,即为本例中的第6行. 函数create_merge的入参即指定本场景中的所有参数具体值,即为本例中的第6-7行. scenario Merge: m_scene: scenery lane_width: length = [3m, 4m] my_road_aids_type: road_aids_type == "DType-1" m_straight: merge = m_scene.create_merge(lane_width: lane_width, left_lane_num: 0, right_lane_num: 2, main_speed: 120kph, ramp_speed: 60kph, radius_of_curvature: 200m, ramp_length: 300m, ramp_lane_num: 1, road_aids_type: my_road_aids_type) 父主题: 静态场景(地图)
  • 加载场景 Octopus平台支持用户在仿真器中加载场景库中的场景,在线编辑、运行并回放。 单击进入在线仿真页面,单击页面右上方的“加载场景”。 选择加载场景方式。 选择需要加载的场景、泛化场景或测试用例。 图2 加载场景 如果场景数量多,用户也可根据场景的标签进行过滤,并选择需要加载的场景。 图3 标签筛选 在搜索框中输入搜索内容,单击搜索,并在筛选出的场景、测试用例或泛化场景列表中勾选中需要加载的场景。 多项搜索:可根据需要决定是否启用多项搜索,输入多个关键字,中间用“;”隔开,可搜索多个关键字。 单击“确认”,仿真场景加载成功。 查看加载场景过程文件。 使用仿真器在线加载场景后,会在“/home/{user}/workspace/Data/Project/Current/Scenarios/”目录下出现加载过的场景文件,打开指定日期的场景文件夹。 图4 场景文件 单击打开该场景文件夹下的“.xml”文件,即可查看下载下来的“osgb”以及“xodr”文件所在路径。 图5 文件所在路径
  • 前提条件 当前Octopus支持仿真器A、仿真器B和仿真器C三类在线仿真器。在使用仿真器之前需要提前购买扩展资源包。 表1 扩展资源包列表 名称 描述 仿真场景编辑器 支持用户通过图形化界面方式运行仿真引擎,支持自动驾驶决策规划控制算法在线图形化开发调试。 说明: 不支持加载场景、重播场景和回放场景。 感知规控仿真引擎-在线 支持用户通过网页/图形化界面方式运行仿真引擎,支持自动驾驶感知决策规划控制算法在线图形化开发调试,支持高精度渲染引擎集成。 规控仿真引擎-在线 支持自动驾驶仿真静态路网和动态交通参与物场景编辑。
  • 指示标志牌前行为(Mandatory Sign)检测 指示标志牌前行为检测的目的是判断主车在这些指示标志牌前的行为是否合理,本设计考虑的指示标志牌有: 左转指示牌 右转指示牌 直行指示牌 左转直行指示牌 右转直行指示牌 左转右转指示牌 靠左行驶指示牌 靠右行驶指示牌 当主车前端超过左转指示牌, 并且主车不存在左转行为, 则左转指示牌前行为检测不通过。 当主车前端超过右转指示牌, 并且主车不存在右转行为, 则右转指示牌前行为检测不通过。 当主车前端超过直行指示牌, 并且主车不存在直行行为, 则直行指示牌前行为检测不通过。 当主车前端超过左转直行指示牌, 并且主车不存在左转直行行为, 则左转直行指示牌前行为检测不通过。 当主车前端超过右转直行指示牌, 并且主车不存在右转直行行为, 则右转直行指示牌前行为检测不通过。 当主车前端超过左转右转指示牌, 并且主车不存在左转右转行为, 则左转右转指示牌前行为检测不通过。 该指标关联的内置可视化时间序列数据为:暂无。 该指标的异常时间点记录类型为:POINT_TYPE_REGION。 父主题: 内置评测指标说明
  • 初始动作 assign_init_position 动作主体:车辆vehicle 或行人pedestrian . 结束时间:当动作主体actor 到达指定的位置坐标时,动作结束. 是否支持modifier:是 参数:参数如下表. 表1 assign_init_position参数 Parameter Type Mandatory Description position pose_3d no Desired position assigned by the user. assign_init_position支持设置绝对位置和相对位置,设置相对位置时使用 修饰器position和修饰器lane来给出相对值. 当初始位置需要车辆转换朝向时,通过设置pose_3d的orientation来设定朝向,以与所在车道朝向一致,例如车辆所在车道和road0呈90°夹角时,设置orientation的yaw为1.57rad,否则车辆启动后会有转向行为,影响场景的正常执行. 设置初始位置时所采用的地图元素必须是对应的地图中有的元素,比如设置绝对位置create_odr_point('0', '-4', 5.0m, 0.0m)时,地图上必须有id为'0'的road,该road上必须有lane_id为 '-4'的lane,该lane至少有5.0m以上的长度.如果设置的初始位置找不到地图中的对应元素,将泛化出无效的场景. 绝对位置 m_odr: odr_point = map.create_odr_point('0', '-4', 5.0m, 0.0m) m_orientation: orientation_3d with: keep(it.roll == 0.0rad) keep(it.pitch == 0.0rad) keep(it.yaw == 1.57rad) init_position: pose_3d with: keep(it.odr_point == m_odr) keep(it.orientation == m_orientation) Ego.assign_init_position(position: init_position) 相对位置 cut_in_vehicle.assign_init_position() with: lane(lane: raletive_lane_id, side_of: Ego, side: left) position(distance: 85.0m, behind: Ego) 父主题: 动作 Actions
  • split匝道分流 用途:创建split高速匝道合流的静态场景(地图) 参数:参数如下表. 表1 split参数 Parameter Type Mandatory Description lane_width length yes 每个车道宽度. left_lane_num int yes 左侧车道数量. right_lane_num int yes 右侧车道数量. ramp_lane_num int yes 匝道车道数量. main_speed speed yes 主路的限速值. ramp_speed speed yes 匝道的限速值. radius_of_curvature length yes 匝道的曲率半径. ramp_length length yes 匝道的长度. road_aids_type road_aids_type yes 道路辅助设施类型,匝道分流时匝道和主路的连接方式,目前共有三种:DType-1(直接式1)、DType-2(直接式2)和PType(平行式). 参数取值范围: lane_width: length = [3m..4m] left_lane_num: int = [0, 1, 2, 3, 4] right_lane_num: int = [3, 4] ramp_lane_num: int = [1, 2] main_speed: speed = [80kph..120kph] ramp_speed: speed = [40kph..60kph] radius_of_curvature: length = [150m..1000m] ramp_length: length = [200m..500m] road_aids_type: road_aids_type = ["DType-1", "DType-2", "PType"] keep创建 my_road_aids_type: road_aids_type = "DType-1" my_merge: merge with: keep(it.lane_width == 3m) keep(it.left_lane_num == 0) keep(it.right_lane_num == 3) keep(it.ramp_lane_num == 1) keep(it.main_speed == 120kph) keep(it.ramp_speed == 60kph) keep(it.radius_of_curvature == 200m) keep(it.ramp_length == 250m) keep(it.road_aids_type == my_road_aids_type) create创建 my_road_aids_type: road_aids_type = "DType-1" my_merge: merge = scenery.create_merge(lane_width: 3m, left_lane_num: 0, right_lane_num: 3, main_speed: 120kph, ramp_speed: 60kph, radius_of_curvature: 200m, ramp_length: 250m, road_aids_type: my_road_aids_type) merge和split场景使用的road_aids_type为enum类型,详见附录Enum lists的road_aids_type一节 在road_aids_type为"DType-2"时,right_lane_num必须大于ramp_lane_num. 如果希望车道属性需要搭建同一方向,不能存在left和right属性同时出现,可以将left_lane_num设置为0. 父主题: 领域模型设计
  • 延时评测 仿真器输出的仿真过程数据会按照OSI的GroundTruth格式存储为pb文件,根据创建任务配置时是否选择使用datahub,该仿真pb有两种格式: 使用datahub时,该仿真pb的每帧数据是GroundTruth结构,然后按照OSI标准推荐的存储格式,先按小端顺序存储4个字节,该4个字节表示下一帧GroundTruth总的字节数,然后继续4个字节,更下一帧GroundTruth的字节数,以此类推。 未使用datahub时,该仿真pb按照sim_osi.proto定义的格式进行存储,所有仿真数据帧GroundTruth存储到一个列表字段“frames”中。 仿真平台定义了sim_osi.proto和eva.proto,用于支持用户自定义评测的功能,具体的proto字段说明见请联系接口人获取仿真服务的proto协议。
  • catalog 目录catalog可使一些元素得以重复使用,在目录catalog中参数化类型是可维护的,并且可以在场景文件中 被引用仿真器A尚未支持使用catalog. catalog list ENUM_CATA LOG = ("vehicle_catalog", "controller_catalog", "pedestrian_catalog", "misc_object_catalog") vehicle_catalog:场景中可复用的车辆类型列表. controller_catalog:场景中可复用的控制器类型列表. pedestrian_catalog:场景中可复用的行人类型列表. misc_object_catalog:场景中可复用的杂项对象类型列表. 父主题: Enum Lists
  • 触发器与触发条件 Trigger and condition 用户可以使用wait+触发条件的方式来设置动作的触发条件condition ,可以使用的触发条件有: elapsed 、 object_distance、 point_distance 、time_to_collision、 time_headway 、 speed ,和acceleration . 如果不满足等待时长或触发条件,后续动作将无法执行. 使用wait来设定触发条件condition时,必须在serial:下执行,否则wait无效. 触发条件 elapsed 触发条件 object_distance 触发条件 point_distance 触发条件 time_to_collision 触发条件 time_headway 触发条件 speed 触发条件 acceleration 父主题: 代码样例 Code Examples
  • 初始动作 acquire_position_init 动作主体:车辆vehicle或行人pedestrian 结束时间:当动作主体actor 获取目标位置position 时,动作结束. 是否支持modifier:否 参数表: 参数如下表,pose_3d是point和orientation的组合结构, point可以使用xyz_point或 odr_point或road_point中的任意一个,orientation非必选项. 表1 acquire_position_init参数 Parameter Type Mandatory Description target pose_3d yes target position. 目标位置必须在地图设定的道路上,且是可达的. xyz_point,有方向要求 m_x: length = 0.0m m_xyz: xyz_point = map.create_xyz_point(x: m_x, y: 10.0m ,z: 0.0m) m_heading: angle = 1.57rad m_orientation: orientation_3d with: keep(it.roll == 0.0rad) keep(it.pitch == 0.0rad) keep(it.yaw == m_heading) m_position: pose_3d with: keep(it.xyz_point == m_xyz) keep(it.orientation == m_orientation) Ego.acquire_position_init(target: m_position) odr_point,无方向要求 m_odr: odr_point = map.create_odr_point(road_id: '0', lane_id: '-4', s: 5.0m, t: 0.0m) m_position: pose_3d with: keep(it.odr_point == m_odr) Ego.acquire_position_init(target: m_position) road_point,无方向要求 m_road: road_point = map.create_road_point(road_id: '0', s: 5.0m, t: 0.0m) m_position: pose_3d with: keep(it.road_point == m_road) Ego.acquire_position_init(target: m_position) 父主题: 动作 Actions
  • 警告标志前行为(Warning Sign)检测 警告类交通标志前行为检测的目的是判断主车在各种警告类标志前行为是否合理,主要包括两个方面的检测: 在警告类标志前车速是否太大 在警告类标志前是否有明显的加速行为 本设计认为当主车的车速大于或者加速度大于时,警告类标志前行为检测不通过。 该指标关联的内置可视化时间序列数据为:暂无。 该指标的异常时间点记录类型为:POINT_TYPE_REGION。 父主题: 内置评测指标说明
  • 平顺性(Ride Comfort)检测 平顺性检测通常指汽车的垂向平顺性。平顺性用加速度均方根值来衡量。 加速度均方根值计算公式如下所示。 表示变量的均方根值,表示第个值,表示值的个数。 汽车的垂向平顺性是由悬架系统决定的,自动驾驶算法对垂向平顺性几乎没有影响,其影响的是车辆的纵向和侧向平顺性。 因此,本设计平顺性检测从纵向平顺性和侧向平顺性进行考量。 平顺性检测考虑的是整个仿真时间段的加速度均方根值。当纵向或侧向加速度均方根值大于,则认为对应的纵向/侧向平顺性检测不通过。 纵向平顺性关联的内置可视化时间序列数据为:accX。横向平顺性关联的内置可视化时间序列数据为:accY。 该指标的异常时间点记录类型为:POINT_TYPE_ALL。 父主题: 内置评测指标说明
  • merge 简述:地图场景为匝道合流.主车Ego在主道行驶,初始速度为Ego_InitSpeed_Ve0,Ego设定了目标在主道右侧2车道上的目标点Target_position,仿真开始后激活Ego控制器(控制器会影响Ego去往Target_position的寻路算法,但目前仿真器B尚不支持寻路动作acquire_position),从车side_vehicle在匝道行驶,初始速度为SideVehicle_InitSpeed_Ve0.side_vehicle从匝道汇入主道.控制器有时会根据side_vehicle的位置更改主车Ego的速度. 地图文件(odr) scenario Merge: m_scene: scenery lane_width: length = [3m, 4m] radius_of_curvature: length = [200m..1000m] ramp_lane_num: int = 1 ramp_length: length = [200m..300m] main_speed: speed = 120kph ramp_speed: speed = 60kph road_aids_type: road_aids_type = ["DType-1", "DType-2", "PType"] merge_1: merge with: keep(it.lane_width == lane_width) keep(it.left_lane_num == 0) keep(it.right_lane_num == 2) keep(it.ramp_lane_num == ramp_lane_num) keep(it.main_speed == main_speed) keep(it.ramp_speed == ramp_speed) keep(it.radius_of_curvature == radius_of_curvature) keep(it.ramp_length == ramp_length) keep(it.road_aids_type == road_aids_type) 场景文件(osc) import standard scenario Merge: # map map: map map.set_map_file("./merge.odr") # parameter Ego_InitSpeed_Ve0: speed = [90kph..110kph] Ego_InitPosition_LaneId: string = ['-1', '-2'] Ego_InitPosition_s: length = [0m..30m] Ego_Odr: odr_point = map.create_odr_point(road_id: '10', lane_id: Ego_InitPosition_LaneId, s: Ego_InitPosition_s, t: 0.0m) Ego_InitPosition: pose_3d with: keep(it.odr_point == Ego_Odr) SideVehicle_InitSpeed_Ve0: speed = [45kph, 50kph, 55kph] SideVehicle_s: length = [30.0m..80.0m] SideVehicle_Odr: odr_point = map.create_odr_point(road_id: '1', lane_id: '-1', s: SideVehicle_s, t: 0.0m) SideVehicle_InitPosition: pose_3d with: keep(it.odr_point == SideVehicle_Odr) Target_xyz: xyz_point = map.create_xyz_point(x: 530m, y: -2m ,z: 0.0m) Target_position: pose_3d with: keep(it.xyz_point == Target_xyz) Duration: time = 100s # entity Ego: vehicle with: keep(it.name == "Saimo") keep(it.initial_bm == "默认驾驶员") side_vehicle: vehicle with: keep(it.name == "Saimo") keep(it.initial_bm == "默认驾驶员") # storyboard do parallel(duration: Duration): # init Ego.assign_init_position(position: Ego_InitPosition) Ego.assign_init_speed(Ego_InitSpeed_Ve0) side_vehicle.assign_init_position(position: SideVehicle_InitPosition) side_vehicle.assign_init_speed(SideVehicle_InitSpeed_Ve0) Ego.activate_controller(true, true) Ego.acquire_position(target: Target_position) 父主题: 种子地图的逻辑场景样例(仿真器B)
  • 车道保持(Lane Keeping)检测 车道保持检测的目的是判断主车在行使过程中能否很好地沿车道中心线行使。 车道保持检测分为两个指标: 偏移车道中心线距离检测 偏移车道中心线横摆角检测 偏移车道中心线距离检测是指主车的质心相对于车道中心线的垂直距离,当该偏移距离大于某一阈值时(本设计取0.3m,该阈值可以用户自定义),则偏移车道中心线距离检测不通过。 偏移车道中心线横摆角检测是指主车行使时速度方向与车道中心线的夹角,当该夹角大于某一阈值时(本设计取0.05rad,该阈值可以用户自定义),则偏移车道中心线横摆角检测不通过。 车道保持检测需要排除主车进行了换道操作,对于换道期间进行偏移车道中心线距离检测和偏移车道中心线横摆角检测,将会出现假阳性的结果。 当主车所在的road id保持不变,在某一时刻,其lane id 发生变化,在该时刻的前后一定时间内(本设计取2s)发生换道。 车头横摆角偏离检测关联的内置可视化时间序列数据为:relativeYaw。横向偏移距离检测关联的内置可视化时间序列数据为:lateralOffset。 该指标的异常时间点记录类型为:POINT_TYPE_POINT。 父主题: 内置评测指标说明
  • Dockerfile示例 一般情况下,引擎主要包含预标注算法或预审核算法运行所需要的基本依赖环境,用户也可将预标注算法或预审核算法包内置在AI引擎中。用户可使用命令行模式或Dockerfile模式进行构建。以预标注 自定义镜像 为例,一般的镜像制作Dockerfile示例如下(xxx替换为实际路径): # 载入基础镜像,训练或评测引擎一般需包含cuda/cudnn等算法基础环境。用户可手动制作或拉取官方镜像 FROM xxx/cuda:11.0.3-devel-ubuntu18.04 # 设置工作目录【可选】默认为ROOT,用户可修改USER及PATH WORKDIR /root/workspace # 如果是内置预标注算法的自定义镜像,需要把预标注算法复制到工作目录下, COPY /path/to/algorithom /path/to/algorithom # 按需安装用户APT环境。如果需要修改/etc/apt/sources.list可替换 COPY /path/to/sources.list /etc/apt/sources.list RUN apt-get install vim # 按需安装用户算法环境。如果需要修改~/.pip/pip.conf可替换。用户也可安装miniconda进行包管理 COPY /path/to/pip.conf /root/.pip/pip.conf COPY /path/to/requirements.txt /root RUN pip install –r /root/requirements.txt # 设置环境变量【可选】 ENV PYTHONUNBUFFERED 1 对于Dockerfile的统一构建方式如下: docker build –f [DockerfileName] –t [ImageName:ImageVersion] . 父主题: 镜像制作(标注)
  • dynamics_shape 表示给定变量随时间或距离的变化.用于动作change_speed, change_lane. dynamics_shape list ENUM_DYNAMI CS _SHAPE = ("linear", "cubic", "sinusoidal", "step") linear:变化曲线是一个线性linear 函数f(x) = f_0 +变化速率*x. cubic:变化曲线是一个三次变迁Cubical transition 函数f(x)=Ax3+B*x2+Cx+D,约束梯度在开始和结束时必须为零. sinusoidal:变化曲线是一个正弦变迁Sinusoidal transition 函数 f(x)=A*正弦(x)+B,约束梯度在开始和结束时必须为零. step:变化曲线是一个阶段变迁Step transition 函数 父主题: Enum Lists
  • split 简述:地图场景为匝道分流.lead_vehicle和主车Ego在主道的同一车道上分别以35kph和Ego_InitSpeed_Ve0的初始速度一前一后行驶,Ego设定了目标在匝道上的目标点Target_position,仿真开始后激活Ego控制器(控制器会影响Ego去往Target_position的寻路算法,但目前仿真器B尚不支持寻路动作acquire_position).控制器有时会根据lead_vehicle的位置更改主车Ego的速度. 使用xyz坐标创建终点时,由于匝道地图泛化会使终点偏移,建议在创建测评任务时为检测终点设置合适的的半径,例如"到达半径5m". 地图文件(odr) scenario Split: m_scene: scenery lane_width: length = [3m..4m] main_speed: speed = 120kph ramp_speed: speed = 60kph ramp_length: length = [300m..350m] road_aids_type: road_aids_type = "DType-2" split_1: split with: keep(it.lane_width == lane_width) keep(it.left_lane_num == 0) keep(it.right_lane_num == 3) keep(it.ramp_lane_num == 1) keep(it.main_speed == main_speed) keep(it.ramp_speed == ramp_speed) keep(it.radius_of_curvature == 200m) keep(it.ramp_length == ramp_length) keep(it.road_aids_type == road_aids_type) 场景文件(osc) import standard scenario Split: # map map: map map.set_map_file("./split.odr") # parameter Ego_InitSpeed_Ve0: speed = [90kph..110kph] Ego_InitPosition_LaneId: string = ['-1', '-2'] Ego_InitPosition_s: length = [0m..100m] Ego_Odr: odr_point = map.create_odr_point(road_id: '10', lane_id: Ego_InitPosition_LaneId, s: Ego_InitPosition_s, t: 0.0m) Ego_InitPosition: pose_3d with: keep(it.odr_point == Ego_Odr) m_InitDistance: length = [60m..100m] Target_xyz: xyz_point = map.create_xyz_point(x: 445m, y: -46.5m ,z: 0.0m) Target_position: pose_3d with: keep(it.xyz_point == Target_xyz) Duration: time = 100s # entity Ego: vehicle with: keep(it.name == "Saimo") keep(it.initial_bm == "默认驾驶员") lead_vehicle: vehicle with: keep(it.name == "Saimo") keep(it.initial_bm == "默认驾驶员") # storyboard do parallel(duration: Duration): # init Ego.assign_init_position(position: Ego_InitPosition) Ego.assign_init_speed(Ego_InitSpeed_Ve0) lead_vehicle.assign_init_position() with: lane(same_as: Ego) position(distance: m_InitDistance, ahead_of: Ego) lead_vehicle.assign_init_speed(35kph) Ego.activate_controller(true, true) Ego.acquire_position(target: Target_position) 父主题: 种子地图的逻辑场景样例(仿真器B)
  • 乘员舒适性(Driving Comfort)检测 乘员舒适性检测关注的是自动驾驶车辆行使过程中,驾驶员感受到的舒适程度。 舒适程度通常可以利用整个行使过程中的速度方差来进行客观反映,而变异系数是可以对不同速度区间舒适程度进行比较。 变异系数的公式如下所示。 表示变异系数,表示标准差,表示均值。 本设计当主车速度的变异系数大于0.15时,判定乘员舒适性检测不通过。 该指标关联的内置可视化时间序列数据为:speedX。 该指标的异常时间点记录类型为:POINT_TYPE_ALL。 父主题: 内置评测指标说明
  • 禁止标志牌前行为(Prohibited Sign)检测 禁止标志牌前行为检测的目的是判断主车在这些禁止类标志牌前的行为是否合理。 本设计考虑评测的禁止标志牌有: 禁止机动车标志牌 禁止各种车辆标志牌 禁止驶入标志牌 限制宽度标志牌 限制高度标志牌 限制重量标志牌 在禁止机动车标志牌,禁止各种车辆标志牌,禁止驶入标志牌等标志前, 当检测到主车的车头越过标志牌并且标志牌的对主车起作用时, 该类标志前的行为检测不通过。 对于限制高度、限制宽度、限制高度等禁止标志牌, 在满足上述触发条件的情况下, 并且主车的对应度量值(如高度、宽度、重量)大于标志牌禁止的数值, 则主车在该类标志牌前的行为检测不通过。 该指标关联的内置可视化时间序列数据为:暂无。 该指标的异常时间点记录类型为:POINT_TYPE_REGION。 父主题: 内置评测指标说明
  • 车辆和控制器 Vehicle and controller 通过 车辆名: vehicle 的方式来为车辆命名.通过 keep(it.name == 指定车型名称) 的方式来指定车辆类型.通过 keep(it.initial_bm == 指定controller名称) 的方式来指定controller类型,目前均只能支持仿真器A或仿真器B内置的车辆和controller类型.生成文件会自动适配车辆信息. name, initial_bm等车辆属性需要在仿真器的catalog列表中定义,不同仿真器的预定义的catalog内容有所不同,需要在撰写场景文件时确认使用的车型、controller名称在仿真器catalog中已经存在. name为必选项,initial_bm非必选项. 主车必须命名为Ego,否则仿真器A/仿真器B将无法识别. 例1(仿真器A):主车,指定initial_bm Ego_name: string = "Audi_A3_2009_black" Ego_controller: string = "DefaultDriver" Ego: vehicle with: keep(it.name == Ego_name) keep(it.initial_bm == Ego_controller) 例2(仿真器A):非主车,不指定initial_bm cut_in_vehicle: vehicle with: keep(it.name == "Audi_A3_2009_red") 例3(仿真器B):主车,指定initial_bm cut_in_vehicle: vehicle with: keep(it.name == "Saimo") keep(it.initial_bm == "默认驾驶员") 例4(仿真器B):非主车,不指定initial_bm cut_in_vehicle: vehicle with: keep(it.name == "Saimo") 父主题: 实体设置 Entities
  • 执行顺序 Execution sequence OSC2.0场景剧本StoryBoard 通过执行顺序Execution Sequence 和触发器Trigger 来支持用户 设计各种场景.StoryBoard 中有parallel 和serial 两种执行指令,最外层执行指令之前需要加上do 来 使场景剧本生效.其中: parallel :同步执行下方代码块内的动作action . serial :依次执行下方代码块内的动作act . 例如下方样例中, do parallel: 下的assign_init_speed , assign_init_position 和wait elapsed(10s) 是同步执行的.而serial: 下的lead_vehicle.change_speed 在Ego.activate_controller 完成之后执行. 由于初始动作InitAction内的action同步执行,且InitAction与story之间不涉及顺序 执行,建议场景最外层统一使用parallel. 样例 m_profile: dynamics_shape = linear do parallel: # InitAction Ego.assign_init_speed(15mps) Ego.assign_init_position(position: Ego_InitPosition) # Story serial: # act1 Ego.activate_controller(true, true) lead_vehicle.change_speed(target: 20mps, rate_profile: m_profile, rate_peak: 0.3mpss) serial: # act2 wait elapsed(10s) lead_vehicle.activate_controller(true, true) 父主题: 场景剧本 StoryBoard
  • 蛇行(Snake Driving)检测 自动驾驶车辆在行使过程中,当车道的曲率发生较大变化时,可能会出现横向控制效果不佳导致的长时间车辆横向振荡。 蛇行检测的目的是判断车辆是否出现横向振荡,利用车辆的横向加速度的正负变化来判断蛇行是否发生。 正值大于和负值小于的比例都大于该时间段的10%时,则判断此时间段发生蛇行。 在及少数的连续S型弯道情况下,可能会出现假阳性结果,这会在评测报告中进行体现。 该指标关联的内置可视化时间序列数据为:accY。 该指标的异常时间点记录类型为:POINT_TYPE_REGION。 父主题: 内置评测指标说明
  • junction 简述:地图场景为交叉口.lead_vehicle和主车Ego一前一后分别以LeadVehicle_TargetSpeed_Ve0和Ego_TargetSpeed_Ve0的初始速度向交叉口行驶,Ego设定了目标在右转车道上的目标点Target_position,仿真开始后激活Ego控制器(控制器会影响Ego去往Target_position的寻路算法,但目前仿真器B尚不支持寻路动作acquire_position).另一路段上有一辆车vehicle1,也以LeadVehicle_TargetSpeed_Ve0的速度朝交叉口行驶..控制器有时会根据环境车的位置更改主车Ego的速度. 地图文件(odr) scenario Junction: m_scene: scenery lane_num: int = [2, 3, 4] bikeway: bool = false sidewalk: bool = false junction_type: junction_type = ["crossroad", "T-junction"] junction_1: junction with: keep(it.lane_num == lane_num) keep(it.bikeway == bikeway) keep(it.sidewalk == sidewalk) keep(it.junction_type == junction_type) 场景文件(osc) import standard scenario Junction: # map map: map map.set_map_file("./junction.odr") # parameter Ego_TargetSpeed_Ve0: speed = [50kph..60kph] Ego_InitPosition_RoadId: string = '1' Ego_InitPosition_LaneId: string = ['-1', '-2'] Ego_InitPosition_s: length = [0m..100m] Ego_Odr: odr_point = map.create_odr_point(road_id: Ego_InitPosition_RoadId, lane_id: Ego_InitPosition_LaneId, s: Ego_InitPosition_s, t: 0.0m) Ego_InitPosition: pose_3d with: keep(it.odr_point == Ego_Odr) Target_xyz: xyz_point = map.create_xyz_point(x: 225m, y: -100m ,z: 0.0m) Target_position: pose_3d with: keep(it.xyz_point == Target_xyz) LeadVehicle_TargetSpeed_Ve0: speed = 45kph Vehicle1_Odr: odr_point = map.create_odr_point(road_id: '2', lane_id: '2', s: 100.0m, t: 0.0m) m_orientation: orientation_3d with: keep(it.roll == 0.0rad) keep(it.pitch == 0.0rad) keep(it.yaw == -1.57rad) Vehicle1_InitPosition: pose_3d with: keep(it.odr_point == Vehicle1_Odr) keep(it.orientation == m_orientation) m_profile: dynamics_shape = [sinusoidal, linear, step] m_rate_peak: acceleration = [5kmphps, 10kmphps] Duration: time = [100s, 120s] # entity Ego: vehicle with: keep(it.name == "Saimo") keep(it.initial_bm == "默认驾驶员") lead_vehicle: vehicle with: keep(it.name == "Saimo") keep(it.initial_bm == "默认驾驶员") vehicle1: vehicle with: keep(it.name == "Saimo") keep(it.initial_bm == "默认驾驶员") # storyboard do parallel(duration: Duration): # init Ego.assign_init_position(position: Ego_InitPosition) Ego.assign_init_speed(Ego_TargetSpeed_Ve0) lead_vehicle.assign_init_position() with: lane(same_as: Ego) position(distance: 30.0m, ahead_of: Ego) lead_vehicle.assign_init_speed(LeadVehicle_TargetSpeed_Ve0) vehicle1.assign_init_position(position: Vehicle1_InitPosition) vehicle1.assign_init_speed(LeadVehicle_TargetSpeed_Ve0) Ego.activate_controller(true, true) Ego.acquire_position(target: Target_position) 父主题: 种子地图的逻辑场景样例(仿真器B)
  • 任务配置相关操作 在“任务配置”列表,可对仿真任务配置进行以下操作。 表3 任务配置相关操作 任务 操作步骤 查看算法详情 单击该任务配置所使用的算法名称,即可查看算法详情。无算法接入时页面显示“--”,使用仿真器自带的驾驶员模型控制主车。 查看评测详情 单击该任务配置所使用的评测名称,即可查看评测详情。 查看任务配置详情 单击任务配置名称,可查看任务配置详情。 图6 任务配置详情 查询任务配置 可按照"任务配置ID"、"任务配置名称"、"算法名称"、"评测名称"、"任务配置描述"查询任务配置。 删除任务配置 单击操作栏“ 删除”,删除该任务配置。删除后不可恢复,请谨慎操作。 编辑任务配置 单击操作栏“编辑”,以修改任务配置名称和描述信息。
  • straight 简述:地图场景为直道.lead_vehicle和主车Ego在主道上分别以40kph和Ego_InitSpeed_Ve0的初始速度一前一后行驶,Ego设定了目标在主道右2车道上的目标点Target_position,同时激活Ego控制器(控制器会影响Ego去往Target_position的寻路算法,但目前仿真器B尚不支持寻路动作acquire_position),控制器有时会根据lead_vehicle的位置更改主车Ego的速度. 地图文件(odr) scenario Straight: m_scene: scenery lane_width: length = [3m..4m] right_lane_num: int = [2, 3] bikeway: bool = [true, false] sidewalk: bool = [true, false] main_speed: speed = 60kph road_length: length = [550m, 600m] straight_1: straight with: keep(it.lane_width == lane_width) keep(it.left_lane_num == 0) keep(it.right_lane_num == right_lane_num) keep(it.bikeway == bikeway) keep(it.sidewalk == sidewalk) keep(it.main_speed == main_speed) keep(it.road_length == road_length) 场景文件(osc) import standard scenario Straight: # map map: map map.set_map_file("./straight.odr") # parameter Ego_InitSpeed_Ve0: speed = [55kph..60kph] Ego_InitPosition_LaneId: string = ['-1', '-2'] Ego_InitPosition_s: length = [0m..30m] Ego_Odr: odr_point = map.create_odr_point(road_id: '1', lane_id: Ego_InitPosition_LaneId, s: Ego_InitPosition_s, t: 0.0m) Ego_InitPosition: pose_3d with: keep(it.odr_point == Ego_Odr) m_distance: length = [50m..80m] LeadVehicle_Odr: odr_point = map.create_odr_point(road_id: '1', lane_id: '-1', s: m_distance, t: 0.0m) LeadVehicle_InitPosition: pose_3d with: keep(it.odr_point == LeadVehicle_Odr) Target_xyz: xyz_point = map.create_xyz_point(x: 450m, y: -4.5m ,z: 0.0m) Target_position: pose_3d with: keep(it.xyz_point == Target_xyz) Duration: time = 100s # entity Ego: vehicle with: keep(it.name == "Saimo") keep(it.initial_bm == "默认驾驶员") lead_vehicle: vehicle with: keep(it.name == "Saimo") keep(it.initial_bm == "默认驾驶员") # storyboard do parallel(duration: Duration): # init Ego.assign_init_position(position: Ego_InitPosition) Ego.assign_init_speed(Ego_InitSpeed_Ve0) lead_vehicle.assign_init_position(position: LeadVehicle_InitPosition) lead_vehicle.assign_init_speed(40kph) Ego.activate_controller(true, true) Ego.acquire_position(target: Target_position) 父主题: 种子地图的逻辑场景样例(仿真器B)
  • pose_3d 定义:三维空间的复合位置,包含位置点(odr_point或position_3d或road_point)和方向(orientation_3d)两个参数 用途:设置实体的初始位置(assign_init_speed动作)、目标位置(acquire_position动作) 参数:参数如下表. 表1 pose_3d参数 Parameter Type Mandatory Description xyz_point xyz_point no a pose in space specified in Cartesian (XYZ) coordinates. odr_point odr_point no a point expressed in ASAM OpenDRIVE coordinates. road_point road_point no a point on route network specified in S-T coordinates. orientation orientation_3d no three-dimensional orientation xyz_point、odr_point和road_point必须设置且仅设置一个,用以提供位置信息. orientation非必选项,当不设置orientation时,对应roll、pitch、yaw均为0时的方向 使用xyz_point、设置orientation my_xyz: xyz_point = map.create_xyz_point(x: 150.0m, y: 200.0m ,z: 0.0m) m_orientation: orientation_3d with: keep(it.roll == 0.0rad) keep(it.pitch == 0.0rad) keep(it.yaw == 1.57rad) my_pose: pose_3d with: keep(it.xyz_point == my_xyz) keep(it.orientation == m_orientation) 使用odr_point、不设置orientation my_odr: odr_point = map.create_odr_point(road_id: '1',lane_id:'-2',s: 3.0m, t: 0.0m) my_pose: pose_3d with: keep(it.odr_point == my_odr) 使用road_point、不设置orientation my_road: road_point with keep(it.road_id == '1') keep(it.s == 5.0m) keep(it.t == 0.0m) my_pose: pose_3d with: keep(it.road_point == my_road) 父主题: Struct
  • 内置评测信号参数 表1 内置评测信号参数 内置评测信号参数 对应中文 speedX 纵向速度 speedY 侧向速度 accX 纵向加速度 accY 侧向加速度 speedYaw 横摆速度 relativeYaw 相对车道中心线偏离角 lateralOffset 相对车道中心线偏离距离 relativeSpeed 相对前车的速度 relativeDistance 相对前车的距离 TH 相对前车车头时距 TTC 相对前车ttc rmsAccX 纵向加速度均方根值 rmsAccY 侧向加速度均方根值 varianceSpeed 速度方差
  • 采样结果 如下图1和图2所示,对于某个逻辑场景进行拉丁超立方和蒙特卡洛采样,参数都是符合随机特性,但采样得到的值不相同。 对于同样的采样点数,拉丁超立方采样的结果会更加分散,并且边界值会更多。 图4 蒙特卡洛采样结果 图5 拉丁超立方采样结果 对于离散型参数,联合概率分布采样会根据给定的取值列表进行随机采样。 图6 离散型参数-联合概率分布采样结果 对于连续型参数,联合概率分布采样会根据参数分布和相关系数进行采样。 图7 连续型参数-联合概率分布采样结果 对于重要性采样,联合概率分布采样会在边界附近进行采样。 图8 重要性采样结果
共100000条