- OASIS SIM(废弃)
- sensors
- dynamics
- cars
- car_models
- jobs
- tasks
- scenarios
- scenario_groups
- scenario_elements
- maps
- test_cases
- scores
- traffic_flows
- controllers
- weathers
- lights
- logs(废弃)
- emails
- users
- evaluates
- file_operator
- trashes(已废弃)
- configs
- licenses
- 查询tokenGET
创建自定义评价规则
开发中
POST
/evaluates/customer_criteria
请求参数
Header 参数
Authorization
string
必需
示例值:
bearer {{token}}
Content-Type
string
必需
示例值:
application/json
User-Agent
string
必需
示例值:
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36
Body 参数application/json
name
string
评价名称
name_en
string
可选
desc
string
描述
desc_en
string
可选
script_content
string
评价脚本的内容
示例
{
"name": "script_20240819_616",
"name_en": "script_20240819_616",
"desc": "test",
"desc_en": "test",
"script_content": "#!/usr/bin/env python\nimport operator\nimport numpy as np\n\n\n# ACC评估指标\n# 参考:GB/T 20608-2006 智能运输系统 自适应巡航控制系统 性能要求与检测方法\ndef ACC_Evaluation(\n final_data: dict = {}, success_value: float = 60, comparison_operator=operator.ge\n) -> float:\n \"\"\"\n\n Args:\n final_data: 场景运行整个过程 ego_vehicle 的所有数据,格式如下:\n {\n \"x\": [], location 的 x 方向值\n \"y\": [], location 的 y 方向值\n \"z\": [], location 的 z 方向值\n \"ttc\": [], 最小预期碰撞用时,自车与障碍物之间的距离除以相对速度得到TTC (Time to collision),取最小值,如果不存在前车,则为 None\n \"thw\": [], 最小车头时距,两车车距 /本车的车速得到 THW (Time headway),取最小值,如果不存在前车,则为 None。\n \"yaw\": [], 偏航角度,单位弧度\n \"roll\": [], 滚转角度,单位弧度\n \"pitch\": [], 俯仰角度,单位弧度\n \"jerk\": [], 加速度变化率\n \"jerk_x\": [], 加速度变化率 x 方向值\n \"jerk_y\": [], 加速度变化率 y 方向值\n \"jerk_z\": [], 加速度变化率 z 方向值\n \"brake\": [], 刹车 [0.0, 1.0] 之间取值\n \"steer\": [], 方向 [-1.0, 1.0] 之间取值\n \"throttle\": [], 油门 [0.0, 1.0] 之间取值\n \"game_time\": [], 仿真时间,单位 s\n \"velocity\": [], 车辆速度,单位 m/s\n \"velocity_x\": [], 车辆速度 x 方向值\n \"velocity_y\": [], 车辆速度 y 方向值\n \"velocity_z\": [], 车辆速度 z 方向值\n \"acceleration\": [], 车辆加速度,单位 m/s^2\n \"acceleration_x\": [], 车辆加速度 x 方向值\n \"acceleration_y\": [], 车辆加速度 y 方向值\n \"acceleration_z\": [], 车辆加速度 z 方向值\n \"relative_distance\": [], 相对前车距离,如果不存在前车,则为None\n \"relative_velocity\": [], 相对前车速度,如果不存在前车,则为None\n \"front_vehicles_count\": [], 前车数量\n }\n\n success_value: 该指标的期望成功值\n comparison_operator: 比较操作符,可选择的值类型有\n operator.gt: 表示大于 \"greaterThan\"\n operator.lt: 表示小于 \"lessThan\"\n operator.eq: 表示等于 \"equalTo\"\n operator.ge: 表示大于等于 \"greaterOrEqual\"\n operator.le: 表示小于等于 \"lessOrEqual\"\n operator.ne: 表示不等于 \"notEqualTo\"\n\n Returns:\n float: 指标得分,[0, 100] 之间的浮点型数据\n \"\"\"\n V_LOW_LB = 5\n THW_MIN_LB = 1.0\n THW_STABLE_LB = 1.5\n THW_STABLE_UB = 2.2\n MEAN_DEACC_MAX_UB = 3.0\n MEAN_JERK_MAX_UB = 2.5\n ACC_MAX_UB = 2.0\n\n # 假设1:第一个大于 ASSUMPTION_1_QUANTILE 的速度后开始开启ACC\n ASSUMPTION_1 = True\n ASSUMPTION_1_QUANTILE = 20\n\n acc_starting_idx = 0\n data_length = len(final_data[\"velocity\"])\n\n if ASSUMPTION_1:\n # 获得速度的百分位数\n velocity = final_data[\"velocity\"]\n velocity_percentile = np.percentile(velocity, ASSUMPTION_1_QUANTILE)\n\n for i in range(data_length):\n if velocity[i] >= velocity_percentile:\n acc_starting_idx = i\n break\n\n score = 0\n\n thw = final_data[\"thw\"][acc_starting_idx:]\n velocity = final_data[\"velocity\"][acc_starting_idx:]\n accelration_x = final_data[\"acceleration_x\"][acc_starting_idx:]\n accelration = final_data[\"acceleration\"][acc_starting_idx:]\n jerk = final_data[\"jerk\"][acc_starting_idx:]\n\n # τ_min≥1 & 稳态跟车时距在1.5~2.2s\n for idx, val in enumerate(velocity):\n if val >= V_LOW_LB:\n if thw[idx] is not None and (\n thw[idx] < THW_STABLE_LB or thw[idx] > THW_STABLE_UB\n ):\n # print(f\"ACC_Evaluation: thw(={thw[idx]}) is not in the range of [1.5, 2.2]\")\n return score + 1\n else:\n # ACC进行正向加速操作的前提是车速大于V_LOW\n if accelration_x[idx] > 0:\n # print(f\"ACC_Evaluation: acceleration_x(={accelration_x[idx]}) is not less or equal than 0\")\n return score + 2\n if thw[idx] is not None and thw[idx] < THW_MIN_LB:\n # print(f\"ACC_Evaluation: thw(={thw[idx]}) is less than 1\")\n return score + 3\n\n score += 10\n\n # accerlation 以两秒为长度采样求均值\n game_time = final_data[\"game_time\"][acc_starting_idx:]\n j = 0\n k = 0\n mean_accerlation = 0\n mean_jerk = 0\n for i, val in enumerate(game_time):\n while j < len(game_time) and game_time[j] < val + 2:\n j += 1\n while k < len(game_time) and game_time[k] < val + 1:\n k += 1\n\n if j != len(game_time):\n # 选出i到j之间加速度为负的数据,并求平均\n mean_accerlation = []\n for l1 in range(i, j):\n if accelration[k] < 0:\n mean_accerlation.append(accelration[l1])\n if len(mean_accerlation) != 0:\n mean_accerlation = sum(mean_accerlation) / len(mean_accerlation)\n\n if k != len(game_time):\n # 选出i到k之间减速度变化率为负的数据,并求平均\n mean_jerk = []\n for l2 in range(i, k):\n if jerk[k] < 0:\n mean_jerk.append(jerk[l2])\n if len(mean_jerk) != 0:\n mean_jerk = sum(mean_jerk) / len(mean_jerk)\n\n # 平均减速度不大于3.0m/s^2,按2s采样\n if mean_accerlation < 0 and mean_accerlation < -MEAN_DEACC_MAX_UB:\n # print(f\"ACC_Evaluation: mean_accerlation(={mean_accerlation}) is less than -3.0\")\n return score + 1\n\n # 平均减速度变化率不大于2.5m/s^3,按1s采样\n if mean_jerk < 0 and mean_jerk < -MEAN_JERK_MAX_UB:\n # print(f\"ACC_Evaluation: mean_jerk(={mean_jerk}) is less than -2.5\")\n return score + 2\n\n # 加速度不大于2.0m/s^2\n if accelration_x[i] > ACC_MAX_UB:\n # print(f\"ACC_Evaluation: acceleration_x(={accelration_x[i]}) is greater than 2.0\")\n return score + 3\n\n # 弯道时的情况需要知道道路曲率,无法计算\n\n score = success_value\n\n if comparison_operator(score, success_value):\n score = 100\n return score\n"
}
示例代码
Shell
JavaScript
Java
Swift
Go
PHP
Python
HTTP
C
C#
Objective-C
Ruby
OCaml
Dart
R
请求示例请求示例
Shell
JavaScript
Java
Swift
curl --location --request POST '/evaluates/customer_criteria' \
--header 'Authorization: bearer {{token}}' \
--header 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "script_20240819_616",
"name_en": "script_20240819_616",
"desc": "test",
"desc_en": "test",
"script_content": "#!/usr/bin/env python\nimport operator\nimport numpy as np\n\n\n# ACC评估指标\n# 参考:GB/T 20608-2006 智能运输系统 自适应巡航控制系统 性能要求与检测方法\ndef ACC_Evaluation(\n final_data: dict = {}, success_value: float = 60, comparison_operator=operator.ge\n) -> float:\n \"\"\"\n\n Args:\n final_data: 场景运行整个过程 ego_vehicle 的所有数据,格式如下:\n {\n \"x\": [], location 的 x 方向值\n \"y\": [], location 的 y 方向值\n \"z\": [], location 的 z 方向值\n \"ttc\": [], 最小预期碰撞用时,自车与障碍物之间的距离除以相对速度得到TTC (Time to collision),取最小值,如果不存在前车,则为 None\n \"thw\": [], 最小车头时距,两车车距 /本车的车速得到 THW (Time headway),取最小值,如果不存在前车,则为 None。\n \"yaw\": [], 偏航角度,单位弧度\n \"roll\": [], 滚转角度,单位弧度\n \"pitch\": [], 俯仰角度,单位弧度\n \"jerk\": [], 加速度变化率\n \"jerk_x\": [], 加速度变化率 x 方向值\n \"jerk_y\": [], 加速度变化率 y 方向值\n \"jerk_z\": [], 加速度变化率 z 方向值\n \"brake\": [], 刹车 [0.0, 1.0] 之间取值\n \"steer\": [], 方向 [-1.0, 1.0] 之间取值\n \"throttle\": [], 油门 [0.0, 1.0] 之间取值\n \"game_time\": [], 仿真时间,单位 s\n \"velocity\": [], 车辆速度,单位 m/s\n \"velocity_x\": [], 车辆速度 x 方向值\n \"velocity_y\": [], 车辆速度 y 方向值\n \"velocity_z\": [], 车辆速度 z 方向值\n \"acceleration\": [], 车辆加速度,单位 m/s^2\n \"acceleration_x\": [], 车辆加速度 x 方向值\n \"acceleration_y\": [], 车辆加速度 y 方向值\n \"acceleration_z\": [], 车辆加速度 z 方向值\n \"relative_distance\": [], 相对前车距离,如果不存在前车,则为None\n \"relative_velocity\": [], 相对前车速度,如果不存在前车,则为None\n \"front_vehicles_count\": [], 前车数量\n }\n\n success_value: 该指标的期望成功值\n comparison_operator: 比较操作符,可选择的值类型有\n operator.gt: 表示大于 \"greaterThan\"\n operator.lt: 表示小于 \"lessThan\"\n operator.eq: 表示等于 \"equalTo\"\n operator.ge: 表示大于等于 \"greaterOrEqual\"\n operator.le: 表示小于等于 \"lessOrEqual\"\n operator.ne: 表示不等于 \"notEqualTo\"\n\n Returns:\n float: 指标得分,[0, 100] 之间的浮点型数据\n \"\"\"\n V_LOW_LB = 5\n THW_MIN_LB = 1.0\n THW_STABLE_LB = 1.5\n THW_STABLE_UB = 2.2\n MEAN_DEACC_MAX_UB = 3.0\n MEAN_JERK_MAX_UB = 2.5\n ACC_MAX_UB = 2.0\n\n # 假设1:第一个大于 ASSUMPTION_1_QUANTILE 的速度后开始开启ACC\n ASSUMPTION_1 = True\n ASSUMPTION_1_QUANTILE = 20\n\n acc_starting_idx = 0\n data_length = len(final_data[\"velocity\"])\n\n if ASSUMPTION_1:\n # 获得速度的百分位数\n velocity = final_data[\"velocity\"]\n velocity_percentile = np.percentile(velocity, ASSUMPTION_1_QUANTILE)\n\n for i in range(data_length):\n if velocity[i] >= velocity_percentile:\n acc_starting_idx = i\n break\n\n score = 0\n\n thw = final_data[\"thw\"][acc_starting_idx:]\n velocity = final_data[\"velocity\"][acc_starting_idx:]\n accelration_x = final_data[\"acceleration_x\"][acc_starting_idx:]\n accelration = final_data[\"acceleration\"][acc_starting_idx:]\n jerk = final_data[\"jerk\"][acc_starting_idx:]\n\n # τ_min≥1 & 稳态跟车时距在1.5~2.2s\n for idx, val in enumerate(velocity):\n if val >= V_LOW_LB:\n if thw[idx] is not None and (\n thw[idx] < THW_STABLE_LB or thw[idx] > THW_STABLE_UB\n ):\n # print(f\"ACC_Evaluation: thw(={thw[idx]}) is not in the range of [1.5, 2.2]\")\n return score + 1\n else:\n # ACC进行正向加速操作的前提是车速大于V_LOW\n if accelration_x[idx] > 0:\n # print(f\"ACC_Evaluation: acceleration_x(={accelration_x[idx]}) is not less or equal than 0\")\n return score + 2\n if thw[idx] is not None and thw[idx] < THW_MIN_LB:\n # print(f\"ACC_Evaluation: thw(={thw[idx]}) is less than 1\")\n return score + 3\n\n score += 10\n\n # accerlation 以两秒为长度采样求均值\n game_time = final_data[\"game_time\"][acc_starting_idx:]\n j = 0\n k = 0\n mean_accerlation = 0\n mean_jerk = 0\n for i, val in enumerate(game_time):\n while j < len(game_time) and game_time[j] < val + 2:\n j += 1\n while k < len(game_time) and game_time[k] < val + 1:\n k += 1\n\n if j != len(game_time):\n # 选出i到j之间加速度为负的数据,并求平均\n mean_accerlation = []\n for l1 in range(i, j):\n if accelration[k] < 0:\n mean_accerlation.append(accelration[l1])\n if len(mean_accerlation) != 0:\n mean_accerlation = sum(mean_accerlation) / len(mean_accerlation)\n\n if k != len(game_time):\n # 选出i到k之间减速度变化率为负的数据,并求平均\n mean_jerk = []\n for l2 in range(i, k):\n if jerk[k] < 0:\n mean_jerk.append(jerk[l2])\n if len(mean_jerk) != 0:\n mean_jerk = sum(mean_jerk) / len(mean_jerk)\n\n # 平均减速度不大于3.0m/s^2,按2s采样\n if mean_accerlation < 0 and mean_accerlation < -MEAN_DEACC_MAX_UB:\n # print(f\"ACC_Evaluation: mean_accerlation(={mean_accerlation}) is less than -3.0\")\n return score + 1\n\n # 平均减速度变化率不大于2.5m/s^3,按1s采样\n if mean_jerk < 0 and mean_jerk < -MEAN_JERK_MAX_UB:\n # print(f\"ACC_Evaluation: mean_jerk(={mean_jerk}) is less than -2.5\")\n return score + 2\n\n # 加速度不大于2.0m/s^2\n if accelration_x[i] > ACC_MAX_UB:\n # print(f\"ACC_Evaluation: acceleration_x(={accelration_x[i]}) is greater than 2.0\")\n return score + 3\n\n # 弯道时的情况需要知道道路曲率,无法计算\n\n score = success_value\n\n if comparison_operator(score, success_value):\n score = 100\n return score\n"
}'
返回响应
🟢200成功
application/json
Body
object {0}
示例
{
"code": 200,
"result": {
"user_id": 1,
"desc": "test",
"company_id": 1,
"modified_at": "2024-08-21T15:29:43.286782+08:00",
"created_at": "2024-08-21T15:29:43.286765+08:00",
"invalid": 0,
"name": "script_20240819_616",
"script_path": "./oasis_data/server/evaluation_criteria/customer_scripts/1/script_20240819_616.py",
"system_data": false,
"name_en": "script_20240819_616",
"desc_en": "test",
"id": 12
},
"message": ""
}
修改于 2024-11-08 09:34:25