示例#1
0
def generate(scenario_list):
    dx = np.array([t.obj_car.displacement_x for t in scenario_list])
    dx = np.fabs(dx)
    voy = np.array([t.obj_car.velocity_y for t in scenario_list])
    voy = np.fabs(voy)
    ve = np.array([t.ego_car.velocity_x for t in scenario_list])
    vo = np.array([t.obj_car.velocity_x for t in scenario_list])

    # 计算速度的最大最小区间
    s_max = int(np.max(dx) + 1)
    s_min = int(np.min(dx) - 1)

    # 当数据量大的时候可以酌情考虑将区间加大,目前设置成5
    step = int((s_max - s_min) / 5) + 1

    dx_cluster = []
    voy_par = []

    for i in range(6):
        ran_speed = np.where((dx > s_min + i * step) & (dx < s_min +
                                                        (i + 1) * step))
        if len(ran_speed[0]) > 0:
            dx_cluster.append(s_min + i * step + step / 2)
            voy_par.append(MathParameter(voy[ran_speed]))

    degrees = [1]
    colors = ['b']
    font = {
        'family': 'Times New Roman',
        'weight': 'normal',
        'size': 15,
    }
    figure = plt.figure(figsize=(30, 30))
    index = 0

    # for rv in range(10, 47, 4):
    #     index += 1
    #     plt.subplot(3, 3, index)
    # 绘制采样点
    draw_back(20, ve, dx, voy, figure)

    plt.figure(figsize=(30, 30))
    for rv in range(10, 41, 10):
        for ve in range(60, 19, -10):
            index += 1
            plt.subplot(4, 5, index)
            if ve - rv <= 0:
                continue
            draw_back2(ve, ve - rv, max(dx), max(voy))
            draw(dx, voy, dx_cluster, voy_par, degrees, colors,
                 '../parameters/dx_voy', 'dx', 'voy')
    plt.show()
示例#2
0
    def fit_time(time, ego_v, relative_v, displacement):
        ego_v_cluster = []
        relative_v_cluster = []
        displacement_cluster = []

        time_ego_v_par = []
        time_relative_v_par = []
        time_displacement_par = []

        # g = []

        # 计算速度的最大最小区间
        s_max = int(np.max(ego_v) + 1)
        s_min = int(np.min(ego_v) - 1)
        # 当数据量大的时候可以酌情考虑将区间加大,目前设置成5
        step = int((s_max - s_min) / 5) + 1
        # 本车速度->变道极值时间
        # g.append(s_min)
        for i in range(6):
            ran_speed = np.where((ego_v > s_min + i * step) & (ego_v < s_min +
                                                               (i + 1) * step))
            if len(ran_speed[0]) > 0:
                ego_v_cluster.append(s_min + i * step + step / 2)
                time_ego_v_par.append(MathParameter(time[ran_speed]))
                # g.append(s_min + (i + 1) * step)
        # 计算速度的最大最小区间
        s_max = int(np.max(relative_v) + 1)
        s_min = int(np.min(relative_v) - 1)
        # 当数据量大的时候可以酌情考虑将区间加大,目前设置成5
        step = int((s_max - s_min) / 5) + 1
        # 本车速度->变道极值时间
        for i in range(6):
            ran_speed = np.where((relative_v > s_min + i * step)
                                 & (relative_v < s_min + (i + 1) * step))
            if len(ran_speed[0]) > 0:
                relative_v_cluster.append(s_min + i * step + step / 2)
                time_relative_v_par.append(MathParameter(time[ran_speed]))

        # 计算速度的最大最小区间
        s_max = int(np.max(displacement) + 1)
        s_min = int(np.min(displacement) - 1)
        # 当数据量大的时候可以酌情考虑将区间加大,目前设置成5
        step = int((s_max - s_min) / 5) + 1
        # 本车速度->变道极值时间
        for i in range(6):
            ran_speed = np.where((displacement > s_min + i * step)
                                 & (displacement < s_min + (i + 1) * step))
            if len(ran_speed[0]) > 0:
                displacement_cluster.append(s_min + i * step + step / 2)
                time_displacement_par.append(MathParameter(time[ran_speed]))

        degrees = [1]
        colors = ['b']
        font = {
            'family': 'Times New Roman',
            'weight': 'normal',
            'size': 15,
        }
        plt.figure(figsize=(20, 20))
        # 本车速度-变道时间
        plt.subplot(2, 2, 1)
        draw(ego_v, time, ego_v_cluster, time_ego_v_par, degrees, colors,
             '../parameters/ev_time', 'ego_v', 'time')
        # for li in g:
        #     plt.vlines(li, -6, 12, colors="c", linestyles="dashed")
        # 相对速度-变道时间
        plt.subplot(2, 2, 2)
        draw(relative_v, time, relative_v_cluster, time_relative_v_par,
             degrees, colors, '../parameters/rv_time', 'relative_v', 'time')

        # 两车距离-变道时间
        plt.subplot(2, 2, 3)
        draw(displacement, time, displacement_cluster, time_displacement_par,
             degrees, colors, '../parameters/dis_time', 'displacement', 'time')

        plt.show()
示例#3
0
    def fit2(ego_v, ego_a, obj_v, obj_a, distance, relative_v):
        # 计算速度的最大最小区间
        s_max = int(np.max(ego_v) + 1)
        s_min = int(np.min(ego_v) - 1)

        # 当数据量大的时候可以酌情考虑将区间加大,目前设置成5
        step = int((s_max - s_min) / 5) + 1

        # 将本车速度分区
        speed_cluster = []
        obj_speed_cluster = []
        relative_speed_cluster = []
        distance_cluster = []
        y_speed_cluster = []

        a_par = []
        obj_speed_par = []
        obj_a_par = []
        distance_par = []
        distance_relative_par = []

        # 获取每个区域内的最大最小值,遍历区间比拆分区间大一
        # 本车速度相关性分析
        # 本车速度->本车加速度、目标车速度、距离
        for i in range(6):
            ran_speed = np.where((ego_v > s_min + i * step) & (ego_v < s_min +
                                                               (i + 1) * step))
            if len(ran_speed[0]) > 0:
                speed_cluster.append(s_min + i * step + step / 2)
                a_par.append(MathParameter(ego_a[ran_speed]))
                obj_speed_par.append(MathParameter(obj_v[ran_speed]))
                distance_par.append(MathParameter(distance[ran_speed]))
        # 目标车速度相关性分析
        # 目标车速度->目标车加速度
        s_max = int(np.max(obj_v) + 1)
        s_min = int(np.min(obj_v) - 1)
        # 当数据量大的时候可以酌情考虑将区间加大,目前设置成5
        step = int((s_max - s_min) / 5) + 1
        for i in range(6):
            ran_speed = np.where((obj_v > s_min + i * step) & (obj_v < s_min +
                                                               (i + 1) * step))
            if len(ran_speed[0]) > 1:
                obj_speed_cluster.append(s_min + i * step + step / 2)
                obj_a_par.append(MathParameter(obj_a[ran_speed]))
        # 相对速度相关性分析
        # 相对速度->距离
        s_max = int(np.max(relative_v) + 1)
        s_min = int(np.min(relative_v) - 1)
        step = int((s_max - s_min) / 5) + 1
        for i in range(6):
            ran_speed = np.where((relative_v > s_min + i * step)
                                 & (relative_v < s_min + (i + 1) * step))
            if len(ran_speed[0]) > 0:
                relative_speed_cluster.append(s_min + i * step + step / 2)
                distance_relative_par.append(MathParameter(
                    distance[ran_speed]))

        # 以下是数据拟合部分以及画图部分
        # 设置颜色和多项式的阶数
        degrees = [1]
        colors = ['b']
        font = {
            'family': 'Times New Roman',
            'weight': 'normal',
            'size': 15,
        }
        plt.figure(figsize=(30, 20))
        plt.subplot(2, 3, 1)
        # 本车速度,本车加速度
        draw(ego_v, ego_a, speed_cluster, a_par, degrees, colors,
             '../parameters/ev_ea', 'ego-v', 'ego-a')
        plt.subplot(2, 3, 2)
        # 本车速度,目标车速度
        draw(ego_v, obj_v, speed_cluster, obj_speed_par, degrees, colors,
             '../parameters/ev_ov', 'ego-v', 'obj-v')
        plt.subplot(2, 3, 3)
        # 本车速度,距离
        draw(ego_v, distance, speed_cluster, distance_par, degrees, colors,
             '../parameters/ev_dis', 'ego-v', 'distance')
        plt.subplot(2, 3, 4)
        # 目标车速度,目标车加速度
        draw(obj_v, obj_a, obj_speed_cluster, obj_a_par, degrees, colors,
             '../parameters/ov_oa', 'obj-v', 'obj-a')
        plt.subplot(2, 3, 5)
        # 相对速度, 距离
        draw(relative_v, distance, relative_speed_cluster,
             distance_relative_par, degrees, colors, '../parameters/rv_dis',
             'relative-v', 'distance')
        plt.show()
        return
示例#4
0
    def fit(self, ego_v, ego_y_v, distance, relative_v):
        # 计算速度的最大最小区间
        s_max = int(np.max(ego_v) + 1)
        s_min = int(np.min(ego_v) - 1)

        # 当数据量大的时候可以酌情考虑将区间加大,目前设置成5
        step = int((s_max - s_min) / 5) + 1
        # 将本车速度分区
        ego_v_cluster = []

        # 本车速度-相对速度 ego-v relative-v
        ev_rv_par = []
        # 本车速度-距离 ego-v distance
        ev_dis_par = []
        # 本车速度-本车横向速度 ego-v ego-y-v
        ev_eyv_par = []

        # 获取每个区域内的最大最小值,遍历区间比拆分区间大一
        for i in range(6):
            ran_speed = np.where((ego_v > s_min + i * step) & (ego_v < s_min +
                                                               (i + 1) * step))
            if len(ran_speed[0]) > 0:
                ego_v_cluster.append(s_min + i * step + step / 2)
                ev_rv_par.append(MathParameter(relative_v[ran_speed]))
                ev_dis_par.append(MathParameter(distance[ran_speed]))
                ev_eyv_par.append(MathParameter(ego_y_v[ran_speed]))

        # 计算速度的最大最小区间
        s_max = int(np.max(relative_v) + 1)
        s_min = int(np.min(relative_v) - 1)

        # 当数据量大的时候可以酌情考虑将区间加大,目前设置成5
        step = int((s_max - s_min) / 5) + 1

        relative_v_cluster = []

        # 相对速度-本车速度 relative-v ego-v
        rv_ev_par = []
        # 相对速度-距离 relative-v distance
        rv_dis_par = []
        # 相对速度-本车横向速度 relative-v ego-y-v
        rv_eyv_par = []

        # 获取每个区域内的最大最小值,遍历区间比拆分区间大一
        for i in range(6):
            ran_speed = np.where((relative_v > s_min + i * step)
                                 & (relative_v < s_min + (i + 1) * step))
            if len(ran_speed[0]) > 0:
                relative_v_cluster.append(s_min + i * step + step / 2)
                rv_ev_par.append(MathParameter(ego_v[ran_speed]))
                rv_dis_par.append(MathParameter(distance[ran_speed]))
                rv_eyv_par.append(MathParameter(ego_y_v[ran_speed]))

        # 计算速度的最大最小区间
        s_max = int(np.max(distance) + 1)
        s_min = int(np.min(distance) - 1)

        # 当数据量大的时候可以酌情考虑将区间加大,目前设置成5
        step = int((s_max - s_min) / 5) + 1

        distance_cluster = []

        # 距离-本车速度 distance ego-v
        dis_ev_par = []
        # 距离-相对速度 distance relative-v
        dis_rv_par = []
        # 距离-本车横向速度 distance ego-y-v
        dis_eyv_par = []

        # 获取每个区域内的最大最小值,遍历区间比拆分区间大一
        for i in range(6):
            ran_speed = np.where((distance > s_min + i * step)
                                 & (distance < s_min + (i + 1) * step))
            if len(ran_speed[0]) > 0:
                distance_cluster.append(s_min + i * step + step / 2)
                dis_ev_par.append(MathParameter(ego_v[ran_speed]))
                dis_rv_par.append(MathParameter(relative_v[ran_speed]))
                dis_eyv_par.append(MathParameter(ego_y_v[ran_speed]))

        # 计算速度的最大最小区间
        s_max = int(np.max(ego_y_v) + 1)
        s_min = int(np.min(ego_y_v) - 1)

        # 当数据量大的时候可以酌情考虑将区间加大,目前设置成5
        step = int((s_max - s_min) / 5) + 1

        ego_y_v_cluster = []
        # 本车横向速度-本车速度 ego-y-v ego-v
        eyv_ev_par = []
        # 本车横向速度-相对速度 ego-y-v relative-v
        eyv_rv_par = []
        # 本车横向速度-距离 ego-y-v distance
        eyv_dis_par = []

        # 获取每个区域内的最大最小值,遍历区间比拆分区间大一
        for i in range(6):
            ran_speed = np.where((ego_y_v > s_min + i * step)
                                 & (ego_y_v < s_min + (i + 1) * step))
            if len(ran_speed[0]) > 0:
                ego_y_v_cluster.append(s_min + i * step + step / 2)
                eyv_ev_par.append(MathParameter(ego_v[ran_speed]))
                eyv_rv_par.append(MathParameter(relative_v[ran_speed]))
                eyv_dis_par.append(MathParameter(distance[ran_speed]))

        # 以下是数据拟合部分以及画图部分
        # 设置颜色和多项式的阶数
        degrees = [1]
        colors = ['b']
        font = {
            'family': 'Times New Roman',
            'weight': 'normal',
            'size': 15,
        }
        plt.figure(figsize=(20, 20))
        plt.subplot(4, 4, 1)
        plt.subplot(4, 4, 2)
        draw(ego_v, relative_v, ego_v_cluster, ev_rv_par, degrees, colors,
             '../parameters/ev_rv', 'ego-v', 'relative_v')
        plt.subplot(443)
        draw(ego_v, distance, ego_v_cluster, ev_dis_par, degrees, colors,
             '../parameters/ev_dis', 'ego-v', 'distance')
        plt.subplot(444)
        draw(ego_v, ego_y_v, ego_v_cluster, ev_eyv_par, degrees, colors,
             '../parameters/ev_eyv', 'ego-v', 'ego-y-v')

        plt.subplot(445)
        draw(relative_v, ego_v, relative_v_cluster, rv_ev_par, degrees, colors,
             '../parameters/rv_ev', 'relative_v', 'ego-v')
        plt.subplot(447)
        draw(relative_v, distance, relative_v_cluster, rv_dis_par, degrees,
             colors, '../parameters/rv_dis', 'relative_v', 'distance')
        plt.subplot(448)
        draw(relative_v, ego_y_v, relative_v_cluster, rv_eyv_par, degrees,
             colors, '../parameters/rv_e_y_v', 'relative_v', 'ego-y-v')

        plt.subplot(449)
        draw(distance, ego_v, distance_cluster, dis_ev_par, degrees, colors,
             '../parameters/dis_ev', 'distance', 'ego-v')
        plt.subplot(4, 4, 10)
        draw(distance, relative_v, distance_cluster, dis_rv_par, degrees,
             colors, '../parameters/dis_rv', 'distance', 'relative_v')
        plt.subplot(4, 4, 12)
        draw(distance, ego_y_v, distance_cluster, dis_eyv_par, degrees, colors,
             '../parameters/dis_eyv', 'distance', 'ego_y_v')

        plt.subplot(4, 4, 13)
        draw(ego_y_v, ego_v, ego_y_v_cluster, eyv_ev_par, degrees, colors,
             '../parameters/eyv_ev', 'ego_y_v', 'ego-v')
        plt.subplot(4, 4, 14)
        draw(ego_y_v, relative_v, ego_y_v_cluster, eyv_rv_par, degrees, colors,
             '../parameters/eyv_rv', 'ego_y_v', 'relative_v')
        plt.subplot(4, 4, 15)
        draw(ego_y_v, distance, ego_y_v_cluster, eyv_dis_par, degrees, colors,
             '../parameters/eyv_dis', 'ego_y_v', 'distance')
        plt.show()
        return