def step(self, dt: float, action) -> None:
        """
        Propagate the vehicle state given its actions.

        Integrate a modified bicycle model with a 1st-order response on the steering wheel dynamics.
        If the vehicle is crashed, the actions are overridden with erratic steering and braking until complete stop.
        The vehicle's current lane is updated.

        :param dt: timestep of integration of the model [s]
        """
        assert isinstance(action, dict)
        # self.action = action
        action = self.clip_actions(action)
        delta_f = action['steering']
        beta = np.arctan(1 / 2 * np.tan(delta_f))
        v = self.speed * np.array([math.cos(self.heading + beta), math.sin(self.heading + beta)])

        self._position += v * dt

        self.heading += self.speed * math.sin(beta) / (self.LENGTH / 2) * dt
        self.speed += action['acceleration'] * dt
        # for performance reason,
        # self.on_state_update()

        Propagate the vehicle state given its actions.

        Integrate a modified bicycle model with a 1st-order response on the steering wheel dynamics.
        If the vehicle is crashed, the actions are overridden with erratic steering and braking until complete stop.
        The vehicle's current lane is updated.

        :param dt: timestep of integration of the model [s]
        
metadrive/component/vehicle_model/kinematics.py