Введение. При моделировании систем управления движением роботов требуется решать задачи кинематики и динамики для их исполнительных механизмов. Существует обратная и прямая задача кинематики. Прямая задача кинематики состоит в определении пространственного положения и ориентации характерной точки, как правило, рабочего инструмента манипулятора робота по известным значениям обобщенных координат. Обратная задача кинематики, как и прямая задача, является одной из основных задач кинематического анализа и синтеза. Для управления положением звеньев и ориентацией рабочего инструмента манипулятора возникает необходимость решения обратной задачи кинематики.
Большинство аналитических подходов для решения обратной задачи кинематики являются достаточно затратными с точки зрения вычислительных процедур. Одним из альтернативных подходов является использование нейронных сетей.
Входные данные. Рассмотрим трехзвенный манипулятор с параметрами, приведенными в таблице 1.
Для построения компьютерной модели манипулятора воспользуемся пакетом Matlab с помощью свободно распространяемого Toolbox RBT. На входные данные нейронной сети подается положение и ориентация конечного узла манипулятора. Зная параметры манипулятора, можем смоделировать входные данные для нейронной сети с помощью решения прямой задачи кинематики. Получим набор данных, связывающих значение обобщенных координат и положения рабочего инструмента. Внешний вид рабочей области – набора обучающих данных для нейронной сети приведен на рис.1. Задача нейронной сети спрогнозировать конфигурацию соединения узлов манипулятора, которые максимально будут соответствовать заданному положению и ориентации в пространстве. Решая прямую задачу кинематики, были получены для каждого угла сервопривода координаты конечной точки манипулятора
Всего был получен набор для обучения из 3000 данных.
Нейронная сеть. Для создания нейронной сети будет использоваться библиотека Tensorflow для Python. В начале набор разбивается на тренировочные и тестовые данные.
X_train, X_test, y_train, y_test = train_test_split(data_x, data_y, test_size=0.2, random_state=42)
Новая сеть обучается «с нуля» в течение пятиста эпох и затем оценивается получившийся результат на тестовых данных. Ниже приведен фрагмент программы.
def base_model():
model = Sequential() model.add(Dense(32,input_dim=6,activation='relu'))
model.add(Dense(64,activation='relu'))
model.add(Dense(128,activation='relu'))
model.add(Dense(32,activation='relu')) model.add(Dense(3, init='normal'))
model.compile(loss='mean_absolute_error', optimizer = 'adam', metrics=
['accuracy']) model.summary()
return model
clf = KerasRegressor(build_fn=base_model, epochs=500, batch_size=20,verbose=2) clf.fit(X_train,y_train)
После обучения сети ее можно использовать для прогнозирования.
res = clf.predict(X_test)
Точность: 99%
Результат обучения. На Рисунке 2 линией отмечено движение робота, рассчитанное при помощи решения обратной задачи кинематики. Точками отмечены положения робота, построенное с помощью нейронной сети. Как видно траектории частично совпали. Возможно, для улучшения результата потребуется увеличить набор данных и добавить в нейронную сеть несколько дополнительных слоев.
Заключение. В ходе выполнения работы была решена обратная задача кинематики с помощью\нейросетевого подхода. Задача была решена для трехзвенного манипулятора. С увеличением числа звеньев, задача резко усложняется из-за возможности возникновения множества решений. С этой целью, в дальнейшем нейронная сеть будет усовершенствована. Входные данные для обучения нейронной сети можно решать несколькими способами. Как с использованием подхода «Programming by demonstration», так и с помощью решения прямой задачи кинематики. В настоящей работе решение прямой задачи кинематики реализовывалось с помощью пакета Matlab и компьютерной модели манипулятора, построенной на основе подхода Денавита – Хартенберга.