idm跟驰模型的python的数据获取

想问一下 张二发博主的
idm跟驰模型

如何获取 速度 位移 加速度这三个参数
我想获取大量的应该修改哪几个参数

(纯new guy 不太懂)

一、在获取速度、位移和加速度这三个参数时,需要考虑以下几点:

1、速度可以通过测量车辆在一定时间内所移动的距离来计算,或者通过汽车的转速表或 GPS 获取。

2、位移可以通过测量车辆在道路上的位置来计算。这可以使用 GPS 或者车辆内部的测距仪器来测量。

3、加速度可以通过测量车辆在一定时间内所变化的速度来计算。
二、IDM 模型中有几个主要的参数,这些参数会影响车辆的行为:

期望速度(v0):车辆在道路条件良好时的期望速度。

车辆容量(Q):车辆在道路条件良好时的最大流量。

加速度常数(a):车辆加速或减速时的加速度。

车辆安全距离(s0):车辆在其他车辆前方保持的最小安全距离。

减速度常数(b):车辆在其他车辆前方减速时的减速度。

修改这些参数可以模拟不同的车辆行为,可以通过测量车辆的速度、位移和加速度来收集数据。
仅供参考,望采纳。

望采纳!!点击该回答右侧的“采纳”按钮即可采纳!!
张二发博主的DM(智能驾驶员模型)是一种车辆动态模型,用于模拟车辆在道路上的行
为。DM模型基于车辆驾驶员的行为,描述了车辆的加速、减速和转弯等动态过程。
要获取车辆的速度、位移和加速度等参数,可以使用以下方法:


1.在DM模型中,速度、位移和加速度等参数都是可以直接获取的。在车辆运动过程中,可
以通过测量或估算来获取这些参数。
2.也可以使用传感器、GPS等设备来获取车辆的速度、位移和加速度等参数。这些设备能够
实时测量车辆的运动状态,并将测量结果通过数字信号输出。
3.要获取大量的速度、位移和加速度等参数,可以使用车辆数据记录仪或其他数据采集系
统。这些系统可以实时测量车辆的运动状态,并将测量结果记录到存储介质中。

提供参考实例【单车道车辆减速跟驰仿真】,链接:https://blog.csdn.net/S200142/article/details/124872940

IDM模型的python实现
借鉴下

# -*- coding: utf-8 -*-
"""
Created on Mon Jun  7 17:50:51 2021

@author: erfa_zhang
"""


# -*- coding: UTF-8 -*- 

from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['STZhongsong']   
mpl.rcParams['axes.unicode_minus'] = False           

import matplotlib.pyplot as plt
import random
import numpy as np
import xlwt


class Car:
    
    def _init_(self,length,width):
        self.length = length #车长
        self.width = width #车宽
        
    length = 3
    width = 1.6
    
    # 静态参数
    S = 2 #静态车间距
    T = 1.6 #车头时距
    aMax = 0.73 #最大期望加速度
    bMax = 1.67 #最大期望减速度
    V0 = 33.3 #m/s  
    par = 0.6
    
    # 更新车间距
    def updateD(self):
        if self.X > self.front.X: 
            self.D = self.X - self.front.X + self.front.length - Road.length
        else:
            self.D = self.X - self.front.X + self.front.length
    # 更新速度差
    def updatedV(self):
        self.dV = self.V - self.front.V
    # 更新期望跟驰距离
    def updateD_des(self):
        self.updatedV()
        self.D_des = self.S + self.V*self.T +self.V*self.dV/(2*(self.aMax*self.bMax)**0.5)
    # 更新加速度
    def updateA(self):
        self.updateD()
        self.updateD_des()
        self.A = self.par*(1-(self.V/self.V0)**4-(self.D_des/self.D)**2)

    # 更新速度
    def updateV(self):
        self.updateA()
        self.V = max(self.V + self.A,0)
    # 更新位置
    def updateX(self):
        self.updateV()
        self.X = (self.X + self.V)%Road.length
    
class Road:
    def _init_(self,motorPercent,length,width):
        self.motorPercent = motorPercent #道路占有率
        self.length = length #车道长度
        self.width = width #车道宽度
        
    motorPercent = 0.9
    length = 1000
    width = 3.5

    # 车辆加载
    def initCars(self):
        # 计算车辆数量
        self.numOfCar = (int)(self.length/3 * self.motorPercent)
        # 生成车辆
        self.ls = []
        gas = (self.length / self.numOfCar)
        for i in range(self.numOfCar):
            c = Car()
            # 等间距放置车辆
            c.X = i*gas
            c.Y = 1
            c.V = 0
            c.index = i
            self.ls.append(c)
            # 新增车辆为上一辆车的前车
            if i>0:
                c.back = self.ls[self.ls.index(c)-1]
                c.back.front = c
            # 设置车辆颜色
            c.color = [random.random(),random.random(),random.random()]
        #头车的前车是尾车
        self.ls[len(self.ls)-1].front = self.ls[0] 
        self.ls[0].back = self.ls[len(self.ls)-1]
        
    # 画图函数
    def draw(self,ax):
        # 绘制道路
        rect = plt.Rectangle([0,0],self.length,self.width, fill=False,facecolor = [0,0,1])
        ax.add_patch(rect)
        plt.xlim(0,300)
        plt.ylim(-50,50)
        # 绘制车辆
        for i in range(self.numOfCar):
            c = self.ls[i]
            rect = plt.Rectangle([c.X,c.Y],c.length,c.width,facecolor=c.color)
            ax.add_patch(rect)
        
    # 运行效果展示函数
    def show(self,timeMax):
        # 初始化道路        
        self.initCars()
        # 创建画布
        fig = plt.figure()
        ax = fig.add_subplot(111)
        # 开始仿真
        for time in range(timeMax):
            # 车辆位置更新
            for c in self.ls:
                c.updateX()
            # 汇出更新后车辆位置
            plt.cla()
            self.draw(ax)
            plt.pause(0.1)
        # 删除画布
        plt.close(fig)

# 获取输入道路的平均车速
def get_vMean(r,timeMax):
    # 初始化道路        
    r.initCars()
    # 开始仿真
    ls = []
    vSum = 0
    for time in range(timeMax):
        # 车辆位置更新
        for c in r.ls:
            c.updateX()
            vSum = vSum + c.V
        # 计算当前时间步平均车速
        ls.append(vSum / r.numOfCar)
        vSum = 0
    return sum(ls)/len(ls)

def get_K_V():
    V_ls = np.zeros((1,20))
    K_ls = np.zeros((1,20))
    timeMax = 1000
    j = 0
    for i in np.arange(0.05,1,0.05):
        r = Road()
        r.motorPercent = i
        V_ls[0,j] = get_vMean(r, timeMax)
        K_ls[0,j] = r.numOfCar/r.length*1000
        j = j + 1
    return (K_ls,V_ls)

def plot_K_V(K_V):
    # 输入元组第0个元素为密度,第1个元素为平均速度
    ls_K = []
    ls_V = []
    for i in range(19):
        ls_K.append(K_V[0][0,i])
        ls_V.append(K_V[1][0,i])
    plt.plot(ls_K,ls_V)
    plt.title('密度-速度图',fontsize = 35)        
    plt.xlabel('密度',fontsize = 30)             
    plt.ylabel('速度',fontsize = 30)
    plt.xticks(fontsize=20)
    plt.yticks(fontsize=20)

def plot_K_Q(K_V):
    # 输入元组第0个元素为密度,第1个元素为平均速度
    ls_K = []
    ls_Q = []
    for i in range(19):
        ls_K.append(K_V[0][0,i])
        ls_Q.append(K_V[1][0,i]*K_V[0][0,i])
    plt.plot(ls_K,ls_Q)
    plt.title('密度-流量图',fontsize = 35)        
    plt.xlabel('密度',fontsize = 30)             
    plt.ylabel('流量',fontsize = 30)
    plt.xticks(fontsize=20)
    plt.yticks(fontsize=20)
   
def plot_V_Q(K_V):
    # 输入元组第0个元素为密度,第1个元素为平均速度
    ls_V = []
    ls_Q = []
    for i in range(19):
        ls_V.append(K_V[1][0,i])
        ls_Q.append(K_V[1][0,i]*K_V[0][0,i])
    plt.plot(ls_Q,ls_V)
    plt.title('速度-流量图',fontsize = 35)        
    plt.xlabel('流量',fontsize = 30)             
    plt.ylabel('速度',fontsize = 30)
    plt.xticks(fontsize=20)
    plt.yticks(fontsize=20)
    
def xlsWrite(K_V):
    workbook = xlwt.Workbook(encoding= 'ascii')
    worksheet = workbook.add_sheet("三参数")
    worksheet.write(0,0, "密度")
    worksheet.write(0,1, "速度")
    worksheet.write(0,2, "流量")
    for i in range(20):
        worksheet.write(i+1,0,K_V[0][0,i])
        worksheet.write(i+1,1,K_V[1][0,i])
        worksheet.write(i+1,2,K_V[0][0,i]*K_V[1][0,i])
    fname = "C:\OneDrive\文档\文本仓库\课程ppt\学习\交通仿真\IDM_python实现\三参数数据.xls"
    workbook.save(fname)
     
#################### main
# 创建道路
r = Road()
# 展示动画
################### 动画展示
r.motorPercent = 0.3
timeMax = 100
r.show(timeMax)
################### 三参数图
# 获取占有率-速度
#K_V = get_K_V()
# 汇出密度-速度图
#plot_K_V(K_V)
# 汇出密度-流量图
#plot_K_Q(K_V)
# 汇出速度-流量图
################### 导出数据
#plot_V_Q(K_V)
# 写入excel文件
#xlsWrite(K_V)
################### V0变化
# for i in range(1,7):
#     Car.V0 = 5*i
#     K_V = get_K_V()
#     plot_K_Q(K_V)
#     #plot_V_Q(K_V)
#     #plot_K_V(K_V)
# plt.legend(labels=['5','10','15','20','25','30'],fontsize = 20)
################### S变化
# for i in range(1,6):
#     Car.S = i
#     K_V = get_K_V()
#     #plot_K_Q(K_V)
#     #plot_V_Q(K_V)
#     plot_K_V(K_V)
# plt.legend(labels=['1','2','3','4','5'],fontsize = 20)
################### par变化
# for i in range(1,6):
#     Car.par = i*0.2
#     K_V = get_K_V()
#     plot_K_Q(K_V)
#     #plot_V_Q(K_V)
#     #plot_K_V(K_V)
# plt.legend(labels=['0.2','0.4','0.6','0.8','1'],fontsize = 20)