Differential-drive vehicle model
differentialDriveKinematics creates a differential-drive vehicle model to
simulate simplified vehicle dynamics. This model approximates a vehicle with a single fixed
axle and wheels separated by a specified track width. The wheels can be driven independently.
Vehicle speed and heading is defined from the axle center. The state of the vehicle is defined
as a three-element vector, [x y theta], with a global
xy-position, specified in meters, and a vehicle heading,
theta, specified in radians. To compute the time derivative states for
the model, use the
function with input commands and the current robot state.
creates a differential drive kinematic model object with default property values.
kinematicModel = differentialDriveKinematics
sets properties on the object to the specified value. You can specify multiple
properties in any order.
kinematicModel = differentialDriveKinematics(Name,Value)
WheelRadius— Wheel radius of vehicle
0.05(default) | positive numeric scalar
The wheel radius of the vehicle, specified in meters.
WheelSpeedRange— Range of vehicle wheel speeds
[-Inf Inf](default) | two-element vector
The vehicle speed range is a two-element vector that provides the minimum and maximum vehicle speeds, [MinSpeed MaxSpeed], specified in meters per second.
TrackWidth— Distance between wheels on axle
0.2(default) | positive numeric scalar
The vehicle track width refers to the distance between the wheels, or the axle length, specified in meters.
VehicleInputs— Type of motion inputs for vehicle
"WheelSpeeds"(default) | character vector | string scalar
VehicleInputs property specifies the format of the model
input commands when using the
derivative function. Options are specified as one of the following
"WheelSpeeds" — Angular speeds for each of the wheels,
specified in radians per second.
"VehicleSpeedHeadingRate" — Vehicle speed and heading angular
velocity,specified in meters per second and radians per second respectively.
|Time derivative of vehicle state|
Create a Robot
Define a robot and set the initial starting position and orientation.
kinematicModel = differentialDriveKinematics; initialState = [0 0 0];
Simulate Robot Motion
tspan = 0:0.05:1; inputs = [50 40]; %Left wheel is spinning faster [t,y] = ode45(@(t,y)derivative(kinematicModel,y,inputs),tspan,initialState);
 Lynch, Kevin M., and Frank C. Park. Modern Robotics: Mechanics, Planning, and Control 1st ed. Cambridge, MA: Cambridge University Press, 2017.