mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
Added matlab code samples.
All of these code samples currently are mis-identified in my repositories. I'm donating them to the cause.
This commit is contained in:
56
samples/Matlab/lane_change.m
Normal file
56
samples/Matlab/lane_change.m
Normal file
@@ -0,0 +1,56 @@
|
||||
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
|
||||
Reference in New Issue
Block a user