Differential steering
- class DiffSteer(W=1, **kwargs)[source]
Bases:
Unicycle- __init__(W=1, **kwargs)[source]
Create differential steering kinematic model
- Parameters:
W (
float) – vehicle width, defaults to 1kwargs (
Any) – additional arguments passed toVehicleBaseconstructor
Model the motion of a unicycle model with equations of motion given by:
\[\begin{split}\dot{x} &= v \cos \theta \\ \dot{y} &= v \sin \theta \\ \dot{\theta} &= \omega\end{split}\]where \(v = (v_R + v_L)/2\) is the velocity in body frame x-direction, and \(\omega = (v_R - v_L)/W\) is the turn rate.
- init(x0=None, control=None, animate=True)[source]
Initialize for simulation (superclass)
- Parameters:
x0 (
ndarray|Sequence[float] |None) – Initial state, defaults to value given to Vehicle constructor- Return type:
Performs the following initializations:
Clears the state history
Set the private random number generator to initial value
Sets state \(x = x_0\)
Sets previous velocity to zero
If a driver is attached, initialize it
If animation is enabled, initialize that
If animation is enabled by constructor and no animation object is given, use a default
VehiclePolygon("car")- Seealso:
- u_limited(u)[source]
Apply vehicle velocity and acceleration limits
- Parameters:
u (
ndarray|Sequence[float]) – Desired vehicle inputs \((v_L, v_R)\)- Returns:
Allowable vehicle inputs \((v_L, v_R)\)
- Return type:
Velocity and acceleration limits are applied to \(v\) and turn rate limits are applied to \(\omega\).
- deriv(x, u, limits=True)[source]
Time derivative of state
- Parameters:
- Returns:
state derivative \((\dot{x}, \dot{y}, \dot{\theta})\)
- Return type:
Returns the time derivative of state (3x1) at the state
xwith left and right wheel speedsu.\[\begin{split}\dot{x} &= v \cos \theta \\ \dot{y} &= v \sin \theta \\ \dot{\theta} &= \omega\end{split}\]where \(v = (v_R + v_L)/2\) is the velocity in body frame x-direction, and \(\omega = (v_R - v_L)/W\) is the turn rate.
If
limitsis True then speed and acceleration limits are applied to the wheel speedsu.- Seealso:
- Fv(x, odo)
Jacobian of state transition function df/dv
- Parameters:
- Returns:
Jacobian matrix
- Return type:
Returns the Jacobian matrix \(\frac{\partial \vec{f}}{\partial \vec{v}}\) for the given state and odometry.
- Fx(x, odo)
Jacobian of state transition function df/dx
- Parameters:
- Returns:
Jacobian matrix
- Return type:
Returns the Jacobian matrix \(\frac{\partial \vec{f}}{\partial \vec{x}}\) for the given state and odometry.
- __repr__()
Convert to string, same as
__str__()- Return type:
- Returns:
String representation of vehicle object
- property accel_max: float
Get maximum acceleration of vehicle (superclass)
- Returns:
maximum acceleration
- Return type:
Set by
VehicleBase()subclass constructor.- Seealso:
speed_max()steer_maxu_limited()
- add_driver(driver)
Add a driver agent (superclass)
- Parameters:
driver (
VehicleDriverBase) – a driver agent object- Return type:
Warning
Deprecated. Use
vehicle.control = driverinstead.- Seealso:
- property control: Union[ndarray, Sequence[float], Callable[..., ndarray | Sequence[float]], interp1d, VehicleDriverBase, None]
Get/set vehicle control (superclass)
- Getter:
Returns vehicle’s control
- Setter:
Sets the vehicle’s control
- Type:
2-tuple, callable, interp1d or VehicleDriver
This is the input to the vehicle during a simulation performed by
run(). The control input can be:a constant tuple as the control inputs to the vehicle
a function called as
f(vehicle, t, x)that returns a tuplean interpolator called as
f(t)that returns a tuplea driver agent, subclass of
VehicleDriverBase
Example:
>>> from roboticstoolbox import Bicycle, RandomPath >>> bike = Bicycle() >>> bike.control = RandomPath(workspace=10) >>> print(bike) Bicycle: x = [ 0, 0, 0 ] L=1, steer_max=1.41372, speed_max=inf, accel_max=inf
- property dt: float
Get sample time (superclass)
- Returns:
discrete time step for simulation
- Return type:
Set by
VehicleBase()subclass constructor. Used bystep()to update state.- Seealso:
- eval_control(control, x)
Evaluate vehicle control input (superclass method)
- Parameters:
- Raises:
ValueError – bad control
- Returns:
vehicle control inputs
- Return type:
Evaluates the control for this time step and state. Control is set by the
control()property to:a constant tuple as the control inputs to the vehicle
a function called as
f(vehicle, t, x)that returns a tuplean interpolator called as f(t) that returns a tuple
a driver agent, subclass of
VehicleDriverBase
Vehicle steering, speed and acceleration limits are applied to the result before being input to the vehicle model.
- f(x, odo, v=None)
State transition function
- Parameters:
- Returns:
predicted vehicle state
- Return type:
Predict the next state based on current state and odometry value.
vis a random variable that represents additive odometry noise for simulation purposes.\[f: \vec{x}_k, \delta_d, \delta_\theta \mapsto \vec{x}_{k+1}\]For particle filters it is useful to apply the odometry to the states of all particles and this can be achieved if
xis a 2D array with one state per row.vis ignored in this case.Note
This is the state update equation used for EKF localization.
- limits_va(v, v_prev)
Apply velocity and acceleration limits (superclass)
- Parameters:
- Returns:
allowed velocity
- Return type:
Determine allowable velocity given desired velocity, speed and acceleration limits.
Note
This function requires previous velocity,
v_prevto enable acceleration limiting. This is passed as a reference to a mutable value, a single-element list. This is reset to zero at the start of each simulation.
- plot_xy(*args, block=None, **kwargs)
Plot xy-path from history
- Parameters:
- Return type:
The \((x,y)\) trajectory from the simulation history is plotted as \(x\) vs \(y\).
- Seealso:
- plot_xyt(block=None, **kwargs)
Plot configuration vs time from history
- Parameters:
- Return type:
The \((x,y, heta)\) trajectory from the simulation history is plotted against time.
- polygon(q)
Bounding polygon at vehicle configuration
- Parameters:
q (
ndarray|Sequence[float]) – vehicle configuration \((x, y, heta)\)- Returns:
bounding polygon of vehicle at configuration
q- Return type:
- Raises:
ValueError – the vehicle has no bounding polygon
The bounding polygon of the vehicle is returned for the configuration
q. Can be used for collision checking using theintersects()method.- Seealso:
- property q: ndarray
Get vehicle state/configuration (superclass)
- Returns:
Vehicle state \((x, y, \theta)\)
- Return type:
ndarray(3)
- Seealso:
- property random: Generator
Get private random number generator
- Returns:
NumPy random number generator
- Return type:
Has methods including:
The generator is initialized with the seed provided at constructor time every time
init()is called.- Seealso:
- run(T=10, x0=None, control=None, animate=True)
Simulate motion of vehicle (superclass)
- Parameters:
T (
float) – Simulation time in seconds, defaults to 10x0 (
ndarray|Sequence[float] |None) – Initial state, defaults to value given to Vehicle constructorcontrol (
Union[ndarray,Sequence[float],Callable[...,ndarray|Sequence[float]],interp1d,VehicleDriverBase,None]) – vehicle control inputs, defaults to Noneanimate (
bool) – Enable graphical animation of vehicle, defaults to True
- Returns:
State trajectory, each row is \((x,y,\theta)\).
- Return type:
Runs the vehicle simulation for
Tseconds and optionally plots an animation. The methodstep()performs each time step.The control inputs are provided by
controlwhich can be:a constant tuple as the control inputs to the vehicle
a function called as
f(vehicle, t, x)that returns a tuplean interpolator called as
f(t)that returns a tuple, see SciPy interp1da driver agent, subclass of
VehicleDriverBase
This is evaluated by
eval_control()which applies velocity, acceleration and steering limits.The simulation can be stopped prematurely by the control function calling
stopsim().Note
the simulation is fixed-time step with the step given by the
dtattribute set by the constructor.integration uses rectangular integration.
- Seealso:
- run_animation(T=10, x0=None, control=None, format=None, file=None)
Animate motion of vehicle (superclass)
- Parameters:
T (
float) – Simulation time in seconds, defaults to 10x0 (
ndarray|Sequence[float] |None) – Initial state, defaults to value given to Vehicle constructorcontrol (
Union[ndarray,Sequence[float],Callable[...,ndarray|Sequence[float]],interp1d,VehicleDriverBase,None]) – vehicle control inputs, defaults to None
- Raises:
ValueError –
fileis None forformat"gif"or"mp4", orformatis not recognised- Returns:
Matplotlib animation object
- Return type:
FuncAnimation|str|None
Runs the vehicle simulation for
Tseconds and returns an animation in various formats:``format`` ``file`` description ============ ========= ============================ ``"html"`` str, None return HTML5 video ``"jshtml"`` str, None return JS+HTML video ``"gif"`` str return animated GIF ``"mp4"`` str return MP4/H264 video ``None`` return a ``FuncAnimation`` object
The allowables types for
fileare given in the second column. A str value is the file name. IfNoneis an option then return the video as a string.For the last case, a reference to the animation object must be held if used for animation in a Jupyter cell:
anim = robot.run_animation(T=20)
The control inputs are provided by
controlwhich can be:a constant tuple as the control inputs to the vehicle
a function called as
f(vehicle, t, x)that returns a tuplean interpolator called as
f(t)that returns a tuple, see SciPy interp1da driver agent, subclass of
VehicleDriverBase
This is evaluated by
eval_control()which applies velocity, acceleration and steering limits.The simulation can be stopped prematurely by the control function calling
stopsim().Note
the simulation is fixed-time step with the step given by the
dtattribute set by the constructor.integration uses rectangular integration.
- property speed_max: float
Get maximum speed of vehicle (superclass)
- Returns:
maximum speed
- Return type:
Set by
VehicleBase()subclass constructor.- Seealso:
accel_max()steer_maxu_limited()
- step(u=None, animate=True, pause=True)
Step simulator by one time step (superclass)
- Returns:
odometry \((\delta_d, \delta_\theta)\)
- Return type:
Obtain the vehicle control inputs
Integrate the vehicle state forward one timestep
Updates the stored state and state history
Update animation if enabled.
Returns the odometry
veh.step((vel, steer))for a Bicycle vehicle modelveh.step((vel, turn_rate))for a Unicycle vehicle modelveh.step()as above but control is taken from thecontrolattribute which might be a function or driver agent.
Example:
>>> from roboticstoolbox import Bicycle >>> bike = Bicycle() # default bicycle model >>> bike.step((1, 0.2)) # one step: v=1, γ=0.2 array([0.1 , 0.0203]) >>> bike.x array([0.1 , 0. , 0.0203]) >>> bike.step((1, 0.2)) # another step: v=1, γ=0.2 array([0.1 , 0.0203]) >>> bike.x array([0.2 , 0.002 , 0.0405])
Note
Vehicle control input limits are applied.
- stopsim()
Stop the simulation (superclass)
A control function can stop the simulation initiated by the
runmethod.
- property verbose: bool
Get verbosity (superclass)
- Returns:
verbosity level
- Return type:
Set by
VehicleBasesubclass constructor.
- property workspace: ndarray | None
Size of robot workspace (superclass)
- Returns:
workspace bounds [xmin, xmax, ymin, ymax]
- Return type:
ndarray(4)
Returns the bounds of the workspace as specified by constructor option
workspace
- property x: ndarray
Get vehicle state/configuration (superclass)
- Returns:
Vehicle state \((x, y, \theta)\)
- Return type:
ndarray(3)
- Seealso:
- property x0: ndarray
Get vehicle initial state/configuration (superclass)
- Returns:
Vehicle state \((x, y, \theta)\)
- Return type:
ndarray(3)
Set by
VehicleBasesubclass constructor. The state is set to this value at the beginning of each simulation run.