def selection_learning_params(dp, p, k0, target):
    """
    选择学习的参数
    :param dp: params[ds,dkm,dkf] 变化量
    :param p:  params[s,km,kf]
    :param k0: 初始曲率点
    :param target: 目标
    :return:
    """
    mincost = MINCOST
    mina = MINA
    maxa = MAXA
    da = DA

    acc_space = np.arange(mina, maxa, da)

    for a in acc_space:
        # 加速度搜索
        tp = p + a * dp
        xc, yc, yawc = mm.generate_last_state(tp[0], tp[1], tp[2], k0)
        dc = calc_diff(target, [xc], [yc], [yawc])
        cost = np.linalg.norm(dc)

        if cost <= mincost and a != 0.0:
            mina = a
            mincost = cost

    return mina
def calc_J(target, p, h, k0):
    xp, yp, yawp = motion_model.generate_last_state(
        p[0, 0] + h[0], p[1, 0], p[2, 0], k0)
    dp = calc_diff(target, [xp], [yp], [yawp])
    xn, yn, yawn = motion_model.generate_last_state(
        p[0, 0] - h[0], p[1, 0], p[2, 0], k0)
    dn = calc_diff(target, [xn], [yn], [yawn])
    d1 = np.array((dp - dn) / (2.0 * h[0])).reshape(3, 1)

    xp, yp, yawp = motion_model.generate_last_state(
        p[0, 0], p[1, 0] + h[1], p[2, 0], k0)
    dp = calc_diff(target, [xp], [yp], [yawp])
    xn, yn, yawn = motion_model.generate_last_state(
        p[0, 0], p[1, 0] - h[1], p[2, 0], k0)
    dn = calc_diff(target, [xn], [yn], [yawn])
    d2 = np.array((dp - dn) / (2.0 * h[1])).reshape(3, 1)

    xp, yp, yawp = motion_model.generate_last_state(
        p[0, 0], p[1, 0], p[2, 0] + h[2], k0)
    dp = calc_diff(target, [xp], [yp], [yawp])
    xn, yn, yawn = motion_model.generate_last_state(
        p[0, 0], p[1, 0], p[2, 0] - h[2], k0)
    dn = calc_diff(target, [xn], [yn], [yawn])
    d3 = np.array((dp - dn) / (2.0 * h[2])).reshape(3, 1)

    J = np.hstack((d1, d2, d3))

    return J
Пример #3
0
def calc_J(target, p, h, k0):
    xp, yp, yawp = motion_model.generate_last_state(
        p[0, 0] + h[0, 0], p[1, 0], p[2, 0], k0)
    dp = calc_diff(target, [xp], [yp], [yawp])
    xn, yn, yawn = motion_model.generate_last_state(
        p[0, 0] - h[0, 0], p[1, 0], p[2, 0], k0)
    dn = calc_diff(target, [xn], [yn], [yawn])
    d1 = np.matrix((dp - dn) / (2.0 * h[0, 0])).T

    xp, yp, yawp = motion_model.generate_last_state(
        p[0, 0], p[1, 0] + h[1, 0], p[2, 0], k0)
    dp = calc_diff(target, [xp], [yp], [yawp])
    xn, yn, yawn = motion_model.generate_last_state(
        p[0, 0], p[1, 0] - h[1, 0], p[2, 0], k0)
    dn = calc_diff(target, [xn], [yn], [yawn])
    d2 = np.matrix((dp - dn) / (2.0 * h[1, 0])).T

    xp, yp, yawp = motion_model.generate_last_state(
        p[0, 0], p[1, 0], p[2, 0] + h[2, 0], k0)
    dp = calc_diff(target, [xp], [yp], [yawp])
    xn, yn, yawn = motion_model.generate_last_state(
        p[0, 0], p[1, 0], p[2, 0] - h[2, 0], k0)
    dn = calc_diff(target, [xn], [yn], [yawn])
    d3 = np.matrix((dp - dn) / (2.0 * h[2, 0])).T

    J = np.hstack((d1, d2, d3))

    return J
def calc_J(target, p, h, k0, v):
    xp, yp, yawp = motion_model.generate_last_state(p[0, 0] + h[0], p[1, 0],
                                                    p[2, 0], k0, v)
    dp = calc_diff(target, [xp], [yp], [yawp])
    xn, yn, yawn = motion_model.generate_last_state(p[0, 0] - h[0], p[1, 0],
                                                    p[2, 0], k0, v)
    dn = calc_diff(target, [xn], [yn], [yawn])
    d1 = np.array((dp - dn) / (2.0 * h[0])).reshape(3, 1)

    xp, yp, yawp = motion_model.generate_last_state(p[0, 0], p[1, 0] + h[1],
                                                    p[2, 0], k0, v)
    dp = calc_diff(target, [xp], [yp], [yawp])
    xn, yn, yawn = motion_model.generate_last_state(p[0, 0], p[1, 0] - h[1],
                                                    p[2, 0], k0, v)
    dn = calc_diff(target, [xn], [yn], [yawn])
    d2 = np.array((dp - dn) / (2.0 * h[1])).reshape(3, 1)

    xp, yp, yawp = motion_model.generate_last_state(p[0, 0], p[1, 0],
                                                    p[2, 0] + h[2], k0, v)
    dp = calc_diff(target, [xp], [yp], [yawp])
    xn, yn, yawn = motion_model.generate_last_state(p[0, 0], p[1, 0],
                                                    p[2, 0] - h[2], k0, v)
    dn = calc_diff(target, [xn], [yn], [yawn])
    d3 = np.array((dp - dn) / (2.0 * h[2])).reshape(3, 1)

    J = np.hstack((d1, d2, d3))

    return J
def calc_J(target, p, h, k0):
    ## change of x (R^3) is the function of p(R^3)

    xp, yp, yawp = motion_model.generate_last_state(p[0, 0] + h[0, 0], p[1, 0],
                                                    p[2, 0], k0)
    dp = calc_diff(target, [xp], [yp], [yawp])  # Eq. (13) in paper
    xn, yn, yawn = motion_model.generate_last_state(p[0, 0] - h[0, 0], p[1, 0],
                                                    p[2, 0], k0)
    dn = calc_diff(target, [xn], [yn], [yawn])
    d1 = np.matrix((dp - dn) / (2.0 * h[1, 0])).T  # Eq. (16) in paper

    xp, yp, yawp = motion_model.generate_last_state(p[0, 0], p[1, 0] + h[1, 0],
                                                    p[2, 0], k0)
    dp = calc_diff(target, [xp], [yp], [yawp])
    xn, yn, yawn = motion_model.generate_last_state(p[0, 0], p[1, 0] - h[1, 0],
                                                    p[2, 0], k0)
    dn = calc_diff(target, [xn], [yn], [yawn])
    d2 = np.matrix((dp - dn) / (2.0 * h[2, 0])).T

    xp, yp, yawp = motion_model.generate_last_state(p[0, 0], p[1, 0],
                                                    p[2, 0] + h[2, 0], k0)
    dp = calc_diff(target, [xp], [yp], [yawp])
    xn, yn, yawn = motion_model.generate_last_state(p[0, 0], p[1, 0],
                                                    p[2, 0] - h[2, 0], k0)
    dn = calc_diff(target, [xn], [yn], [yawn])
    d3 = np.matrix((dp - dn) / (2.0 * h[2, 0])).T

    J = np.hstack((d1, d2, d3))

    return J
Пример #6
0
def selection_learning_param(dp, p, k0, target):
    mincost = float("inf")
    mina = 1.0
    maxa = 2.0
    da = 0.5

    for a in np.arange(mina, maxa, da):
        tp = p + a * dp
        xc, yc, yawc = motion_model.generate_last_state(
            tp[0], tp[1], tp[2], k0)
        dc = calc_diff(target, [xc], [yc], [yawc])
        cost = np.linalg.norm(dc)

        if cost <= mincost and a != 0.0:
            mina = a
            mincost = cost

    #  print(mincost, mina)
    #  input()

    return mina
def selection_learning_param(dp, p, k0, target):

    mincost = float("inf")
    mina = 1.0
    maxa = 2.0
    da = 0.5

    for a in np.arange(mina, maxa, da):
        tp = p + a * dp
        xc, yc, yawc = motion_model.generate_last_state(
            tp[0], tp[1], tp[2], k0)
        dc = calc_diff(target, [xc], [yc], [yawc])
        cost = np.linalg.norm(dc)

        if cost <= mincost and a != 0.0:
            mina = a
            mincost = cost

    #  print(mincost, mina)
    #  input()

    return mina
def selection_learning_param(dp, p, k0, target):

    mincost = float("inf")
    mina = 0.6
    maxa = 1.4  # for np.arange, can not reach max
    da = 0.2

    for a in np.arange(mina, maxa, da):
        tp = p[:, :] + a * dp
        xc, yc, yawc = motion_model.generate_last_state(
            tp[0], tp[1], tp[2], k0)
        dc = np.matrix(calc_diff(target, [xc], [yc], [yawc])).T
        cost = np.linalg.norm(dc)

        if cost <= mincost and a != 0.0:
            mina = a
            mincost = cost

    #  print(mincost, mina)
    #  input()

    return mina
def clac_j(target, p, h, k0):
    """
    计算Loss(target,current_state)的雅克比矩阵
    :param target: target
    :param p: [s,km,kf]
    :param h: increment
    :param k0: 固定死,只有km,kf是活的
    :return:
    """
    # 计算Jacobi matrix
    # -[d(C(x,p))/d(p)]
    # dp包括 ds, dkm, df

    # p[0,0] ---> s +/- 0.5
    # xp,yp,yawp 是由p[0,0]+h[0]所产生的所有可能的状态
    xp, yp, yawp = mm.generate_last_state(p[0, 0] + h[0], p[1, 0], p[2, 0], k0)
    dp = calc_diff(target, [xp], [yp], [yawp])
    xn, yn, yawn = mm.generate_last_state(p[0, 0] - h[0], p[1, 0], p[2, 0], k0)
    dn = calc_diff(target, [xn], [yn], [yawn])
    d1 = np.array((dp - dn) / (2.0 * h[0])).reshape(3, 1)

    # p[1,0] ---> km +/- 0.02
    xp, yp, yawp = mm.generate_last_state(p[0, 0], p[1, 0] + h[1], p[2, 0], k0)
    dp = calc_diff(target, [xp], [yp], [yawp])
    xn, yn, yawn = mm.generate_last_state(p[0, 0], p[1, 0] - h[1], p[2, 0], k0)
    dn = calc_diff(target, [xn], [yn], [yawn])
    d2 = np.array((dp - dn) / (2.0 * h[1])).reshape(3, 1)

    # p[2,0] ---> kf +/- 0.02
    xp, yp, yawp = mm.generate_last_state(p[0, 0], p[1, 0], p[2, 0] + h[2], k0)
    dp = calc_diff(target, [xp], [yp], [yawp])
    xn, yn, yawn = mm.generate_last_state(p[0, 0], p[1, 0], p[2, 0] - h[2], k0)
    dn = calc_diff(target, [xn], [yn], [yawn])
    d3 = np.array((dp - dn) / (2.0 * h[2])).reshape(3, 1)

    # d(Loss(x,p))/d(p)
    # p including s、km、kf
    J = np.hstack((d1, d2, d3))  # 3x3

    return J