端到端 pluto 之数据预处理
文章目录
- 前言
- 一、预处理代码解析
- 1.1、接口调用
- 1.2、预处理
- 二、nuplan数据解析
- <font color=#87C1FA>2.1、nuplan 感知信息
- <font color=#87C1FA>2.2、nuplan 地图信息
- 三、后记
前言
- Pluto是两段式端到端的Planner模型。代码目录:https://github.com/jchengai/pluto
- 代码调用 nuplan 公开数据集, 且与 nuplan 数据集深度藕合。
nuplan 数据集: https://www.nuscenes.org/nuplan
nuplan 数据处理库: https://github.com/motional/nuplan-devkit
一、预处理代码解析
1.1、接口调用
- get_features_from_scenario: 用于训练, 包含历史与未来数据。
- get_features_from_simulatio: 用于仿真,不包含未来数据。
- 两者都会调用 _build_feature 函数,预处理函数主要函数
1.2、预处理
- data[“current_state”] 获取当前 ego 的状态向量
- _get_ego_current_state 函数实现 [x, y, heading, v, a, steering_angle, yaw_rate]
- calculate_additional_ego_states。如果是仿真模式则直接获取,否则通过上一帧与当前帧计算。yaw_rate: df_yaw / dt , steering_angle (转向角):arctan(yaw_rate * 轴距) / v
- data[“agent”] agent特征(包含ego)动态物体
- ego_features _get_ego_features 实现
position T,2 ——(x, y)世界位置 最后会做归一化 也可以输入时做归一化
heading T
velocity T,2 —— (vx, vy)
acceleration T,2 ——(ax, ay)只有ego才会有 acceleration
shape T,2 ——(w,h)
category 1 ——(类型)
valid_mask T- _get_agent_features 获取 最后会把ego也放到agent里
position T,2
heading T
velocity T,2
shape T,2 ——(w,h)
category 1 —— (类型)
valid_mask T
- data[“static_objects”] 静态物体
- _get_agent_features 获取 不需要速度
position T,2
heading T
shape T,2 ——(w,h)
category 1 —— (类型)
valid_mask T
- data[“map”] 车道线信息
- _get_map_features 获取 M lane个数 P 每条线采样点数(设置为20)
“point_position”: point_position, M * 3 * P * 2 —— 3 左 中 右三条线 2 (x,y)
“point_vector”: point_vector, (M, 3, P, 2) —— 每条线中的后一个点减前一个点
“point_orientation”: point_orientation, (M, 3, P) ——point_vector计算atan2(dy,dx)
“point_side”: point_side, (M, 3) ——[0,1,2]
“polygon_center”: polygon_center, (M, 3) —— 中心线的点(x0,y0)与point_orientation中心线的atan2拼接 (x0,y0,yaw0)
“polygon_position”: polygon_position, (M, 2) —— 中心线第一个点 edges(x0,y0)
“polygon_orientation”: polygon_orientation, (M,) —— point_orientation(0,0)
“polygon_type”: polygon_type, (M,) —— 三类中的一类[lane, lane_connector, crosswalk]
“polygon_on_route”: polygon_on_route, (M,) —— 当前lane所在的road是否在route_ids 路由
“polygon_tl_status”: polygon_tl_status, (M,) —— 当前车道是否绑定红绿灯 nuplan只有lane_connector绑定红绿灯
“polygon_has_speed_limit”: polygon_has_speed_limit, (M,) —— 是否有限速
“polygon_speed_limit”: polygon_speed_limit, (M,) —— 有限速则填限速 m/s 没有则0
“polygon_road_block_id”: polygon_road_block_id,(M,) —— lane.get_roadblock_id() 所属road的id 一个road会包含多个lane。
- data[“agent_tokens”] 排序后的agent id (ego默认放最前)
- data[“reference_line”] 参考线或者叫候选线,通俗理解 认为当前 120m内 导航出来的几条路线。如果车道线不分岔,则默认就是一条,比直走。
- _get_reference_line_feature —— N_ref 候选线 如果lane分岔多则多 一般为4-5条 N_pts 线分多少个点 默认为100 可配置。
“position”: position, (N_ref, N_pts, 2)
“vector”: vector, (N_ref, N_pts, 2)
“orientation”: orientation, (N_ref, N_pts)
“valid_mask”: valid_mask, (N_ref, N_pts)
“future_projection”: future_projection, (N_ref, 8, 2)
7.PlutoFeature.normalize 归一化data 把ego第一个时刻 点的位姿转成原点
二、nuplan数据解析
pluto 是读取的 nuplan 数据,且藕合很深。我们先了解下 nuplan 数据。
2.1、nuplan 感知信息
nuplan 数据集,以 mini 数据集一个 2021.05.12.22.00.38_veh-35_01008_01518.db 文件(database数据库)为例。
通过 token 连接表,构成一个 db (200M - 300M) 文件。文件不包含地图信息,一个 db 文件可以分为多个scenario (15s)场景片段。
表头 | 内容描述 |
---|---|
camera size: 8 | token:主键 (一串字母) channel: 相机名称 如CAM_L1intrinsic等: 相机内参、外参、畸变系数等 Width:1920 height:1080 |
category size: 7 | token:主键 (一串字母) name:枚举的类别(vehicle等) |
ego_pose size:51152 | token:主键 (一串字母) timestamp:时间戳 x,y,z:world坐标系 Qw,qx,qy,qz: 四元数 vx,vy,vz:速度 acceleration_x,acc_y,acc_z:加速度 angular_rate_x,y,z: epsg: 32648 表示 WGS84 地理基准下的 UTM 第 48 北区 (可以确定是使用新加坡地图) |
image size:40800 图像帧索引 | token:主键 (一串字母) next_token: 下一个token 下一帧的token 没有则NuLL prev_token: 上一个token 上一帧的token ego_pose_token: 对应的ego_pose token camera_token: cmaer的token (有多个相机) filename_jpg: pg文件路径 angular_rate_x,y,z: timestamp: 时间戳 |
lidar size:1 | token:主键 (一串字母) Model: lidar型号 Translation 等:内外参 |
lidar_box size: 1 281 000 | token:主键 (一串字母) lidar_pc_token: 对应的点云 token track_token: track 的 token 有类别信息 next_token:下一个token 下一帧的token 没有则NuLL prev_token: 上一个token 上一帧的token x, y , z : 世界坐标系 width、length、height : 长宽高 vx、vy、vz:速度 yaw: yaw角(弧度) confidence: 置信度 |
lidar_pc size:10200 激光雷达点云帧索引 | token:主键 (一串字母) next_token:下一个token 下一帧的token 没有则NuLL prev_token: 上一个token 上一帧的token lidar_token: 什么雷达采集的 scene_token: 场景token 什么场景 filename: 文件路径 timestamp: 时间戳 |
Log size:1 log 文件路径地址 | token:主键 (一串字母) vehicle_name: 车型号 date: 日期 timestamp: 时间戳 logfile: 路径 |
scenario_tag size: 13812 对场景打标签 | token:主键 (一串字母) lidar_pc_token: 对应的激光点云 token type:场景标签 low_magnitude_speed、high_magnitude_speed、stationary_in_traffic等 |
scene size: 26 划分场景 | token:主键 (一串字母) log_token: log token name: 场景name 如 scene-0009、scene-0014等 goal_ego_pose_token: ego的token roadblock_ids: 该场景会通过的 road id (规划的路由) |
track size: 6460 一个目标id只记录一次 | token:主键 (一串字母) category_token: 属于什么类别 width、length、height:长、宽、高 |
traffic_light_status size: 96994 红绿灯 状态 | token:主键 (一串字母) lidar_pc_token: 对应的激光点云 token lane_connector_id: lane_connector 的 lane id status: 红绿灯状态 |
2.2、nuplan 地图信息
nuplan地图是 .gpkg 文件,根据上述 db 文件,可以知道此场景选用的是 sg-one-north (新加坡)地图。查看.gpkg文件 需要QGIS 软件查看。
QGIS 软件安装
sudo apt update
wget -qO - https://qgis.org/downloads/qgis-archive-keyring.gpg | sudo tee /usr/share/keyrings/qgis-archive-keyring.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/qgis-archive-keyring.gpg] https://qgis.org/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/qgis.list
sudo apt install qgis qgis-plugin-grass
https://blog.csdn.net/hhy321/article/details/136437615 QGIS安装和入门使用
三、后记
关于数据这部分就分享到这,如何用自己数据替换nuplan数据,下期分享。