mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
All of these code samples currently are mis-identified in my repositories. I'm donating them to the cause.
57 lines
1.7 KiB
Matlab
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
|