Flow-Planner代码阅读(2):数据加载

一、数据加载 dataset

代码在flow_planner/data/dataset/nuplan.py中,类名NuPlanDataset(),通过__getitem__()函数随机获取某一帧数据。

def__getitem__(self,idx)->NuPlanDataSample:data=np.load(os.path.join(self.data_dir,self.data_list[idx]))#加载数据ego_agent_past=torch.from_numpy(data['ego_agent_past'])# 历史时刻信息 [21,14]ego_current_state=torch.from_numpy(data['ego_current_state'])#当前时刻状态[16]ego_agent_future=torch.from_numpy(data['ego_agent_future']).to(torch.float32)#未来时刻信息[80,3]neighbor_agents_past=torch.from_numpy(data['neighbor_agents_past'][:self._past_neighbor_num])#agent历史时刻信息[32,21,11]neighbor_agents_future=torch.from_numpy(data['neighbor_agents_future'][:self._predicted_neighbor_num])#flow_planner里面设置为0neighbor_future_observed=torch.from_numpy(data['neighbor_agents_future'])#agent未来时刻信息,[32,80,3]lanes=torch.from_numpy(data['lanes'])#车道线信息 [70,20,12]lanes_speed_limit=torch.from_numpy(data['lanes_speed_limit'])#车道限速[70,1]lanes_has_speed_limit=torch.from_numpy(data['lanes_has_speed_limit'])#车道是否限速[70,1]route_lanes=torch.from_numpy(data['route_lanes'])#route所在车道信息 [25,20,12]route_lanes_speed_limit=torch.from_numpy(data['route_lanes_speed_limit'])# route所在车道限速[25,1]route_lanes_has_speed_limit=torch.from_numpy(data['route_lanes_has_speed_limit'])#route所在车道是否有限速[25,1static_objects=torch.from_numpy(data['static_objects'])#静态目标信息,[5,10]

二、数据增强

2.1、自车状态扰动

defaugment(self,data):# Only aug current stateself._device=data.ego_current.device self.move_to(self._device)ego_current_state=data.ego_current.clone()#自车状态,[batch_size,16],分别是B=ego_current_state.shape[0]#batchsize#以30%概率做自车扰动,自车速度小于2m/s的不做自车扰动aug_flag=(torch.rand(B)<=self._augment_prob).bool().to(self._device)&~(abs(ego_current_state[:,4])<2.0)#自车每个状态的扰动范围,在[low,high]范围内随机取值random_tensor=torch.rand(B,len(self._low)).to(self._device)scaled_random_tensor=self._low+(self._high-self._low)*random_tensor new_state=torch.zeros((B,9),dtype=torch.float32).to(self._device)new_state[:,3:]=ego_current_state[:,4:10]# x, y, h is 0 because of ego-centric, update vx, vy, ax, ay, steering angle, yaw ratenew_state=new_state+scaled_random_tensor#添加扰动值new_state[:,3]=torch.max(new_state[:,3],torch.tensor(0.0,device=new_state.device))#自车纵向速度不能为负,禁止倒车new_state[:,-1]=torch.clip(new_state[:,-1],-0.85,0.85)#最后一维是 yaw rate#替换扰动后的自车状态ego_current_state[:,:2]=new_state[:,:2]ego_current_state[:,2]=torch.cos(new_state[:,2])ego_current_state[:,3]=torch.sin(new_state[:,2])ego_current_state[:,4:8]=new_state[:,3:7]ego_current_state[:,8:10]=new_state[:,-2:]# steering angle, yaw rate# 重新计算steer和yaw ratecur_velocity=ego_current_state[:,4]yaw_rate=ego_current_state[:,9]steering_angle=torch.zeros_like(cur_velocity)new_yaw_rate=torch.zeros_like(yaw_rate)mask=torch.abs(cur_velocity)<0.2not_mask=~mask steering_angle[not_mask]=torch.atan(yaw_rate[not_mask]*self._wheel_base/torch.abs(cur_velocity[not_mask]))steering_angle[not_mask]=torch.clamp(steering_angle[not_mask],-2/3*np.pi,2/3*np.pi)new_yaw_rate[not_mask]=yaw_rate[not_mask]ego_current_state[:,8]=steering_angle ego_current_state[:,9]=new_yaw_ratereturnaug_flag,ego_current_state

2.2、自车未来轨迹插值

由于自车状态做了扰动,自车当前的位置、heading等信息和自车未来下一个时刻的状态就可能会不符合运动学约束,refine_future_trajectory()函数以扰动后的自车状态为起始点,对未来20个时刻的自车状态进行插值,剩余60个不变,这样既可以在短时间内符合运动学约束,在长时间内保证模型学习的真值趋势不变。

defrefine_future_trajectory(self,aug_current_state,ego_future):""" refine future trajectory with quintic spline interpolation Args: aug_current_state: (B, 16) current state of the ego vehicle after augmentation ego_future: (B, 80, 3) future trajectory of the ego vehicle Returns: ego_future: refined future trajectory of the ego vehicle with velocity and acceleration """#利用当前增强后的自车状态 + 第 P 个未来点作为终端约束,用五次样条插值细化未来轨迹的前 P 个点,保证位置、速度、加速度连续P=self.num_refine#需要插值的20个点dt=self.time_interval#0.1s,100ms,对应10hzT=self.refine_horizon B=aug_current_state.shape[0]M_t=self.t_matrix.unsqueeze(0).expand(B,-1,-1)#时间基矩阵(t⁰~t⁵)A=self.coeff_matrix.unsqueeze(0).expand(B,-1,-1)#五次多项式边界条件 → 系数矩阵device=ego_future.device# 解析当前状态(起点约束) 包括: [x, y, heading, velocity, acceleration, yaw_rate]x0,y0,theta0,v0,a0,omega0=(aug_current_state[:,0],aug_current_state[:,1],torch.atan2((ego_future[:,int(P/2),1]-aug_current_state[:,1]),(ego_future[:,int(P/2),0]-aug_current_state[:,0])),torch.norm(aug_current_state[:,4:6],dim=-1),torch.norm(aug_current_state[:,6:8],dim=-1),aug_current_state[:,9])#解析终点状态(第 P 个点,P=20)xT,yT,thetaT,vT,aT,omegaT=(ego_future[:,P,0],ego_future[:,P,1],ego_future[:,P,2],torch.norm(ego_future[:,P,:2]-ego_future[:,P-1,:2],dim=-1)/dt,torch.norm(ego_future[:,P,:2]-2*ego_future[:,P-1,:2]+ego_future[:,P-2,:2],dim=-1)/dt**2,self.normalize_angle(ego_future[:,P,2]-ego_future[:,P-1,2])/dt)# 构造五次多项式边界条件(x 方向)sx=torch.stack([x0,v0*torch.cos(theta0),a0*torch.cos(theta0)-v0*torch.sin(theta0)*omega0,xT,vT*torch.cos(thetaT),aT*torch.cos(thetaT)-vT*torch.sin(thetaT)*omegaT],dim=-1)#构造五次多项式边界条件(y 方向)sy=torch.stack([y0,v0*torch.sin(theta0),a0*torch.sin(theta0)+v0*torch.cos(theta0)*omega0,yT,vT*torch.sin(thetaT),aT*torch.sin(thetaT)+vT*torch.cos(thetaT)*omegaT],dim=-1)ax=A @ sx[:,:,None].to(torch.float32)ay=A @ sy[:,:,None].to(torch.float32)# 轨迹插值(位置)traj_x=M_t @ ax traj_y=M_t @ ay# 根据速度方向计算航向角traj_heading=torch.cat([torch.atan2(traj_y[:,:1,0]-y0.unsqueeze(-1),traj_x[:,:1,0]-x0.unsqueeze(-1)),torch.atan2(traj_y[:,1:,0]-traj_y[:,:-1,0],traj_x[:,1:,0]-traj_x[:,:-1,0])],dim=1)returntorch.concatenate([torch.cat([traj_x,traj_y,traj_heading[...,None]],axis=-1),ego_future[:,P+1:,:3]],axis=1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1160096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四策略融合改进SSA优化BP神经网络分类预测(MISSA-BP) 改进点文献 目前相关分类文章...

四策略融合改进SSA优化BP神经网络分类预测(MISSA-BP) 改进点文献 目前相关分类文章数量中外都不是很多 改进创新足&#xff0c;抓紧入手抓紧发个人感觉英文开源中文核心都不是问题 改进点&#xff1a;中文注释清晰 融合spm映射、自适应-正余弦算法、levy机制、步长因子动态调整…

数据服务开源-SqlRest 1.6 idea中启动 (pg版)

核心参考mysql版部署:SqlRest数据服务项目基于Idea开发环境搭建https://blog.csdn.net/wen811651208/article/details/156546012 主要的修改点在于 环境变量中的数据库类型 和 连接参数。由于 SqlRest 是一个通用的数据服务中间件&#xff0c;切换数据库通常只需要修改对应的连…

ACO-KELM回归预测MATLAB代码:基于电厂运行数据的优化与实现

ACO蚁群算法优化KELM核极限学习机&#xff08;ACO-KELM&#xff09;回归预测MATLAB代码 代码注释清楚。 main为主程序&#xff0c;可以读取EXCEL数据。 很方便&#xff0c;容易上手。 &#xff08;电厂运行数据为例&#xff09;老铁们今天带大家玩点硬核的——用蚂蚁找食物的…

2026年,我们如何用AI提前看见未来?脉脉「脉向AI」带来新思考

&#x1f4a1; 核心观点&#xff1a;在AI时代&#xff0c;真正的安全感不来自固守已有技能&#xff0c;而来自持续预判未来的能力。先一步看见未来的人&#xff0c;将掌握职业发展的主动权。 目录 &#x1f30a; 引言&#xff1a;站在AI浪潮的临界点上 &#x1f4ca; 一组扎心…

通信原理篇---多径效应

我们用“回声听不清说话”这个生活场景&#xff0c;来彻底讲懂多径效应。核心比喻&#xff1a;在山谷里喊话想象一下&#xff0c;你站在一个 有很多高大建筑物的山谷&#xff08;或一个大厅&#xff09; 里&#xff0c;对着远处的朋友喊一句话&#xff1a;“我们几点吃饭&#…

探索三相PWM整流器的双闭环控制实现

三相PWM整流器&#xff0c;采用双闭环控制&#xff0c;用C语言实现PI控制&#xff0c;SVPWM等模块。在电力电子领域&#xff0c;三相PWM整流器因其能够实现能量双向流动、单位功率因数运行等优点&#xff0c;应用愈发广泛。今天咱们就聊聊基于双闭环控制&#xff0c;并用C语言实…

基于三菱PLC和组态王恒温控制系统的设计:加热炉温度控制的梯形图程序、接线图原理图、IO分配及...

基于三菱PLC和组态王恒温控制系统的设计加热炉温度控制 带解释的梯形图程序&#xff0c;接线图原理图图纸&#xff0c;io分配&#xff0c;组态画面三伏天里给车间加热炉做恒温控制&#xff0c;那酸爽就跟抱着暖气片吃火锅似的。今天咱们来聊聊基于三菱FX3U PLC和组态王的温度控…

电能质量扰动识别,通过S变换对电能质量扰动(谐波,闪变,暂升等单一扰动和复合扰动)进行变换得到时频图

电能质量扰动识别&#xff0c;通过S变换对电能质量扰动&#xff08;谐波&#xff0c;闪变&#xff0c;暂升等单一扰动和复合扰动&#xff09;进行变换得到时频图&#xff0c;并对其进行特征提取&#xff0c;通过决策树对所提取的特征识别分类&#xff0c;达到对电能质量扰动的识…

基于MATLAB/Simulink的移相变压器仿真模型探索:Phase_Shift_T

Phase_Shift_T&#xff1a;基于MATLAB/Simulink的移相变压器仿真模型&#xff0c;可实现-25、-15……25的移相。 变压器副边实现36脉波不控整流&#xff0c;变压器网侧电压、阈侧电压以及移相角度可直接设置。 仿真条件&#xff1a;MATLAB/Simulink R2015b最近在研究电力系统相…

光伏并网发电系统MATLAB/Simulink仿真设计。 该仿真包括电池,BOOST升压电路...

光伏并网发电系统MATLAB/Simulink仿真设计。 该仿真包括电池&#xff0c;BOOST升压电路&#xff0c;单相全桥逆变电路&#xff0c;电压电流双闭环控制部分&#xff1b;应用MPPT技术&#xff0c;提高光伏发电的利用效率。 采用PI调节方式进行闭环控制&#xff0c;采用定步长扰动…

通信原理篇---频率选择性衰落:最大时延差,相关带宽

核心比喻&#xff1a;用“阅兵方阵”过“混乱之门” 想象一个阅兵方阵&#xff0c;它非常整齐&#xff1a; 士兵们肩并肩排成一条横排&#xff08;这代表信号的一个频率分量&#xff09;。 方阵以整齐的步伐向前迈进&#xff08;这代表信号在传输&#xff09;。 现在&#…

不平衡电压下的DSOGI - PLL锁相环C语言实现及STM32F407验证

锁相环纯代码&#xff08;C语言&#xff09;&#xff0c;不平衡电压下的锁相环&#xff0c;采用双二阶广义积分器&#xff08;DSOGI-PLL&#xff09;&#xff0c;整个系统由simulink中的s-function模块进行编写&#xff0c;采用C语言进行编写&#xff0c;包括整个系统离散化&am…

三边封制袋机程序 采用松下PLC和威纶通触摸屏 前后双伺服送料 屏幕485通讯控制温度 温控模...

三边封制袋机程序 采用松下PLC和威纶通触摸屏 前后双伺服送料 屏幕485通讯控制温度 温控模块常州汇邦 一分钟速度可达200张 中英文切换操作系统在用的设备上拷贝下来的&#xff0c;有触摸屏和PLC程序&#xff0c;没有注释最近在车间折腾一台老款三边封制袋机&#xff0c;…

计算机毕业设计springboot河北水利电力学院班级事务管理系统 基于SpringBoot的河北水电学院班级事务综合服务平台 SpringBoot驱动的河北水利电力学院班级事务数字化运营系统

计算机毕业设计springboot河北水利电力学院班级事务管理系统v2hb8j7q &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。高校班级日常事务琐碎、数据分散、流程不透明&#xff0c;纸…

欧姆龙CP1H与三菱E700变频器的“三角恋“攻略

欧姆龙CP1H与3台三菱E700变频器通讯程序 功能&#xff1a;程序&#xff0c;欧姆龙CP1H的CIF11通讯板&#xff0c;实现对3台三菱e700变频器 设定频率&#xff0c;读取实际频率&#xff0c;通讯稳定可靠。 后续可根据需要&#xff0c;按照同原理和结构扩展台数&#xff0c;非常灵…

计算机毕业设计springboot中国传统文化服饰交流平台 基于SpringBoot的华夏传统服饰文化互动社区 国风衣裳:SpringBoot驱动的中华传统服饰分享与交流平台

计算机毕业设计springboot中国传统文化服饰交流平台k79z52ic &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。当Z世代的衣柜被oversize与Y2K刷屏&#xff0c;马面裙、云肩、盘扣却…

Buffer内存管理实战技巧:从基础到高并发优化全攻略

文章目录1. Buffer内存管理核心基础{#buffer-basic}1.1 Buffer本质与内存分配特点1.2 关键分配机制&#xff1a;Slab与池化核心逻辑2. 通用Buffer内存管理实战技巧{#common-skills}2.1 内存池化&#xff1a;预分配与复用核心技巧2.1.1 自定义多层级Buffer池&#xff08;通用实现…

基于NMPC(非线性模型预测控制算法)轨迹跟踪与避障控制算法研究 仅供学习算法使用

基于NMPC&#xff08;非线性模型预测控制算法&#xff09;轨迹跟踪与避障控制算法研究 仅供学习算法使用 这段代码是一个用于无人车路径跟踪的程序。下面我将对程序进行详细的分析。首先&#xff0c;代码的前几行是一些初始化设置&#xff0c;包括清除变量、关闭警告、添加路径…

Win 家庭版远程桌面自由:RDP Wrapper 一招搞定

一、工具介绍 RDP Wrapper Library 是一款免费开源工具&#xff0c;核心作用是破解Windows家庭版对远程桌面&#xff08;RDP&#xff09;服务的限制&#xff0c;无需升级到专业版/企业版&#xff0c;即可让家庭版系统作为「RDP服务器」接受远程连接&#xff08;原生Windows家庭…