l5kit.kinematic package

class l5kit.kinematic.AckermanPerturbation(random_offset_generator: l5kit.random.random_generator.RandomGenerator, perturb_prob: float, min_displacement: float = 0)

Bases: l5kit.kinematic.perturbation.Perturbation

perturb(history_frames: numpy.ndarray, future_frames: numpy.ndarray) Tuple[numpy.ndarray, numpy.ndarray]
Parameters
  • history_frames (np.ndarray) – array of past frames

  • future_frames (np.ndarray) – array of future frames

  • kwargs – optional extra arguments for the specific perturber

Returns

array of past frames with perturbation applied future_frames (np.ndarray): array of future frames with perturbation applied

Return type

history_frames (np.ndarray)

class l5kit.kinematic.Perturbation

Bases: abc.ABC

abstract perturb(history_frames: numpy.ndarray, future_frames: numpy.ndarray) Tuple[numpy.ndarray, numpy.ndarray]
Parameters
  • history_frames (np.ndarray) – array of past frames

  • future_frames (np.ndarray) – array of future frames

  • kwargs – optional extra arguments for the specific perturber

Returns

array of past frames with perturbation applied future_frames (np.ndarray): array of future frames with perturbation applied

Return type

history_frames (np.ndarray)

l5kit.kinematic.fit_ackerman_model_approximate(gx: numpy.ndarray, gy: numpy.ndarray, gr: numpy.ndarray, gv: numpy.ndarray, wx: numpy.ndarray, wy: numpy.ndarray, wr: numpy.ndarray, wv: numpy.ndarray, wgx: numpy.ndarray, wgy: numpy.ndarray, wgr: numpy.ndarray, wgv: numpy.ndarray) Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray, numpy.ndarray]

Fits feasible ackerman-steering trajectory to groundtruth control points. Groundtruth is represented as 4 input numpy arrays (gx, gy, gr, gv) each of size (N,) representing position, rotation and velocity at time i. Returns 4 arrays (x, y, r, v) each of shape (N,) - the optimal trajectory. The solution is found as minimization of the following non-linear least squares problem: minimize F(x, y, r, v) = F_ground_cost(x, y, r, v) + F_kinematics_cost(x, y, r, v) where F_ground_cost(x, y, r, v) = 0.5 * sum( (wgx[i] * (x[i] - gx[i])) ** 2 + (wgy[i] * (y[i] - gy[i])) ** 2 + (wgr[i] * (r[i] - gr[i])) ** 2 + (wgv[i] * (v[i] - gv[i])) ** 2, i = 0 … N-1) and F_kinematics_cost(x, y, r, v) = 0.5 * sum( (wx * (x[i] + cos(r[i]) * v[i] - x[i+1])) ** 2 + (wy * (y[i] + sin(r[i]) * v[i] - y[i+1])) ** 2 + (wr * (r[i] - r[i+1])) ** 2 + (wv * (v[i] - v[i+1])) ** 2, i = 0 … N-2) Weights wg* control adherance to the control points while weights w* control obeying of underlying kinematic motion constrains.

Returns

4 arrays (x, y, r, v) each of shape (N,), the optimal trajectory.

l5kit.kinematic.fit_ackerman_model_exact(x0: numpy.ndarray, y0: numpy.ndarray, r0: numpy.ndarray, v0: numpy.ndarray, gx: numpy.ndarray, gy: numpy.ndarray, gr: numpy.ndarray, gv: numpy.ndarray, wgx: numpy.ndarray, wgy: numpy.ndarray, wgr: numpy.ndarray, wgv: numpy.ndarray, ws: float = 5.0, wa: float = 5.0, min_acc: float = - 0.3, max_acc: float = 0.3, min_steer: float = - 0.07853981633974483, max_steer: float = 0.07853981633974483) Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray, numpy.ndarray, numpy.ndarray, numpy.ndarray]

Fits feasible ackerman-steering trajectory to groundtruth control points. Groundtruth is represented as 4 numpy arrays (gx, gy, gr, gv) each of shape (N,) representing position, rotation and velocity at time i. Returns 4 arrays (x, y, r, v) each of shape (N,) - the optimal trajectory.

The solution is found as minimisation of the following non-linear least squares problem: :: minimize F(steer, acc) = 0.5 * sum( (wgx[i] * (x[i] - gx[i])) ** 2 + (wgy[i] * (y[i] - gy[i])) ** 2 + (wgr[i] * (r[i] - gr[i])) ** 2 + (wgv[i] * (v[i] - gv[i])) ** 2 + (ws * steer[i]) ** 2 + (wa * acc[i]) ** 2) i = 1 … N) subject to following unicycle motion model equations: x[i+1] = x[i] + cos(r[i]) * v[i] y[i+1] = y[i] + sin(r[i]) * v[i] r[i+1] = r[i] + steer[i] v[i+1] = v[i] + acc[i] min_steer < steer[i] < max_steer min_acc < acc[i] < max_acc for i = 0 .. N Weights wg* control adherence to the control points In a typical usecase wgx = wgy = 1 and wgr = wgv = 0

Returns

4 arrays (x, y, r, v) each of shape (N,)- the optimal trajectory.

Submodules