网联下自动驾驶生态驾驶车速控制论文_第1页
网联下自动驾驶生态驾驶车速控制论文_第2页
网联下自动驾驶生态驾驶车速控制论文_第3页
网联下自动驾驶生态驾驶车速控制论文_第4页
网联下自动驾驶生态驾驶车速控制论文_第5页
已阅读5页,还剩8页未读 继续免费阅读

网联下自动驾驶生态驾驶车速控制论文.docx 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于网联的信号交叉口下自动驾驶车辆生态驾驶车速控制策略主要方案随着我国经济的飞速发展,汽车工业取得巨大进步,汽车产销量连续蝉联世界第一。综上所述,汽车为人们带来极大便利的同时,产生的燃油消耗、污染物排放、交通拥堵等问题越来越突出,得到社会普遍关注。城市交叉口的信号灯是使车辆和行人有序通过路口的交通设备,对交通安全起重要作用,但同时也会对交通流产生影响,使车辆经常在信号口区域做出加速、减速、停车怠速等高油耗、高排放行为。随着通信技术的发展,车路及车车间的信息交互成为可能,车辆根据采集的信息采取适当的驾驶策略可以有效减少降低能耗排放、完善交通效率。

本文在剖析现有国内外生态驾驶速度控制策略基础上,介绍了信号交叉口速度引导问题,剖析了车联网平台的系统构建、关键技术和典型运用,自动驾驶的发展阶段、关键技术及存在的问题,提出生态驾驶掌控系统架构,对

本文掌控策略运行环境做出基本假设,剖析介绍了VISSIM交通仿真平台和MOVES排放模型。其次系统分析了信号交叉口生态驾驶车速控制策略原理,建立以车联网通信系统获取路网中车辆及信号灯相位配时信息,进行车辆依靠信号交叉口的控制场景划分,得出使车辆不停车依靠交叉口的速度轨迹掌控策略。剖析介绍了VT-Micro微观模型,运用VT-Micro范式对生态驾驶车辆通过交叉口的目标车速与油耗排放进行关联。以油耗、排放、交通效能为完善目标,以车辆不停车依靠交叉口为约束,运用模拟退火算法进行目标车速优化。构建生态驾驶策略在信号交叉口的交通运行及能耗排放估算仿真平台,进行基于模拟退火算法优化的生态驾驶速度控制策略的仿真验证。在分析多目标遗传算法的基础上,构建多目标遗传算法优化的信号交叉口生态驾驶速度掌控策略并进行仿真分析,仿真结果表明采用多目标遗传算法完善的掌控策略在交通效能和能耗排放指标上均优于采用模拟退火算法优化的控制策略,且控制路段长度及初始速度对策略实施效果具有较大影响。分析交通流中其他车辆对受控车辆产生的影响,提出基于交通流状态信息的车辆掌控场景划分及目标车速优化方法,建立了基于交通流完善的控制策略。需要指出的是,对不同生态驾驶速度掌控策略、控制策略渗透率及道路饱和度场景运行仿真分析。绩效表明考虑交通流的控制策略在各场景下均有良好效果,未考虑交通流的掌控策略仅在部分场景能获得收益;且算法渗透率越高生态驾驶策略实施效果越好。最后基于不同生态驾驶速度控制策略下车辆通过信号交叉口的速度轨迹在底盘测功机上完成台架试验。实验结果表明,

本文提出的生态驾驶速度掌控策略具有较好节能减排效果。基于此,

本文构建的信号交叉口生态驾驶速度掌控策略在未来有人驾驶和自动驾驶混行场景中可以有效降低能耗排放,提升交通效率。✅简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。

✅具体问题可以联系QQ或者微信:30040983。仿真代码importnumpyasnp

fromsklearn.ensembleimportRandomForestRegressor

fromsklearn.preprocessingimportStandardScaler

importpandasaspd

classQueueLengthPredictor:

def__init__(self):

self.model=RandomForestRegressor(n_estimators=100,max_depth=10,random_state=42)

self.scaler=StandardScaler()

self.history_window=12

defgenerate_synthetic_data(self,num_samples=5000):

time_of_day=np.random.randint(0,24,num_samples)

day_of_week=np.random.randint(0,7,num_samples)

weather=np.random.choice([0,1,2],num_samples,p=[0.7,0.2,0.1])

green_time=np.random.randint(20,80,num_samples)

cycle_length=np.random.randint(60,150,num_samples)

arrival_rate=np.random.randint(200,800,num_samples)

historical_queues=[]

foriinrange(self.history_window):

historical_queues.append(np.random.randint(0,50,num_samples))

features=np.column_stack([

time_of_day,day_of_week,weather,

green_time,cycle_length,arrival_rate

]+historical_queues)

base_queue=(arrival_rate*(cycle_length-green_time))/3600

time_factor=1+0.3*np.sin(2*np.pi*time_of_day/24)

weather_factor=1+weather*0.15

queue_length=base_queue*time_factor*weather_factor

queue_length+=np.random.normal(0,5,num_samples)

queue_length=np.maximum(queue_length,0)

returnfeatures,queue_length

deftrain(self,X,y):

X_scaled=self.scaler.fit_transform(X)

self.model.fit(X_scaled,y)

defpredict(self,X):

X_scaled=self.scaler.transform(X)

returnself.model.predict(X_scaled)

defevaluate(self,X_test,y_test):

predictions=self.predict(X_test)

mae=np.mean(np.abs(predictions-y_test))

rmse=np.sqrt(np.mean((predictions-y_test)**2))

mape=np.mean(np.abs((predictions-y_test)/(y_test+1)))*100

return{'MAE':mae,'RMSE':rmse,'MAPE':mape}

classKalmanFilterQueue:

def__init__(self):

self.A=np.array([[1,1],[0,1]])

self.H=np.array([[1,0]])

self.Q=np.array([[0.1,0],[0,0.1]])

self.R=np.array([[1]])

self.x=np.array([[0],[0]])

self.P=np.eye(2)

defpredict(self):

self.x=self.A@self.x

self.P=self.A@self.P@self.A.T+self.Q

returnself.x[0,0]

defupdate(self,measurement):

y=measurement-self.H@self.x

S=self.H@self.P@self.H.T+self.R

K=self.P@self.H.T@np.linalg.inv(S)

self.x=self.x+K@y

self.P=(np.eye(2)-K@self.H)@self.P

returnself.x[0,0]

defwebster_queue_model(arrival_rate,green_time,cycle_length):

saturation_flow=1800

capacity=saturation_flow*(green_time/cycle_length)

ifarrival_rate<capacity:

red_time=cycle_length-green_time

avg_queue=(arrival_rate/3600)*(red_time**2)/(2*cycle_length)

max_queue=(arrival_rate/3600)*red_time

else:

avg_queue=100

max_queue=200

returnavg_queue,max_queue

defshockwave_analysis(upstream_density,downstream_density,upstream_speed,downstream_speed):

ifupstream_density!=downstream_density:

shockwave_speed=(upstream_density*upstream_speed-downstream_density*downstream_speed)/\

(upstream_density-downstream_density)

else:

shockwave_speed=0

returnshockwave_speed

defqueue_discharge_model(initial_queue,green_time,saturation_flow=1800):

max_discharge=saturation_flow*(green_time/3600)

ifinitial_queue<=max_discharge:

residual_queue=0

discharge_time=(initial_queue/saturation_flow)*3600

else:

residual_queue=initial_queue-max_discharge

discharge_time=green_time

returnresidual_queue,discharge_time

defadaptive_signal_control(predicted_queue,max_capacity=50):

base_green=30

ifpredicted_queue<10:

green_time=base_green

elifpredicted_queue<30:

green_time=base_green+(predicted_queue-10)*1.5

else:

green_time=base_green+30+(predicted_queue-30)*2

green_time=min(green_time,90)

returngreen_time

defmulti_intersection_coordination(queue_predictions,num_intersections=4):

total_queue=sum(queue_predictions)

green_times=[]

forqueueinqueue_predictions:

iftotal_queue>0:

proportion=queue/total_queue

green=30+proportion*60

else:

green=30

green_times.append(min(green,80))

returngreen_times

defsimulate_queue_evolution(arrival_rate,departure_rate,initial_queue,time_steps):

queue_history=[initial_queue]

fortinrange(time_steps):

arrivals=np.random.poisson(arrival_rate/3600)

departures=min(queue_history[-1]+arrivals,departure_rate/3600)

new_queue=queue_history[-1]+arrivals-departures

queue_history.append(max(0,new_queue))

returnqueue_history

defmain():

predictor=QueueLengthPredictor()

X_train,y_train=predictor.generate_synthetic_data(4000)

X_test,y_test=predictor.generate_synthetic_data(1000)

predictor.train(X_train,y_train)

metrics=predictor.evaluate(X_test,y_test)

print("QueueLengthPredictionPerformance:")

print(f"MAE:{metrics['MAE']:.2f}vehicles")

print(f"RMSE:{metrics['RMSE']:.2f}vehicles")

print(f"MAPE:{metrics['MAPE']:.2f}%")

kalman=KalmanFilterQueue()

measurements=[10,15,20,18,22,25,23,20,18,15]

print("\nKalmanFilterQueueEstimation:")

fori,measinenumerate(measurements):

prediction=kalman.predict()

estimate=kalman.update(meas)

print(f"Step{i+1}:Measurement={meas:.1f},Prediction={predicti

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论