华为云用户手册

  • 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 重要性采样结果
  • junction路口 用途:创建junction城区路口的静态场景(地图) 参数:参数如下表. Parameter Type Mandatory Description lane_num int yes 单方向车道数量. bikeway bool yes 是否有自行车道. sidewalk bool yes 是否有人行道. junction_type junction_type yes 路口的类型,目前支持两种类型crossroad(十字路口)和T-junction(丁字路口) 参数取值范围: lane_num: int = [1, 2, 3, 4] bikeway: bool = [true, false] sidewalk: bool = [true, false] junction_type: junction_type = ["crossroad", "T-junction"] keep创建 my_junction_type: junction_type = "crossroad" my_junction: junction with: keep(it.lane_num == 2) keep(it.bikeway == false) keep(it.sidewalk == false) keep(it.junction_type == my_junction_type) create创建 my_junction_type: junction_type = "crossroad" my_junction: junction = scenery.create_junction(lane_num: 2, bikeway: false, sidewalk: false, junction_type: my_junction_type) 父主题: 领域模型设计
  • 平稳起步(Gentle Start)检测 汽车起步时加速度太大会给人带来不舒适的感受。平稳起步检测的目的是判断自动驾驶车辆起步过程中加速度是否过大。 起步过程的判定是指车辆当前速度为0,并在0.5s后速度大于,这个0.5s内的时间段为起步过程。 起步过程中如果加速度大于一定阈值(本设计取),则判定起步加速度过大,起步不平稳。 该指标关联的内置可视化时间序列数据为:speedX,accX。 该指标的异常时间点记录类型为:POINT_TYPE_POINT。 父主题: 内置评测指标说明
  • straight城区直行 用途:创建straight城区直行的静态场景(地图) 参数:参数如下表. 表1 straight城区直行参数 Parameter Type Mandatory Description lane_width length yes 每个车道宽度. left_lane_num int yes 左侧车道数量. right_lane_num int yes 右侧车道数量. bikeway bool yes 是否有自行车道. sidewalk bool yes 是否有人行道. main_speed speed yes 主路的限速值. road_length length yes 主路的长度. 参数取值范围: lane_width: length = [3m..4m] left_lane_num: int = [0, 1, 2, 3, 4] right_lane_num: int = [1, 2, 3, 4] bikeway: bool = [true, false] sidewalk: bool = [true, false] main_speed: speed = [40kph..60kph] road_length: length = [150m..500m] keep创建 my_straight: straight with: keep(it.lane_width == 3m) keep(it.left_lane_num == 0) keep(it.right_lane_num == 3) keep(it.bikeway == false) keep(it.sidewalk == false) keep(it.main_speed == 60kph) keep(it.road_length == 500m) create创建 my_straight: straight = scenery.create_straight(lane_width: 3m, left_lane_num: 0, right_lane_num: 3, bikeway: false, sidewalk: false, main_speed: 60kph, road_length: 500m) 父主题: 领域模型设计
  • 使用规范 在线仿真服务集成了一整套完整的仿真工具链,开箱即用。 在使用新的普通用户登录在线仿真时,需修改在线仿真系统配置: 关闭桌面锁屏。 调整屏幕分辨率(默认分辨率不高,可调至适合的分辨率)。 将默认的浏览器更改为Chrome或Firefox。 在线仿真根据用户名称生成系统进程,Linux中不合法的用户名称登录在线仿真会出现异常,合法的用户名称限制如下: 只能包含小写字母、数字、下划线、中划线 。不得超过31个字符。 只能以字母和下划线开头。不可包括连续的下划线和中划线。不可包含linux的关键字或保留字。 目前在线仿真为独占式,同一台在线仿真器同一时间只允许一个用户使用,待用户释放后,才可供其他用户使用。
  • road_point 定义:路网s-t坐标系中的特定位置点(point). 用途:设置实体位置,用于构成pose_3d. 参数:参数如下表. 表1 road_point参数 Parameter Type Mandatory Description road_id string yes identifier for the road in which this point is located s length yes Coordinate along the s-axis of the corresponding road t length yes Coordinate along the t-axis of the corresponding road keep创建 my_road: road_point with keep(it.road_id == '1') keep(it.s == 5.0m) keep(it.t == 0.0m) create创建 my_point: road_point = map.create_road_point(road_id: '1', s: 5.0m, t: 0.0m) 父主题: Struct
  • 换道(Lane Change)检测 换道检测的目的是判断主车在换道过程中的换道持续时间以及换道时的侧向加速度是否合理。 换道是指当主车所在的road id保持不变, 在某一时刻,其lane id发生变化, 在该时刻的前后一段时间内主车处于换道过程。 对于判定换道时的侧向加速度是否合理, 本设计考虑换道时刻的前后2s的时间段内的侧向加速度是否太大, 对于侧向加速度大于一定阈值(可用户自定义,本设计取2m/s2), 则换道时的侧向加速度检测不通过。 对于判断换道持续时间是否合理, 本设计以主车相对车道中心线的偏离横摆角作为换道开始和结束的判定标记, 在换道时刻之前的第一个偏离横摆角小于0.03rad的时间点为换道开始点, 在换道时刻之后第一个偏离横摆角小于0.03rad的时间点为换道结束点。 换道开始点到换道结束点的时间长度作为换道持续时间, 当换道持续时间小于某一阈值(可用户自定义,本设计取1.5s)时, 或换道时间大于某一阈值(可用户自定义,本设计取6s)时, 换道持续时间检测不通过。 该指标关联的内置可视化时间序列数据为:暂无。 该指标的异常时间点记录类型为:POINT_TYPE_POINT。 父主题: 内置评测指标说明
  • 评分方案介绍 Octopus评测指标共有30多项大类指标,当规控算法未通过某些评测指标后,评测分数应能反映算法的性能表现。 本设计根据指标的重要程度将其分为三大类: 主要指标(以下简称A类)。 次要指标(以下简称B类)。 未定义重要度指标(以下简称C类)。 本设计提供如下三种内置的评分方案: AB类log函数评分。 AB类均匀权重评分。 C类均匀权重评分。 接下来对三种评分方案进行详细介绍。 父主题: 评测分数计算介绍
  • 具体场景 Concrete scenario 具体场景的参数声明支持基础类型、标量(scalar)类型、枚举(enum)类型,和 结构(struct)类型: 基础类型包含int、float、bool,和string类型.可以直接在等号后赋值. scalar类型包含speed、acceleration、length、time,和angle类型.赋值时需要在值后 加上OSC2.0支持的单位(见附录Scalar units). enum类型包含side_left_right、distance_direction、distance_mode、 lane_change_side、 dynamics_shape,和 catalog.赋值时必须使用枚举列表内的值(见附录Enum list) . struct类型包含odr_point、xyz_point、position_3d、road_point、orientation_3d和pose_3d等,可以使用 keep创建.此外,odr_point、xyz_point,和road_point分别可以使用map的成员函数 create_odr_point 、 create_xyz_point 和create_road_point 来创建(OSC2.0支持的struct类型详见附录Struct). 给bool型赋值时必须使用'true'和'false',如果使用'True'或'False'或拼写错误将使语句无效. 例1:基础类型 m_road_id: string = '0' Ego_name: string = "Audi_A3_2009_black" m_lateral: bool = true 例2:scalar类型 v: speed = 5mps delay: time = 40s distance: length = 30.0m m_a: acceleration = 0.01mpss 例3:enum类型 m_side: side_left_right = right m_direction: distance_direction = longitudinal 例4:struct类型,keep创建 my_odr: odr_point with: keep(it.road_id == 0) keep(it.lane_id == -1) keep(it.s == 3.0m) keep(it.t == 0.0m) my_pos: position_3d with: keep(it.x == 1.0m) keep(it.y == 2.0m) keep(it.z == 3.0m) my_xyz: xyz_point with: keep(it.position == my_pos) my_road: road_point with: keep(it.road_id == '1') keep(it.s == 3.0m) keep(it.t == 0.0m) my_orientation: orientation_3d with: keep(it.roll == 1.0rad) keep(it.pitch == 2.0rad) keep(it.yaw == 3.0rad) my_pose: pose_3d with: keep(it.xyz_point == my_xyz) keep(it.orientation == m_orientation) m_trajectory: trajectory with: keep(it.points == [my_pose1, my_pose2, my_pose3]) keep(it.time_stamps == [0s, 5s, 20s] ) 例5:struct类型,map创建 my_odr: odr_point = map.create_odr_point(road_id: m_road_id,lane_id:'-4',s: 5.0m, t: 0.0m) my_xyz: xyz_point = map.create_xyz_point(x: 2.5m, y: 10.0m ,z: 0.0m) my_point: road_point = map.create_road_point(road_id: '1', s: 5.0m, t: 0.0m) 父主题: 参数声明 Parameter Declarations
  • 动作 lane_offset 动作主体:车辆vehicle 结束时间:当动作主体actor 到达目标偏移offset 处时,动作结束. 是否支持modifier:否 参数:参数如下表,支持位置参数和关键字参数.参数target 非必选项,不设置target 时采用绝对偏移,设置target 时采用相对偏移. 表1 lane_offset参数 Parameter Type Mandatory Description offset length yes Signed number in meters the vehicle should respect as an offset from the center of the current lane. rate_peak speed yes Target value for the peak lateral velocity that must be achieved during the action. dynamics_shape dynamics_shape yes Geometrical shape of the LaneOffsetAction's dynamics. target entity no Reference entity. offset值不能超出当前所在lane的宽度范围. 绝对偏移 m_shape: dynamics_shape = step Ego.lane_offset(0.8m, 0.5mps, m_shape) 相对偏移 m_shape: dynamics_shape = linear side_vehicle.lane_offset(offset:1.0m, rate_peak: 1.5mps, dynamics_shape:m_shape, target: Ego) 父主题: 动作 Actions
共100000条