Спроектируйте траекторию со скоростными пределами Используя трапециевидный скоростной профиль

В этом примере показано, как использовать трапециевидный скоростной профиль, чтобы спроектировать траекторию с входными границами, а не параметрами.

trapveltraj функция создает траектории с трапециевидными скоростными профилями. Эти траектории следуют за путем с тремя сегментами ускорения, постоянной скорости и замедления между всеми их waypoints. Можно изменить эти траектории путем определения параметров, чтобы создать желаемый профиль, но существует много приложений, требуют набора границ вместо этого, таких как пределы на ускорении или скорости. В таких приложениях необходимо сначала перевести эти границы в параметрированную траекторию, которая и выполнима и удовлетворяет ожидаемым границам. В этом примере используйте helperProfileForMaxVel функция помощника, чтобы создать выполнимые трапециевидные профили, учитывая связанную скорость.

Основной trapveltraj Использование

Если только ускорение, постоянная скорость и замедление известны, можно создать трапециевидную траекторию профиля скорости путем интерполяции waypoints по каждому измерению с помощью заданных параметров.

% Define a set of 2-D waypoints and connect them using a trapezoidal
% profile where each segment has a duration of 1 second
wpts = [-1 1 .3; 1 1 -1];
[q,qd,qdd,t] = trapveltraj(wpts,100,EndTime=1);

Визуализируйте результаты при помощи helperPlotTaskSpaceTraj функция помощника, которая создает фигуру, которая строит 2D траекторию слева и положение и скорость относительно времени справа. Начиная со всего соответствия времени окончания эта траектория поражает и свой вертикальный и горизонтальный waypoints одновременно, делая его подходящим для многочисленных приложений.

tpts = 0:size(wpts,2)-1;
helperPlotTaskSpaceTraj("EndTime = 1",t,q,qd,wpts,tpts);

Figure contains 3 axes objects and another object of type subplottext. Axes object 1 with title 2-D Trajectory contains 2 objects of type line. Axes object 2 with title Position vs Time contains 4 objects of type line. These objects represent X, Y. Axes object 3 with title Velocity vs Time contains 2 objects of type line. These objects represent X, Y.

Определите ограничения Используя параметры профиля как границы

Попытайтесь создать траекторию для двух степеней свободы робот (с 2 степенями свободы), где максимальная объединенная скорость составляет 0,5 рад/с, с помощью того же waypoints. Задайте пиковую скорость траектории как 0.5. Это устанавливает заданную скорость достигать в каждом сегменте траектории, и потому что расстояния между waypoints могут варьироваться через размерности, каждая размерность может иметь различную длину сегмента. Это может создать непреднамеренные результаты.

Визуализируйте результаты. Сгенерированная траектория приемлема, если AI должен только соединить первый и последний waypoints вовремя, но различные длины сегмента по измерениям, может сделать его недостаточным для дополнительных задач, таких как предотвращение столкновения, или при использовании траектории, чтобы соответствовать точкам в трехмерном пространстве. Если траектория должна соответствовать каждому waypoint, можно улучшить его путем определения времени окончания. Это гарантирует, что каждый сегмент имеет ту же длину.

[q,qd,qdd,t] = trapveltraj(wpts,100,PeakVelocity=0.5);
helperPlotTaskSpaceTraj("PeakVelocity = 0.5 rad/s",t,q,qd,wpts);

Figure contains 3 axes objects and another object of type subplottext. Axes object 1 with title 2-D Trajectory contains 2 objects of type line. Axes object 2 with title Position vs Time contains 2 objects of type line. These objects represent X, Y. Axes object 3 with title Velocity vs Time contains 2 objects of type line. These objects represent X, Y.

Трапециевидный скоростной обзор профиля

Трапециевидная траектория профиля скорости соединяет waypoints использование профиля движения, который останавливается в каждом waypoint, и где waypoint-to-waypoint движением управляет следующий профиль движения:

Как показано в изображении выше, скоростной профиль имеет четыре параметра:

  • Время окончания — Длительность каждого сегмента между двумя waypoints

  • Пиковая Скорость Пиковая скорость для каждого сегмента

  • Ускоряющее Время — Время, проведенное на ускорении и фазах замедления каждого сегмента

  • Пиковое Ускорение — Величина ускорения, примененного во время ускорения и фаз замедления каждого сегмента

Можно полностью задать профиль путем определения двух из них. Когда вы обеспечиваете только один параметр, trapveltraj автоматически присваивает второй параметр так, чтобы средняя скорость каждого сегмента была промежуточной между двумя допустимыми границами, детализированными в Ограничениях для Объединения Технических требований Параметра.

Математически, этот профиль задает сегменты на интервале [0, endTime], где каждый сегмент имеет ускоряющую фазу, фазу постоянной скорости и фазу замедления. Продолжительности ускорения и фаз замедления, accelTime, равны.

  1. Ускоряющая фаза — для t = [0, accelTime], d2dt2s(t)=a,ddts(t)=at,s(t)=at22

  2. Фаза постоянной скорости для t = [accelTimeВремя окончанияaccelTime], d2dt2s(t)=0,ddts(t)=v,s(t)=vt-v22a

  3. Фаза замедления для t = [endTimeaccelTimeВремя окончания], d2dt2s(t)=-a,ddts(t)=a(endTime-t),s(t)=(2av*endTime-2v2)(2a)-a2(t-endTime)2

Ограничения для объединения технических требований параметра

Проект профиля приводит к двум ограничивающим ограничениям. Величина пиковой скорости должна быть:

  • Пиковая скорость должна быть больше средней скорости: peakVelocity>s(endTime)-s(0)endTime

  • Пиковая скорость должна быть меньше чем или равна дважды средней скорости:peakVelocity<2(s(endTime)-s(0)endTime)

Эти ограничения выведены из общей длины сегмента |s|=|s(EndTime)-s(0)|, который фиксируется с любыми двумя waypoints и следует из интеграла скорости, i.e. область трапецоида:

Первые ограничительные множества самая низкая допустимая пиковая величина скорости. Это происходит, когда движение проводит большую часть количества времени на постоянной скорости:

Во втором случае ускорение и фазы замедления являются бесконечно малой величиной, приводящей к почти прямоугольному скоростному профилю, который имеет общую площадь A=(Width*Length), или |s|=|peakVelocity|*(endTime). Следовательно для этого случая, чтобы успешно выполниться, величина пиковой скорости должна равняться средней скорости |s|endTime. На практике ускорение / фазы замедления никогда не могут быть действительно бесконечно малы (Ускоряющее Время> 0), который вместо этого делает это ограничением неравенства: peakVelocity>|s|endTime.

Второе ограничение задает самую высокую допустимую пиковую скорость. Это происходит, когда движение проводит как можно больше времени, ускоряющегося к пиковой скорости:

В этой ситуации нет никакой фазы постоянной скорости, приводящей к треугольному скоростному профилю, который имеет общую площадь A=Height*Length2 или |s|=|PeakVelocity|*(EndTime)2. Поэтому в этом экстремальном значении, величина пиковой скорости должна равняться дважды пиковой скорости, приводящей к второму ограничению, |PeakVelocity|>2|s|endTime.

Эти два ограничения задают жизнеспособную область значений трапециевидных скоростных профилей для данного сегмента. Следующая диаграмма сравнивает три таких траектории, с первым ограничением, показанным с помощью пунктирных линий, второе, показанное с пунктирными линиями и примером трапециевидного профиля в рамках этих ограничений, показавших сплошной линией. Все вероятные трапециевидные траектории профиля для этого сегмента должны упасть beteen пунктирные и пунктирные линии как некоторое изменение примера сплошной линии.

Ограничения на комбинации параметра

В общем случае любые два из четырех параметров определения (Время окончания, Пиковая Скорость, Пиковое Ускорение, Ускоряющее Время) могут использоваться вместе, но необходимо гарантировать, что возможно сгенерировать выполнимые траектории в рамках профиля. Например, предположите, что между рад точки 0 и 1 существует сегмент, и желаемая длительность сегмента составляет 1 секунду.

[q,qd]=trapveltraj([0 1],100,'EndTime',1,'PeakVelocity',1);

Учитывая ограничения, выведенные выше, для сегмента от s = 0 к s = 1, ограничения подразумевают что: |PeakVelocity|(EndTime)>1 и |PeakVelocity|(EndTime)<2, тогда как со значениями, используемыми выше, первое условие не соблюдают. Это могло быть разрешено e.g. путем повышения пиковой скорости до 1,5.

Ограничения могут также возникнуть, потому что ограничения работают на одну размерность сегмента, но не для всех них. Например, предположите, что существует сегмент между [0 0] и [1 2] с присвоенными значениями на время сегмента и пиковую скорость:

[q,qd]=trapveltraj([0 1; 0 2],100,'EndTime',1,'PeakVelocity',1.5);

Это перестанет работать, потому что ограничения только работают на первую размерность:

  • Для первой размерности, от s = 0 к s = 1, ограничения подразумевают что: |PeakVelocity|(EndTime)>1 и |PeakVelocity|(EndTime)<2

  • Для второго измерения, от s = 0 к s = 2, ограничения подразумевают что: |PeakVelocity|(EndTime)>2 и |PeakVelocity|(EndTime)<4

Очевидно, что этим ограничениям нельзя соответствовать, если те же значения используются для обеих размерностей. Вместо этого необходимо использовать различные пиковые скорости для каждой размерности, чтобы гарантировать, что waypoints может быть поражен тем же временем окончания. Например, следующее решение работает:

wpts2 = [0 1; 0 2];
[q,qd,qdd,t]=trapveltraj(wpts2,100,'EndTime',1,'PeakVelocity',[1.5; 2.5]);
helperPlotTaskSpaceTraj('Different Peak Velocities for each Dimension',t,q,qd,wpts2);

Figure contains 3 axes objects and another object of type subplottext. Axes object 1 with title 2-D Trajectory contains 2 objects of type line. Axes object 2 with title Position vs Time contains 2 objects of type line. These objects represent X, Y. Axes object 3 with title Velocity vs Time contains 2 objects of type line. These objects represent X, Y.

Выбор параметров, которые удовлетворяют всем ограничениям по каждому измерению, может быть сложным. В следующем разделе функция помощника вместо этого создается, чтобы помочь упростить этот процесс.

Создайте функцию помощника, чтобы перевести скоростные границы, чтобы профилировать параметры

helperProfileForMaxVel функция помощника принимает ограничивающую скорость сегмента и выводит набор времени окончания и скоростей, которые гарантируют, что все размерности имеют ту же длину сегмента, и что максимальная скорость любого сегмента меньше чем или равна заданному скоростному максимуму.

function [endTimes,peakVels] = helperProfileForMaxVel(wpts,maxVelocity)
    %   helperProfileForMaxVel Generate parameters for a trapezoidal velocity profile so it will meet velocity constraints
    %   
    %   This function creates a fast trapezoidal profile with a specified velocity limit as an upper bound.
    %   Copyright 2021 The MathWorks, Inc.
    
    % Check that maxVelocity is a scalar
    validateattributes(maxVelocity,{'numeric'},{'scalar'});

    % Find segment lengths along each dimension of waypoints.
    segLengths = abs(diff(wpts,1,2));

    % Find minimum endTime by assigning maximum velocity to longest segment
    maxSegLengths = max(segLengths,[],1);
    endTimeLowerBound = (maxSegLengths/maxVelocity);

    % Choose acceleration by multiplying endTime to be greater than lower bound
    greaterThanFactor = 1.1;
    endTimes = repmat(greaterThanFactor*endTimeLowerBound,size(wpts,1),1);

    % Determine min and max peak velocity for each segment and dimension
    % Choose largest velocity that doesn't exceed maximum velocity
    minPeakVels = segLengths./endTimes;
    maxPeakVels = 2*segLengths./endTimes;

    peakVels = min(maxPeakVels,maxVelocity);
    peakVels = max(minPeakVels,peakVels);

    % Replace any zero-values with peak velocity
    peakVels(peakVels==0) = maxVelocity;
end

Используйте функцию помощника, чтобы создать траекторию для waypoints, которому связали максимальную скорость 0,5 рад/с.

[endTimes,peakVels] = helperProfileForMaxVel(wpts,0.5);
[q,qd,qdd,t,pp] = trapveltraj(wpts,100,EndTime=endTimes,PeakVelocity=peakVels);
tpts = [0 cumsum(endTimes(1,:))];
helperPlotTaskSpaceTraj("Helper Function with Maximum Velocity 0.5 rad/s",t,q,qd,wpts,tpts);

Figure contains 3 axes objects and another object of type subplottext. Axes object 1 with title 2-D Trajectory contains 2 objects of type line. Axes object 2 with title Position vs Time contains 4 objects of type line. These objects represent X, Y. Axes object 3 with title Velocity vs Time contains 2 objects of type line. These objects represent X, Y.