State space for Dubins vehicles
stateSpaceDubins object stores parameters and states in the Dubins
state space, which is composed of state vectors represented by [x,
y, θ]. x and y
are Cartesian coordinates, and θ is the orientation angle. The Dubins state
space has a lower limit on the turning radius (specified by the
MinTurningRadius property in the object) for navigating between states
and uses the shortest feasible curve to connect states.
creates a Dubins
state space object with default state bounds for x,
y, and θ.
space = stateSpaceDubins
space = stateSpaceDubins(
bounds for x, y,
and θ. The state values beyond the bounds are truncated to the bounds.
bounds, allows you to set the value of the StateBounds
Name — Name of state space
'SE2 Dubins' (default) | string
Name of state space, specified as a string.
NumStateVariables — Dimension of the state space
3 (default) | positive integer
This property is read-only.
Dimension of the state space, specified as a positive integer.
StateBounds — Bounds of state variables
[-100 100; -100 100; -3.1416 3.1416] (default) | 3-by-2 real-valued matrix
Bounds of state variables, specified as a 3-by-2 real-valued matrix.
The first row specifies the lower and upper bounds for the x state in meters.
The second row specifies the lower and upper bounds for the y state in meters.
The third row specifies the lower and upper bounds for the θ state in radians.
MinTurningRadius — Minimum turning radius
1 (default) | positive scalar
Minimum turning radius in meters, specified as a positive scalar. The minimum turning radius is for the smallest circle the vehicle can make with maximum steer in a single direction.
Plan Path Between Two States in Dubins State Space
Create a Dubins state space and set the minimum turing radius to
ss = stateSpaceDubins; ss.MinTurningRadius = 0.2;
occupancyMap-based state validator using the created state space.
sv = validatorOccupancyMap(ss);
Create an occupancy map from an example map and set map resolution as 10 cells/meter.
load exampleMaps map = occupancyMap(simpleMap,10); sv.Map = map;
Set validation distance for the validator.
sv.ValidationDistance = 0.01;
Update state space bounds to be the same as map limits.
ss.StateBounds = [map.XWorldLimits;map.YWorldLimits; [-pi pi]];
Create the path planner and increase max connection distance.
planner = plannerRRT(ss,sv); planner.MaxConnectionDistance = 0.3;
Set the start and goal states.
start = [0.5,0.5,0]; goal = [2.5,0.2,0];
Plan a path with default settings.
rng(100,'twister'); % repeatable result [pthObj,solnInfo] = planner.plan(start,goal);
Visualize the results.
show(map); hold on; plot(solnInfo.TreeData(:,1),solnInfo.TreeData(:,2),'.-'); % tree expansion plot(pthObj.States(:,1), pthObj.States(:,2),'r-','LineWidth',2) % draw path