l5kit.kinematic package

class l5kit.kinematic.AckermanPerturbation(random_offset_generator: Callable, perturb_prob: float)

Bases: l5kit.kinematic.perturbation.Perturbation

perturb(history_frames: numpy.ndarray, future_frames: numpy.ndarray, **kwargs: dict) → 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, **kwargs: dict) → 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

Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray] – 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.1, max_acc: float = 0.1, min_steer: float = - 0.2, max_steer: float = 0.2) → 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

[Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]] – 4 arrays (x, y, r, v) each of shape (N,)

  • the optimal trajectory.