Робот-манипулятор строит собственную кинематическую модель


Исследователи из Колумбийского университета (Нью-Йорк, США) разработали алгоритм, позволяющий роботу-манипулятору построить собственную кинематическую модель, которая затем может использоваться для управления его движениями.

Кинематическая  модель робота показывает показывает как робот двигается при работе его двигателей. Современные роботы-манипуляторы  работают исходя из кинематической  модели, которая в них уже реализована и запрограммирована изготовителем. Но, мы знаем, что, например, люди таких моделей не имеют и дети учатся контролировать свои движения руками и ногами, обучаясь понимать как управлять своим телом и планировать собственные действия.  Роботам тоже было бы полезно иметь собственную вычислительную  модель, позволяющую контролировать свои действия и планировать  возможные будущие действия, не проверяя их в физической реальности.

Новое исследование демонстрирует возможный подход к реализации данной проблемы. В качестве информации о движении робота-манипулятора WidowX 200 Robot Arm, исследователи использовали визуальную информацию, которая поступала от пяти 3D-камер RealSense D435i RGB-D. Камеры располагались следующим образом: 4 вокруг робота и одна сверху. Камеры были предварительно откалиброваны. Их изображения глубины  проецировались в облака точек, которые затем объединялись в одно общее облако точек (используя внешние параметры камеры).  Результирующее облако точек манипулятора создавалось путём отсечения всего выходящего за определенную границу сцены.

Чтобы «понять» как двигается манипулятор в ответ на различные моторные команды — управляющая программа заставляла манипулятор  принимать различные позы и изучала его движения.

Таким образом, сбор данных выглядел следующим образом: рука-манипулятор перемещалась случайным образом, что давало пару совместных значений и соответствующее им облако точек. Получение  каждой пары данных требовало менее 1 секунды (при моделировании) и целых  8 секунд при реальном действии. Всего исследователи собрали 10000 точек данных (при моделировании с помощью PyBullet) и 7888 точек реальных данных. Далее данные были разделены на обучающий  (90%), проверочный (5%) и тестовый (5%) наборы.

Необходимо отметить, что данные, полученные благодаря моделированию — были почти идеальными, благодаря отсутствию шумов на виртуальных изображениях камеры глубины и их точной калибровке. В реальных экспериментах, слияние облаков точек было очень зашумленным (из-за неточной информации о глубине, вызванной шумами датчика и калибровки камеры).

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

Координатная сеть — однослойный MLP (multilayer perceptron — многослойный перцептрон). Кинематическая сеть — 4-слойная MLP. Выходы этих двух сетей объединяются и подаются на третью 4-слойную MLP, для получения результирующего значения. В качестве нелинейности в сети использовались синусоидальные функции активации. Обучение шло 2000 эпох с использованием оптимизатора Adam. Для реализации сети использовался  фреймворк PyTorch и PyTorch Lightning. Для обучения использовалась видеокарта NVIDIA RTX 2080 Ti.

Для подачи на вход нейронной сети, входные координаты и входные суставные углы предварительно были нормализованы так, чтобы их среднее значение было 0, а диапазон был [-1,1].

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

Статьи

Ссылки

По теме


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение