bsplinepolytraj

Сгенерируйте полиномиальные траектории с помощью B-сплайнов

Описание

пример

[q,qd,qdd,pp] = bsplinepolytraj(controlPoints,tInterval,tSamples) генерирует кусочную кубическую траекторию B-сплайна, которая падает в многоугольнике управления, заданном controlPoints. Траектория однородно производится между временами начала и конца, данными в tInterval. Функция возвращает положения, скорости и ускорения на входных выборках времени, tSamples. Функция также возвращает кусочный полином pp форма полиномиальной траектории относительно времени.

Примеры

свернуть все

Используйте bsplinepolytraj функция с данным набором 2D xy контрольных точек. B-сплайн использует эти контрольные точки, чтобы создать траекторию в многоугольнике. Моменты времени для waypoints также даны.

cpts = [1 4 4 3 -2 0; 0 1 2 4 3 1];
tpts = [0 5];

Вычислите траекторию B-сплайна. Функциональные выходные параметры положения траектории (q), скорость (qd), ускорение (qdd), временной вектор (tvec), и полиномиальные коэффициенты (pp) из полинома, который достигает waypoints использование трапециевидных скоростей.

tvec = 0:0.01:5;
[q, qd, qdd, pp] = bsplinepolytraj(cpts,tpts,tvec);

Постройте график результатов. Покажите контрольные точки и получившуюся траекторию в них.

figure
plot(cpts(1,:),cpts(2,:),'xb-')
hold all
plot(q(1,:), q(2,:))
xlabel('X')
ylabel('Y')
hold off

Figure contains an axes object. The axes object contains 2 objects of type line.

Постройте положение каждого элемента траектории B-сплайна. Эти траектории являются кубическими кусочными полиномами, параметрированными вовремя.

figure
plot(tvec,q)
hold all
plot([0:length(cpts)-1],cpts,'x')
xlabel('t')
ylabel('Position Value')
legend('X-positions','Y-positions')
hold off

Figure contains an axes object. The axes object contains 4 objects of type line. These objects represent X-positions, Y-positions.

Создайте waypoints, чтобы интерполировать с B-сплайном.

wpts1 = [0 1 2.1 8 4 3];
wpts2 = [0 1 1.3 .8 .3 .3];
wpts = [wpts1; wpts2];
L = length(wpts) - 1;

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

r = zeros(L+1, size(wpts,1));
A = eye(L+1);
for i= 1:(L-1)
    A(i+1,(i):(i+2)) = [1 4 1];
    r(i+1,:) = 6*wpts(:,i+1)';
end

Замените конечные точки и выберите r0 и rL.

A(2,1:3) = [3/2 7/2 1]; 
A(L,(L-1):(L+1)) = [1 7/2 3/2]; 

r(1,:) = (wpts(:,1) + (wpts(:,2) - wpts(:,1))/2)';
r(end,:) = (wpts(:,end-1) + (wpts(:,end) - wpts(:,end-1))/2)';

dInterior = (A\r)';

Создайте многоугольник полного контроля и используйте bsplinepolytraj вычислить полином с новыми контрольными точками

cpts = [wpts(:,1) dInterior wpts(:,end)];
t = 0:0.01:1;
q = bsplinepolytraj(cpts, [0 1], t);

Постройте график результатов. Покажите исходный waypoints, вычисленный многоугольник и интерполированный B-сплайн.

figure;
hold all
plot(wpts1, wpts2, 'o');
plot(cpts(1,:), cpts(2,:), 'x-');
plot(q(1,:), q(2,:));
legend('Original waypoints', 'Computed control polygon', 'B-spline');

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Original waypoints, Computed control polygon, B-spline.

[1] Farin, разделите 9.1

Входные параметры

свернуть все

Точки для многоугольника управления траектории B-сплайна в виде n-by-p матрица, где n является размерностью траектории и p, являются количеством контрольных точек.

Пример: [1 4 4 3 -2 0; 0 1 2 4 3 1]

Типы данных: single | double

Времена начала и конца для траектории в виде двухэлементного вектора.

Пример: [0 10]

Типы данных: single | double

Выборки времени для траектории в виде вектора. Выходное положение, q, скорость, qd, и ускорения, qdd, производятся в этих временных интервалах.

Пример: 0:0.01:10

Типы данных: single | double

Выходные аргументы

свернуть все

Положения траектории на данных выборках времени в tSamples, возвращенный как вектор.

Типы данных: single | double

Скорости траектории на данных выборках времени в tSamples, возвращенный как вектор.

Типы данных: single | double

Ускорения траектории на данных выборках времени в tSamples, возвращенный как вектор.

Типы данных: single | double

Кусочный полином, возвращенный как структура, которая задает полином для каждого раздела кусочной траектории. Можно создать собственное использование кусочных полиномов mkpp, или оцените полином в требуемые времена с помощью ppval. Структура содержит поля:

  • form: 'pp'.

  • breaks: p - вектор элемента времен, когда кусочная траектория изменяет формы. p является количеством waypoints.

  • coefs: n (p –1)-by-order матрица для коэффициентов для полиномов. n (p –1) является размерностью времен траектории количество pieces. Каждый набор строк n задает коэффициенты для полинома, который описал каждую переменную траекторию.

  • pieces: p –1. Количество пропусков минус 1.

  • order: Степень полинома + 1. Например, кубические полиномы имеют порядок 4.

  • dimN. Размерность положений контрольной точки.

Ссылки

[1] Farin, Джеральд Э. Кривые и поверхности для компьютера помогли геометрическому проекту: практическое руководство. Сан-Диего, CA: Academic Press, 1993.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Введенный в R2019a