Files
linguist/samples/Matlab/lane_change.m
Jason Moore 9bb230d7c8 Added matlab code samples.
All of these code samples currently are mis-identified in my repositories. I'm
donating them to the cause.
2013-01-30 13:12:45 -08:00

57 lines
1.7 KiB
Matlab

function [x, y, t] = lane_change(start, width, slope, pathLength, speed, num, ...
type, varargin)
% Generates the time and coordinates for either a single or double lane change
% manuever at a particular speed.
%
% Parameters
% ----------
% start : float
% The starting point along the x axis in meters.
% width : float
% The width of the lane deviation.
% slope : float
% The slope of the lane change.
% pathLength : float
% The length of path.
% speed : float
% Speed of travel.
% num : integer
% Number of time steps.
% type : string
% Either 'single' or 'double'. A double lane change return to x = 0.
% laneLength : float, optional
% Length of the lane for a double lane change.
%
% Returns
% -------
% x : matrix, (num, 1)
% The longitudinal path.
% y : matrix, (num, 1)
% The lateral path.
% t : matrix, (num, 1)
% Time.
x = 0:pathLength / num:pathLength;
x = x';
t = x / speed;
y = zeros(length(x), 1);
endOfSlope = width / slope + start;
slopeInd = find((x > start) & (x <= endOfSlope));
y(slopeInd) = slope * (x(slopeInd) - start);
if strcmp(type, 'single')
theRest = slopeInd(end) + 1:length(y);
y(theRest) = width * ones(length(theRest), 1);
elseif strcmp(type, 'double');
if length(varargin) < 1
error('Double lane change needs length of lane.')
else
laneLength = varargin{1};
startOfSlope = start + laneLength - width / slope;
lane = find((x > endOfSlope) & (x <= startOfSlope));
y(lane) = width * ones(length(lane), 1);
downSlope = find((x > startOfSlope) & (x <= start + laneLength));
y(downSlope) = slope * (start + laneLength - x(downSlope));
end
end