当前位置: 首页 > ai >正文

端到端 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、预处理

  1. 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
  1. 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
  1. data[“static_objects”] 静态物体
  • _get_agent_features 获取 不需要速度
    position T,2
    heading T
    shape T,2 ——(w,h)
    category 1 —— (类型)
    valid_mask T
  1. 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。
  1. data[“agent_tokens”] 排序后的agent id (ego默认放最前)
  2. 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数据,下期分享。

http://www.xdnf.cn/news/14732.html

相关文章:

  • js代码09
  • 飞算JavaAI—AI编程助手 | 编程领域的‘高科技指南针’,精准导航开发!
  • 边缘人工智能与医疗AI融合发展路径:技术融合与应用前景(下)
  • 计算机网络第一章——计算机网络体系结构
  • PHP安装使用教程
  • 华为云Flexus+DeepSeek征文|​​华为云ModelArts Studio大模型 + WPS:AI智能PPT生成解决方案​
  • 设计模式-观察者模式(发布订阅模式)
  • 如何让宿主机完全看不到Wi-Fi?虚拟机独立联网隐匿上网实战!
  • 百度文心大模型4.5系列正式开源,开源会给百度带来什么?
  • 华为云Flexus+DeepSeek征文 | ​​华为云ModelArts Studio大模型与企业AI会议纪要场景的对接方案
  • 深度学习04 卷积神经网络CNN
  • Spring 依赖注入:官方推荐方式及最佳实践
  • 2025年6月个人工作生活总结
  • 论文中用matplotlib画的图,如何保持大小一致。
  • 【智能体系统AgentOS】核心十:A2A工具
  • 2025 湖南大学程序设计竞赛(补题)
  • 跨主机用 Docker Compose 部署 PostgreSQL + PostGIS 主从
  • C++ 第四阶段 STL 容器 - 第五讲:详解 std::set 与 std::unordered_set
  • [JS逆向] 喜马拉雅登录案例
  • [面试] js手写题-树转数组
  • Objective-c把字符解析成字典
  • C语言常用转换函数实现原理
  • Docker 入门教程(九):容器网络与通信机制
  • React-Find 一款能快速在网页定位到源码的工具,支持React19.x/next 15
  • 【AI时代速通QT】第四节:Windows下Qt Creator调试指南
  • 【c/c++3】类和对象,vector容器,类继承和多态,systemd,stdboost
  • 「Java案例」输出24个希腊字母
  • 双指针的用法
  • Vue 3 Teleport 特性
  • 人工智能之数学基础:如何判断正定矩阵和负定矩阵?