Этот пример показывает, как использовать нечеткую систему, чтобы смоделировать инверсную кинематику в 2D объединенной роботизированной руке.
Кинематика является наукой о движении. В 2D объединенной роботизированной руке, учитывая углы соединений, уравнения кинематики дают местоположение совета руки. Инверсная кинематика относится к противоположному процессу. Учитывая желаемое местоположение для совета роботизированной руки, что должно углы соединений быть, чтобы определить местоположение совета руки в желаемом местоположении. Обычно существует больше чем одно решение и может время от времени быть трудной проблемой решить.
Это - типичная проблема в робототехнике, которая должна быть решена, чтобы управлять роботизированной рукой, чтобы выполнить задачи, которые это определяется, чтобы сделать. На 2-мерном входном пробеле, с 2D объединенной роботизированной рукой и, учитывая желаемую координату, проблема уменьшает до нахождения этих двух включенных углов. Первый угол между первой рукой и землей (или независимо от того, что это присоединено). Второй угол между первой рукой и второй рукой.
Рисунок 1: Рисунок, показывающий 2D объединенную роботизированную руку с этими двумя углами, theta1
и theta2
Для простых структур как 2D объединенная роботизированная рука возможно математически вывести углы в соединениях, учитывая желаемое местоположение совета руки. Однако с более комплексными структурами (например: роботизированные руки n-соединения, действующие на 3-мерном входном пробеле), выведение математического решения для инверсной кинематики может оказаться сложным.
Используя нечеткую логику, мы можем создать нечеткую систему вывода, которая выводит инверсную кинематику, если прямая кинематика проблемы известна, следовательно обходя потребность разработать аналитическое решение. Кроме того, нечеткое решение легко понятно и не требует, чтобы специальное фоновое знание постигало и оценило его.
В следующем разделе широкая схема для разработки такого решения описана, и позже, подробные шаги разрабатываются.
Поскольку прямые формулы кинематики для 2D объединенной роботизированной руки известны, координаты X и Y совета руки выведены для целой области значений углов вращения двух соединений. Координаты и углы сохранены, чтобы использоваться в качестве данных тренировки, чтобы обучить ANFIS (адаптивная нейронечеткая система вывода) сеть.
Во время обучения сеть ANFIS учится сопоставлять координаты (x
, y
) к углам (theta1
, theta2
). Обученная сеть ANFIS затем используется в качестве части большей системы управления, чтобы управлять роботизированной рукой. Зная желаемое местоположение роботизированной руки, система управления использует обученную сеть ANFIS, чтобы вывести угловые положения соединений и прикладывает силу к соединениям роботизированной руки соответственно, чтобы переместить его в желаемое местоположение.
ANFIS обозначает адаптивную нейронечеткую систему вывода. Это - гибридный нейронечеткий метод, который приносит способности к обучению нейронных сетей к нечетким системам вывода. Алгоритм изучения настраивает функции принадлежности Sugeno-типа нечеткая система вывода с помощью учебных данных о вводе/выводе.
В этом случае данные о вводе/выводе относятся к набору данных "координат/углов". Координаты действуют как вход к ANFIS и угловому действию как вывод. Алгоритм изучения учит, что ANFIS, чтобы сопоставить координаты с углами посредством процесса вызвал обучение. В конце обучения обученная сеть ANFIS изучила бы карту ввода - вывода и быть готова быть развернутой в большее решение для системы управления.
Позвольте theta1
быть углом между первой рукой и землей. Позвольте theta2
быть углом между второй рукой, и первая рука (Обратитесь к рисунку 1 для рисунка). Позвольте длине первой руки быть l1
и той из второй руки быть l2
.
Примите, что первое соединение ограничило свободу вращаться, и это может вращаться между 0 и 90 градусами. Точно так же примите, что второе соединение ограничило свободу вращаться и может вращаться между 0 и 180 градусами. (Это предположение устраняет потребность обработать некоторые особые случаи, которые перепутают беседу.) Следовательно, 0<=theta1<=pi/2
и 0<=theta2<=pi
.
Рисунок 2: Рисунок, показывающий весь возможный theta1
и значения theta2
.
Теперь, для каждой комбинации theta1
и значения theta2
координаты X и Y выведены с помощью прямых формул кинематики.
Следующий фрагмент кода показывает, как данные сгенерированы для всей комбинации theta1
и значений theta2
и сохраненные в матрицу, которая будет использоваться в качестве данных тренировки. Причина того, чтобы сохранить данные в двух матрицах объяснена в следующем разделе.
l1 = 10; % length of first arm l2 = 7; % length of second arm theta1 = 0:0.1:pi/2; % all possible theta1 values theta2 = 0:0.1:pi; % all possible theta2 values [THETA1,THETA2] = meshgrid(theta1,theta2); % generate a grid of theta1 and theta2 values X = l1 * cos(THETA1) + l2 * cos(THETA1 + THETA2); % compute x coordinates Y = l1 * sin(THETA1) + l2 * sin(THETA1 + THETA2); % compute y coordinates data1 = [X(:) Y(:) THETA1(:)]; % create x-y-theta1 dataset data2 = [X(:) Y(:) THETA2(:)]; % create x-y-theta2 dataset
Щелкните здесь для невекторизованного кода
Следующий график показывает все точки данных X-Y, сгенерированные путем циклического повторения через различные комбинации theta1
и theta2
и выведения координат X и Y для каждого. График может быть сгенерирован при помощи фрагмента кода, показанного ниже. График проиллюстрирован далее для более легкого понимания.
plot(X(:),Y(:),'r.'); axis equal; xlabel('X','fontsize',10) ylabel('Y','fontsize',10) title('X-Y coordinates generated for all theta1 and theta2 combinations using forward kinematics formula','fontsize',10)
Рисунок 3: координаты X-Y сгенерированы для всего theta1
и комбинаций theta2
с помощью прямых формул кинематики
Один подход к созданию решения ANFIS для этой проблемы, должен создать две сети ANFIS, один, чтобы предсказать theta1
и другой, чтобы предсказать theta2
.
Для сетей ANFIS, чтобы смочь предсказать углы они должны быть обучены с демонстрационными данными ввода - вывода. Первая сеть ANFIS будет обучена с координатами X и Y, как введено и соответствующими значениями theta1
, как выведено. Матричный data1
содержит набор данных x-y-theta1
, требуемый обучать первую сеть ANFIS. Поэтому data1
будет использоваться в качестве набора данных, чтобы обучить первую сеть ANFIS.
Точно так же вторая сеть ANFIS будет обучена с координатами X и Y, как введено и соответствующими значениями theta2
, как выведено. Матричный data2
содержит набор данных x-y-theta2
, требуемый обучать вторую сеть ANFIS. Поэтому data2
будет использоваться в качестве набора данных, чтобы обучить вторую сеть ANFIS.
Чтобы обучить сеть ANFIS, сначала задайте опции обучения с помощью команды anfisOptions
. В данном примере задайте объект FIS с функциями принадлежности 7
для каждой входной переменной. Обучите систему в течение эпох 150
и подавите отображение Командного окна учебной информации.
opt = anfisOptions; opt.InitialFIS = 7; opt.EpochNumber = 150; opt.DisplayANFISInformation = 0; opt.DisplayErrorValues = 0; opt.DisplayStepSize = 0; opt.DisplayFinalResults = 0;
Обучите систему ANFIS с помощью первого набора данных тренировки, data1
.
disp('--> Training first ANFIS network.')
--> Training first ANFIS network.
anfis1 = anfis(data1,opt);
Измените количество входных функций принадлежности и обучите систему ANFIS с помощью второго набора данных тренировки, data2
.
disp('--> Training second ANFIS network.')
--> Training second ANFIS network.
opt.InitialFIS = 6; anfis2 = anfis(data2,opt);
В данном примере количество входных функций принадлежности и учебные эпохи было выбрано на основе экспериментирования с различными потенциальными ценностями.
anfis1
и anfis2
представляют две обученных сети ANFIS, которые будут развернуты в большей системе управления.
Если обучение завершено, две сети ANFIS учились аппроксимировать углы (theta1
, theta2
) как функция координат (x
, y
). Одно преимущество использования нечеткого подхода состоит в том, что сеть ANFIS может теперь аппроксимировать углы для координат, которые подобны, но не точно то же самое, когда это было обучено с. Например, обученные сети ANFIS теперь способны к приближению углов для координат, которые находятся между двумя точками, которые были включены в обучающий набор данных. Это позволит итоговому контроллеру перемещать руку гладко во входной пробел.
У нас теперь есть две обученных сети ANFIS, которые готовы быть развернутыми в большую систему, которая использует эти сети, чтобы управлять роботизированными руками.
Обучение сетей, важное продолжает, шаг должен подтвердить сети, чтобы определить, как хорошо сети ANFIS выполнили бы в большей системе управления.
Поскольку эта проблема в качестве примера имеет дело с 2D объединенной роботизированной рукой, формулы инверсной кинематики которой могут быть выведены, возможно протестировать ответы, которые сети ANFIS производят с ответами из выведенных формул.
Давайте примем, что для сетей ANFIS важно иметь низкие ошибки в рабочем диапазоне 0<x<2
и 8<y<10
.
x = 0:0.1:2; % x coordinates for validation y = 8:0.1:10; % y coordinates for validation
theta1
и значения theta2
выведены математически из координат X и Y с помощью формул инверсной кинематики.
[X,Y] = meshgrid(x,y); c2 = (X.^2 + Y.^2 - l1^2 - l2^2)/(2*l1*l2); s2 = sqrt(1 - c2.^2); THETA2D = atan2(s2,c2); % theta2 is deduced k1 = l1 + l2.*c2; k2 = l2*s2; THETA1D = atan2(Y,X) - atan2(k2,k1); % theta1 is deduced
Щелкните здесь для невекторизованного кода
THETA1D
и THETA2D
являются переменными, которые содержат значения theta1
, и theta2
вывел использование формул инверсной кинематики.
theta1
и значения theta2
, предсказанные обученными anfis сетями, получены при помощи команды evalfis
, который оценивает FIS для данных входных параметров.
Здесь, evalfis
используется, чтобы узнать FIS выходные параметры для тех же x-y значений, используемых ранее в формулах инверсной кинематики.
XY = [X(:) Y(:)]; THETA1P = evalfis(anfis1,XY); % theta1 predicted by anfis1 THETA2P = evalfis(anfis2,XY); % theta2 predicted by anfis2
Теперь, мы видим, как близко FIS выходные параметры относительно выведенных значений.
theta1diff = THETA1D(:) - THETA1P; theta2diff = THETA2D(:) - THETA2P; subplot(2,1,1); plot(theta1diff); ylabel('THETA1D - THETA1P','fontsize',10) title('Deduced theta1 - Predicted theta1','fontsize',10) subplot(2,1,2); plot(theta2diff); ylabel('THETA2D - THETA2P','fontsize',10) title('Deduced theta2 - Predicted theta2','fontsize',10)
Ошибки находятся в области значений 1e-3
, которая является довольно большим количеством для приложения, в котором она используется. Однако это не может быть приемлемо для другого приложения, в этом случае параметры к функции anfis
можно настроить, пока приемлемое решение не прибывается. Кроме того, другие методы как входной выбор и альтернативные способы смоделировать проблему могут быть исследованы.
Теперь, учитывая определенную задачу, такую как роботы, берущие объект в сборочном конвейере, большая система управления будет использовать обученные сети ANFIS в качестве ссылки, во многом как интерполяционная таблица, чтобы определить, каковы углы рук должны быть, учитывая желаемое местоположение для совета руки. Зная желаемые углы и текущие углы соединений, система будет прикладывать силу соответственно на соединениях рук, чтобы переместить их к желаемому местоположению.
invkine команда запускает графический интерфейс пользователя, который показывает, как две обученных сети ANFIS выполняют, когда спросили проследить эллипс.
Рисунок 4: графический интерфейс пользователя для моделирования инверсной кинематики.
Две сети ANFIS, используемые в примере, были предварительно обучены и развертываются в большую систему, которая управляет советом 2D объединенного манипулятора, чтобы проследить эллипс на входном пробеле.
Эллипс, который будет прослежен, может быть перемещен. Переместите эллипс в немного отличающееся местоположение и наблюдайте, как система отвечает путем перемещения совета роботизированной руки от ее текущего местоположения до самой близкой точки на новом местоположении эллипса. Также заметьте, что система отвечает гладко, пока эллипс, который будет прослежен, находится в отмеченных пятнах 'x', которые представляют сетку данных, которая использовалась, чтобы обучить сети. Если эллипс перемещен вне области значений данных, с которыми это было обучено, сети ANFIS отвечают непредсказуемо. Это подчеркивает важность наличия соответствующих и представительных данных для обучения. Данные должны быть сгенерированы на основе ожидаемой области значений операции, чтобы избежать такой непредсказуемости и проблем нестабильности.