пятница, 29 ноября 2013 г.

Основы мехатроники и робототехники 1: Планирование траектории 4-3-4 в системе Matlab


В настоящей статье рассматривается планирование траектории движения манипулятора в системе Matlab.
MATLAB (сокращение от англ. «Matrix Laboratory», в русском языке произносится как Матлаб) — пакет прикладных программ для решения задач технических вычислений и одноимённый язык программирования, используемый в этом пакете.

         1. Общие сведения
Планирование траекторий движения манипулятора – это задача выбора закона управления, обеспечивающего движение манипулятора вдоль некоторой заданной траектории. Перед началом движения манипулятора важно знать:
1.     существуют ли на его пути какие-либо препятствия;
2.     накладываются ли какие-либо ограничения на траекторию схвата.
         В зависимости от ответов на эти вопросы выбирается один из четырех типов управления манипулятором (табл. 1).

Таблица 1. Типы управления манипулятором



Препятствия на пути манипулятора


Присутствуют


Отсутствуют





Ограничения на траекторию манипулятора



Присутствуют

  I. Автономное планирование траектории, обеспечивающее обход препятствий, плюс регулирование движения вдоль выбранной траектории в процессе работы манипулятора
II. Автономное планирование траектории плюс регулирование движения вдоль выбранной траектории в процессе работы манипулятора

Отсутствуют

 III. Позиционное управление плюс обнаружение и обход препятствий в процессе движения
IV. Позиционное управление

         Рассмотрим планирование траектории манипулятора при отсутствии препятствий (II и IV тип). Задача состоит в разработке математического аппарата для выбора и описания желаемого движения манипулятора между начальной и конечной точками траектории.
          При планировании траекторий обычно применяется один из двух подходов:
1.        Задается точный набор ограничений (например, непрерывность и гладкость) на положение, скорость и ускорение обобщенных координат манипулятора в некоторых (называемых узловыми) точках траектории. Планировщик траекторий после этого выбирает из некоторого класса функций (как правило, среди многочленов, степень которых не превышает некоторое заданное n) функцию, проходящую через узловые точки и удовлетворяющую в них заданным ограничениям. Определение ограничений и планирование траектории производится в присоединенных координатах.
2.        Задается желаемая траектория манипулятора в виде некоторой аналитически описываемой функции, как, например, прямолинейную траекторию в декартовых координатах. Планировщик производит аппроксимацию заданной траектории в присоединенных или декартовых координатах.
          Планирование в присоединенных переменных обладает тремя преимуществами:
1)    задается поведение переменных, непосредственно управляемых в процессе движения манипулятора;
2)    планирование траектории может осуществляться в реальном времени;
3)    траектории в присоединенных переменных легче планировать.
4)     Должны быть сведены к минимуму бесполезные движения типа «блуждания».
Konsp
Рисунок 1. Блок-схема планировщика траекторий

         Недостаток – сложность определения положения звеньев и схвата в процессе движения. Это необходимо для предотвращения столкновения с препятствием.

         2. Реализация программы для расчёта траектории типа 4-3-4
         Программа рассчитывает траекторию типа 4-3-4 для одного сочленения манипулятора при условии отсутствия препятствий.
         На вход программы подаётся точный набор ограничений на положение, скорость и ускорение обобщенных координат манипулятора в узловых точках траектории.
         Программа рассчитывает неизвестные коэффициенты 
        

Результаты работы программы:
1.     Ввод данных
 
Рисунок 2. Окна ввода входных данных

2.     Полученные коэффициенты (вектор-столбец С):
Элемент матрицы коэффициентов C №1-1: 20
Элемент матрицы коэффициентов C №1-2: 40
Элемент матрицы коэффициентов C №1-3: 600
Элемент матрицы коэффициентов C №1-4: -1100.3559
Элемент матрицы коэффициентов C №1-5: 470.3559
Элемент матрицы коэффициентов C №2-1: 30
Элемент матрицы коэффициентов C №2-2: -269.4661
Элемент матрицы коэффициентов C №2-3: 272.4025
Элемент матрицы коэффициентов C №2-4: -12.9363
Элемент матрицы коэффициентов C №2-5: 0
Элемент матрицы коэффициентов C №3-1: 20
Элемент матрицы коэффициентов C №3-2: 91.3484
Элемент матрицы коэффициентов C №3-3: 25.9548
Элемент матрицы коэффициентов C №3-4: -195.9548
Элемент матрицы коэффициентов C №3-5: 118.6516

Сравним полученные коэффициенты с рассчитанными в (3), стр.
239:
Из приведённых данных следует, что полученные в ходе выполнения программы коэффициенты, верны.

3.     Построение графиков положения, скорости и ускорения от времени.
Рисунок 3. График положения
Рисунок 4. График скорости
Рисунок 5. График ускорения


Текст программы:


планирование траектории типа 4-3-4
clc; clear;

% Ввод входных данных:
title = 'Ввод временных интервалов';
promt = {'Введите интервал 1:''Введите интервал 2:',...
         'Введите интервал 3:''Введите шаг построения графиков:'};
lines = 1;
defval = {'20''30''10''0.001'};
answer = inputdlg(promt, title, lines, defval); Окно ввода данных
t1 = str2num(char(answer(1)));
t2 = str2num(char(answer(2)));
t3 = str2num(char(answer(3)));
stp = str2num(char(answer(4)));

title = 'Ввод входных параметров';
promt = {'Начальное положение схвата: ''Начальная скорость робота:'...
         'Начальное ускорение: ''Положение при захвате (в момент t1)',...
         'Положение схвата в момент t2',...
         'Конечное положение схвата (в момент t3)''Конечная скорость',...
         'Конечное ускорение'};
lines = 1;
defval = {'20''2''3''30''20''60''3''3'};
% Данные по умолчанию введены для первого сочленения
% (смШахинпурстр. 237)
answer = inputdlg(promt, title, lines, defval);
Qi0 = str2num(char(answer(1)));
Qi01 = str2num(char(answer(2)));
Qi02 = str2num(char(answer(3)));
Qi1 = str2num(char(answer(4)));
Qi2 = str2num(char(answer(5)));
Qi3 = str2num(char(answer(6)));
Qi31 = str2num(char(answer(7)));
Qi32 = str2num(char(answer(8)));

% Матрица B (стр. 231):
B(1:9, 1:9) = 0;
% Задаём элементы матрицы:
B(1, 1) = 1;
B(1, 2) = 1;

B(2, 1) = 3*(t1^(-1));
B(2, 2) = 4*(t1^(-1));
B(2, 3) = -(t2^(-1));

B(3, 1) = 6*(t1^(-2));
B(3, 2) = 12*(t1^(-2));
B(3, 4) = -2*(t2^(-2));

B(4, 3) = 1;
B(4, 4) = 1;
B(4, 5) = 1;

B(5, 3) = t2^(-1);
B(5, 4) = 2*(t2^(-1));
B(5, 5) = 3*(t2^(-2));
B(5, 6) = -(t3^(-1));

B(6, 4) = 2*(t2^(-2));
B(6, 5) = 6*(t2^(-2));
B(6, 7) = -2*(t3^(-2));

B(7, 6:9) = 1;

B(8, 6) = 1;
B(8, 7) = 2;
B(8, 8) = 3;
B(8, 9) = 4;

B(9, 7) = 2;
B(9, 8) = 6;
B(9, 9) = 12;

Вектор-столбец сигма:
SIG(1:9, 1) = 0;
SIG(1, 1) = Qi1-(Qi0+Qi01*t1+0.5*Qi02*(t1^2));
SIG(2, 1) = -(Qi01+Qi02*t1);
SIG(3, 1) = -Qi02;
SIG(4, 1) = Qi2-Qi1;
SIG(7, 1) = Qi3-Qi2;
SIG(8, 1) = t3*Qi31;
SIG(9, 1) = (t3^2)*Qi32;

% Формула (4.8.34), стр. 230
Ctemp = B^(-1) * SIG;

% Матрица-столбец коэффициентов:
C(1, 1) = Qi0;
C(1, 2) = t1*Qi01;
C(1, 3) = 0.5*(t1^2)*Qi02;
C(1, 4) = Ctemp(1, 1);
C(1, 5) = Ctemp(2, 1);

C(2, 1) = Qi1;
C(2, 2) = Ctemp(3, 1);
C(2, 3) = Ctemp(4, 1);
C(2, 4) = Ctemp(5, 1);
C(2, 5) = 0;

C(3, 1) = Qi2;
C(3, 2) = Ctemp(6, 1);
C(3, 3) = Ctemp(7, 1);
C(3, 4) = Ctemp(8, 1);
C(3, 5) = Ctemp(9, 1);

for i=1:3
    for j=1:5
        msg=['Элемент матрицы коэффициентов C №', num2str(i), '-',...
            num2str(j),': ', num2str(C(i, j))];
        disp(msg);
    end
end
% Данные для построения графиков:
sum = 0;
% Первый участок:
for i=0:stp:1
    sum = sum+1;
    tim = stp*t1*(sum-1);
    T(sum) = tim;
    Position(1, sum) = C(1, 1)+C(1, 2)*i + C(1, 3)*(i^2)+C(1, 4)*(i^3)+...
        +C(1, 5)*(i^4);
    Speed(1, sum) = (C(1, 2) + 2*C(1, 3)*i + 3*C(1, 4)*(i^2)+4*C(1, 5)*...
        (i^3))/t1;
    Velocity(1, sum) = (2*C(1, 3)+6*C(1, 4)*i + 12*C(1, 5)*(i^2))/(t1^2);
end

Второй участок:
tmp1 = 0;
for i=stp:stp:(1-stp)
    sum = sum+1;
    tmp1 = tmp1+1;
    tim = t1 + t2*stp*(tmp1);
    T(sum) = tim;
    Position(1, sum) = C(2, 1)+C(2, 2)*i + C(2, 3)*(i^2)+C(2, 4)*(i^3);
    Speed(1, sum) = (C(2, 2) + 2*C(2, 3)*i + 3*C(2, 4)*(i^2))/t2;
    Velocity(1, sum) = (2*C(2, 3)+6*C(2, 4)*i)/(t2^2);
end

Третий участок
tmp2 = 0;
for i=0:stp:1
    sum = sum+1;
    tmp2 = tmp2+1;
    tim = t1+t2+t3*stp*(tmp2-1);
    T(sum) = tim;
    Position(1, sum) = C(3, 1)+C(3, 2)*i + C(3, 3)*(i^2)+C(3, 4)*(i^3)+...
        +C(3, 5)*(i^4);
    Speed(1, sum) = (C(3, 2) + 2*C(3, 3)*i + 3*C(3, 4)*(i^2)+4*C(3, 5)*...
        (i^3))/t3;   
    Velocity(1, sum) = (2*C(3, 3)+6*C(3, 4)*i + 12*C(3, 5)*(i^2))/(t3^2);   
end

% Построение графиков:
T1(1, 1:tmp1) = T(1, 1:tmp1);
T2(1, 1:sum-tmp2) = T(1, 1:sum-tmp2);

pos1(1, 1:tmp1) = Position(1, 1:tmp1);
pos2(1, 1:sum-tmp2) = Position(1, 1:sum-tmp2);

spd1(1, 1:tmp1) = Speed(1, 1:tmp1);
spd2(1, 1:sum-tmp2) = Speed(1, 1:sum-tmp2);

vel1(1, 1:tmp1) = Velocity(1, 1:tmp1);
vel2(1, 1:sum-tmp2) = Velocity(1, 1:sum-tmp2);

figure();
hold on;
grid on;
plot(T, Position);
plot(T2, pos2, 'g');
plot(T1, pos1, 'r');
ylabel('Положением');
xlabel('Времяс');

figure();
hold on;
grid on;
plot(T, Speed);
plot(T2, spd2, 'g');
plot(T1, spd1, 'r');
ylabel('Скорость, м/с');
xlabel('Время, с');

figure();
hold on;
grid on;
plot(T, Velocity);
plot(T2, vel2, 'g');
plot(T1, vel1, 'r');
ylabel('Ускорением/с*с');
xlabel('Время, с');

         3. Список используемой литературы
         1. Фу К., Гонсалес Р., Ли К.  Робототехника / Пер. с англ. — М.: Мир, 1989. — 624 с.
         2. Зенкевич С. Л,  Ющенко А. С. Управление роботами — М.: МГТУ им. Н. Э. Баумана, 2000.
         3. Шахинпур М. Курс робототехники / Пер. с англ. — М.: Мир, 1990. — 527 с.

Комментариев нет:

Отправить комментарий