M-File Help: Unicycle | View code for Unicycle |
vehicle class
This concrete class models the kinematics of a differential steer vehicle (unicycle model) on a plane. For given steering and velocity inputs it updates the true vehicle state and returns noise-corrupted odometry readings.
init | initialize vehicle state |
f | predict next state based on odometry |
step | move one time step and return noisy odometry |
control | generate the control inputs for the vehicle |
update | update the vehicle state |
run | run for multiple time steps |
Fx | Jacobian of f wrt x |
Fv | Jacobian of f wrt odometry noise |
gstep | like step() but displays vehicle |
plot | plot/animate vehicle on current figure |
plot_xy | plot the true path of the vehicle |
add_driver | attach a driver object to this vehicle |
display | display state/parameters in human readable form |
char | convert to string |
plotv | plot/animate a pose on current figure |
x | true vehicle state: x, y, theta (3x1) |
V | odometry covariance (2x2) |
odometry | distance moved in the last interval (2x1) |
rdim | dimension of the robot (for drawing) |
L | length of the vehicle (wheelbase) |
alphalim | steering wheel limit |
maxspeed | maximum vehicle speed |
T | sample interval |
verbose | verbosity |
x_hist | history of true vehicle state (Nx3) |
driver | reference to the driver object |
x0 | initial state, restored on init() |
Odometry covariance (per timstep) is
V = diag([0.02, 0.5*pi/180].^2);
Create a vehicle with this noisy odometry
v = Unicycle( 'covar', diag([0.1 0.01].^2 );
and display its initial state
v
now apply a speed (0.2m/s) and steer angle (0.1rad) for 1 time step
odo = v.step(0.2, 0.1)
where odo is the noisy odometry estimate, and the new true vehicle state
v
We can add a driver object
v.add_driver( RandomPath(10) )
which will move the vehicle within the region -10<x<10, -10<y<10 which we can see by
v.run(1000)
which shows an animation of the vehicle moving for 1000 time steps between randomly selected wayoints.
Robotics, Vision & Control, Chap 6 Peter Corke, Springer 2011
Unicycle object constructor
v = Unicycle(va, options) creates a Unicycle object with actual odometry covariance va (2x2) matrix corresponding to the odometry vector [dx dtheta].
'W', W | Wheel separation [m] (default 1) |
'vmax', S | Maximum speed (default 5m/s) |
'x0', x0 | Initial state (default (0,0,0) ) |
'dt', T | Time interval |
'rdim', R | Robot size as fraction of plot window (default 0.2) |
'verbose' | Be verbose |
Convert to a string
s = V.char() is a string showing vehicle parameters and state in a compact human readable format.
be called from a continuous time integrator such as ode45 or Simulink
Predict next state based on odometry
xn = V.f(x, odo) is the predicted next state xn (1x3) based on current state x (1x3) and odometry odo (1x2) = [distance, heading_change].
xn = V.f(x, odo, w) as above but with odometry noise w.
Jacobian df/dv
J = V.Fv(x, odo) is the Jacobian df/dv (3x2) at the state x, for odometry input odo (1x2) = [distance, heading_change].
Jacobian df/dx
J = V.Fx(x, odo) is the Jacobian df/dx (3x3) at the state x, for odometry input odo (1x2) = [distance, heading_change].
Update the vehicle state
odo = V.update(u) is the true odometry value for motion with u=[speed,steer].
© 1990-2014 Peter Corke.