Манипуляционные ИРС: подготовка сцены в симуляторе CoppeliaSim

Share Button

Методист по олимпиадной робототехнике Университета Иннополис Алексей Овсянников рассказывает, как использовать симулятор CoppeliaSim для тренировок и отладки алгоритмов робота.

Подготовка сцены МанИРС в симуляторе CoppeliaSim

В преддверии курсов повышения квалификации по подготовке к Innopolis Open in Robotics, которые пройдут в Университете Иннополис 1-7 марта, мне хотелось бы опубликовать некоторые материалы для слушателей. Надеюсь, что кому-то они упростят подготовку. Для других это возможность подробнее узнать, что именно будет на курсах.

Начнем с номинации Манипуляционные ИРС. Научно-методический комитет предполагает использование симулятора для тренировок и отладки алгоритма робота. Существует несколько достаточно распространенных симуляторов, некоторые из них узкоспециализированы (например, манипуляторы определенных фирм-производителей), другие подходят для более широкого спектра роботов и задач. Лично мне приходилось работать с симулятором V-REP, который недавно переименовали в CoppeliaSim. Он имеет как платную коммерческую версию, так и бесплатную для образовательного некоммерческого использования. Из основных возможностей стоит отметить наличие подробных справочных материалов, хорошее быстродействие и невысокую нагрузку на компьютер при проведении симуляции, возможность написания управляющих скриптов на языках LUA (используется как основной), C/C++, Python, Java, MatLab через внешние API-команды. Ну и, конечно, в него можно загружать собственные модели роботов и окружения. Именно этот процесс я и опишу в данной статье.

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

Процесс подготовки сцены можно разделить на следующие этапы:

  • Создание модели робота в САПР,
  • Создание модели полигона и игровых элементов в САПР,
  • Экспорт модели робота в формат URDF,
  • Импорт модели робота URDF в симулятор,
  • Импорт модели полигона и игровых элементов в САПР,
  • Указание свойств и параметров всех объектов в симуляторе.

Можно обойтись и без экспорта модели робота в формат URDF. Он нужен для сохранения информации о подвижных сочленениях робота. Можно и в самом симуляторе указать связи между звеньями робота, его колесами и приводами. Но лично мне удобнее это делать в специализированном САПР, чем в симуляторе. Я постараюсь показать оба варианта.

Рассмотрим все этапы подробнее.

Создание модели робота в САПР

Можно использовать любую систему автоматического проектирования, удобную и привычную для Вас. Нам потребуется нарисовать модель робота и задать ограничивающие связи между элементами, соответствующие механическим ограничениям. Например, достаточно задать совпадение осей колес и вала мотора, или вращение звена вокруг основания. Очевидно, что модель робота состоит не из одной сплошной детали, а представляет собой сборку из нескольких деталей.

Для младшей категории у меня получился вот такой робот:

Создание модели робота в САПР

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

Для старшей категории хорошо подходит манипулятор с кинематикой SCARA. Она отличается высокой скоростью работы, так как почти все движения звеньев происходят в одной плоскости, а вверх-вниз движется либо первое, либо последнее звено. Можно было даже скачать готовую модель робота, например с сайта GrabCAD, но я нарисовал собственную модель:

манипулятор с кинематикой SCARA

В обеих моделях я старался указать материал деталей. Это будет полезно при переносе через URDF — САПР посчитает массы и легче будет в дальнейшем настроить параметры объектов. Цвет, к сожалению, не переносится в симулятор, его придется указывать повторно.

При переносе удобнее расположить детали робота в стартовом, «нулевом» положении. Сделать это проще в САПР, поэтому задаем его. Не стоит создавать лишние связи между звеньями. Если необходимо выставить детали робота параллельно или до полного совпадения плоскостей, то можно создать подобную связь и удалить ее — деталь останется в том же положении, но ее легко можно передвинуть.

детали робота в стартовом, "нулевом" положении

детали робота в стартовом, "нулевом" положении

Создание модели полигона и игровых элементов в САПР

Процесс похож на создание модели робота. Точные параметры полигона и игровых элементов можно найти на странице номинаций (младшая и старшая) в разделе «Техническое задание на изготовление полигона и реквизита». Создаем модели основания, подставок, объектов по указанным размерам; объединяем их в сборку.

Опять же, удобнее сразу в САПР расположить детали ровно так, как хочется видеть их на сцене. Тут стоит упомянуть одну особенность — симуляторам очень сложно просчитывать физику и поведение объектов, проникающих друг в друга или расположенных ближе, чем на 1 мм друг к другу. Подобные объекты могут «выстрелить» — разлететься в разные стороны в первый момент симуляции или в момент их взаимного проникновения. Поэтому можно пойти на небольшую хитрость — «повесить» кубики и шарики на 1 мм над своими подставками. В начале симуляции они упадут на свои места почти без инерции. Можно будет их приподнять и в самом симуляторе, это дело вкуса.

Вот тут красный кубик приподнят на 1 мм над подставкой, а синий остался на исходной позиции:

Кубики и шары для робототехники

В итоге получились два таких полигона:

Полигон роботов

Полигон для робототехники

В младшей категории я раскрасил объекты, в старшей оставил белыми. В симуляторе все-равно придется им задавать правильные цвета, но далее возможны два варианта действий, оба я хочу показать на разных полигонах. В младшей категории я дал имя каждому игровому объекту в зависимости от его цвета и формы (RedBall, BlueCube, GreenCubeHole), а в старшей назвал объекты согласно их расположению (BigCube1, SmallCube2, Indicator9). В младшей категории я один раз раскрашу объекты и буду их перемещать в разные позиции, чтобы проводить симуляции с разными расстановками, так как в ней все объекты перемещаются по прямым влево-вправо и вперед-назад. В старшей категории перемещать объекты придется по окружности с центром в середине поля, это не очень удобно делать в симуляторе, поэтому я буду просто перекрашивать объекты на разных позициях.

Экспорт модели робота в формат URDF

URDF (Universal Robotic Description Format — универсальный формат описания роботов) широко используется в ROS и подходит для переноса информации о роботе в симулятор. Формат описывает геометрию звеньев робота и их сочленения, датчики и вспомогательную информацию о них (инерции, массы, цвета). К сожалению, не все САПР умеют сохранять в этот формат. Например, для AutoCAD, Fusion и SolidWorks эта функция реализована через сторонние плагины и дополнения. Покажу процесс на примере SolidWorks.

После того, как модель готова, необходимо скачать SW2URDF Exporter — расширение для SolidWorks. Оно подходит для 64-битной версии SolidWorks 2018 и более поздних. Проще всего использовать откомпилированный файл-установщик, достаточно запустить и следовать инструкциям. Но можно попытаться использовать исходный код, следуя инструкциям по указанной ссылке.

Далее необходимо в SolidWorks’е зайти в меню «Инструменты — добавления»:

Инструменты - добавления Solidworks

Откроется новое окно со списком доступных добавлений-расширений. Отметим галочками «Активные» и «Запуск» строку SW2URDF, нажмем ОК:

Работа программе Solidworks

Теперь важный момент — если меню SolidWorks не на английском языке, то нужный пункт в нем не появится. В этом случае необходимо зайти в то же меню «Инструменты» и открыть «Параметры». В появившемся окне находим «Настройки пользователя — Общие — Использовать меню на английском языке». Изменения появятся после перезапуска программы:

Важный момент симулятор и SoldWorks

Перезапускаем, открываем требуемую модель и в меню «File» видим искомый пункт Export as URDF.

Export as URDF

Далее можно двигаться согласно этому видео (просмотр доступен только на YouTube). Инструмент создаст оси согласно связям, заданным в модели. Необходимо будет указать имена звеньев, связей и типы соединений (взаимных движений звеньев, кинематических пар). Можно немного поэкспериментировать и подобрать нужные, но, в основном, будут использоваться две-три: continuous для неограниченного вращения (ограничим в самом симуляторе), prismatic для поступательного движения и fixed для жестко зафиксированных деталей (например, датчик или схват закреплены на подвижной каретке). Нажимаем «Preview and Export» и переходим в новое окно. Лимиты, то есть крайние положения при поворотах и перемещениях звеньев можно не задавать.

На этом следующем шаге проверяем, чтобы массы звеньев были адекватны. Если мы верно задавали размеры и материалы деталей, то они будут приближенными к действительным.

Импорт модели робота URDF в симулятор

В указанном выше видео показан процесс импорта моделей в симулятор CoppeliaSim (который раньше назывался V-REP). Используем плагин «URDF import», выбираем сохраненный файл URDF, дожидаемся окончания импорта, получаем модель, белую как чистый лист:

Модель робота в симуляторе

Теперь этот чистый лист надо «заполнить» — задать параметры объектов, чем займемся чуть позже, после….

Импорт модели полигона и игровых элементов в САПР

В том же САПР, где нарисована модель полигона и объектов, выбираем «Сохранить как» и выбираем один из доступных форматов: OBJ, STL. Они служат для переноса геометрии объектов между разными программами, подойдут и для переноса в симулятор. Скорее всего, каждый объект сохранится отдельным файлом, но это не страшно, их можно будет добавить одной операцией.

В CoppeliaSim идем в меню «File — Import — Mesh».

File - Import - Mesh

Находим все объекты в формате STL или OBJ и выбираем их все («рамочкой» или через зажатый Shift или Ctrl).

STL или OBJ

Следующий шаг достаточно важен: в появившемся окне необходимо снять галку «Auto scalling» и установить масштаб (Scaling) равным 0.001 — именно через точку. Скорее всего Ваш САПР при сохранении OBJ / STL за единицу измерения принимал миллиметры, а симулятор воспринимает их как метры и увеличивает модель в 1000 раз. Если при создании полигона в САПР за единицу измерения принимались дюймы, сантиметры или иные единицы измерения, то потребуется дополнительно считать масштаб.

аш САПР при сохранении OBJ / STL

Здесь стоит рассказать про одну хитрость, используемую в модели старшей категории. Игровые объекты в ней «утоплены» в полигон, расстояние между кубиком и полигоном составляет всего 1 мм. Это вызывает ошибки при расчетах столкновений и кубики «выстреливают» из своих позиций. Поэтому мы просто увеличили масштаб всей сцены в 10 раз: робота, всех элементов. Это потянуло за собой необходимость увеличивать массы объектов, силу приводов и т.д., но теперь кубики располагаются на расстоянии 10 мм от полигона и не вызывают ошибок расчетов. Далее, для упрощения, я буду показывать все действия на примере младшей категории, чтобы не углубляться в пересчет размеров, массы и других параметров.

В результате импорта получаем такую модель:

Хитрости моделирования роботов

Все объекты полигона расположены верно друг относительно друга, но стоят вертикально. Ничего страшного, надо их повернуть на 90 градусов. Выбираем все элементы полигона в списке слева и нажимаем кнопку Rotate.

Rotate симулятор робота

В появившемся окне переходим на вкладку Rotation и внимательно смотрим, вокруг какой оси надо повернуть полигон. В правом нижнем углу скриншота видны оси сцены и становится понятно, что поворачивать полигон надо вокруг оси Х. Вводим в нужное окно число 90 и нажимаем «Rotate selection».

Rotate selection

Платформа повернулась и даже легла на пол сцены.

Платформа повернулась и даже легла на пол сцены

Теперь ее нужно передвинуть так, чтобы совпали опоры робота и зоны основания полигона. Не снимая выделения, так как двигать будем сразу все объекты, нажимаем кнопку «Object/item shifr».

item-shifr

В появившемся окне выбираем самый маленький доступный шаг перемещения (0.001) и оси, вдоль которых будем двигать объекты. После этого их можно «захватить» левой кнопкой мыши и перемещать вдоль выбранных осей.

robo-mode

Добиваемся точного совпадения опор робота и игрового полигона. В процессе подгонки я заметил, что полигон не лег на пол сцены, а висит над ним, поэтому пришлось сместить его вниз по оси Z.

Z

Давайте теперь посмотрим на список объектов в симуляторе. Имена деталей и осей робота перенеслись корректно, а игровые элементы и полигон потеряли их и называются ShapeNN. Что ж, придется восстановить, переименовав каждый, для этого достаточно просто дважды щелкнуть по имени объекта в списке. Русские буквы в именах недопустимы.

shape

shape2

Указание свойств и параметров всех объектов в симуляторе

Переходим к самому интересному. В первую очередь, нам надо указать параметры кинематических пар робота. Находим в списке объекты с подобными значками:

simul

Это приводы робота, связи, которые могут управляться из скрипта — им можно будет указать положение или скорость вращения. Если модель робота переносилась не через URDF, то подобные приводы придется создавать вручную, связывая узлы робота. Инструкция по созданию робота с подобными связями доступна в официальных справочных материалах. Дважды щелкаем по объекту открывается окно его настроек:

В разделе Mode выбираем «Passive mode» для того, чтобы управлять положением привода из скрипта, или «Torque/force mode», чтобы управлять силой и крутящим моментом привода из скрипта. Второй режим позволит указать силу/момент привода и проверить, достаточно ли их для поднятия объектов. Подробнее о режимах можно почитать в официальной справке. Нам пока достаточно выбрать режим «Passive mode».

В разделе Configuration необходимо выбрать минимальную и максимальную позиции (то есть ограничения) для движений и поворотов или установить галочку «Position in cyclic» для неограниченного вращательного движения. Если при экспорте из САПР робот был в нулевом положении, то можно его и указать в окне текущей позиции.

Если используется режим «Torque/force mode», то имеет смысл зайти в настройки динамики привода, нажав кнопку «Show dynamic properties dialog»:

Здесь можно настроить максимальную силу/момент привода, например, подсмотрев их на сайте производителя конкретного мотора, начальную скорость движения или вращения привода (если хотим сделать активный элемент, например, конвейер).

 

Теперь перейдем к настройкам игровых объектов и полигона. Изначально они все отключены для физически расчетов — не будут падать под действием силы тяжести, не будут отскакивать друг от друга, будут пролетать через другие объекты. Вот это и настроим.

Сам полигон и подставки (в младшей категории) должны быть несмещаемые, как бы приклеенные жестко к полу сцены, но при попадании на них игровых объектов они должны учитываться, пружинить. Поэтому заходим в свойства основания и переходим в настройки динамики.

Ставим галочку «Body is respondable», обозначая этим, что объект учитывается при соударениях. Ставим все галки локальной и глобальной масок — учитывать соударения со всеми объектами.

Галочку «Body is dynamic» не ставим, тем самым «замораживая» объект в пространстве — он сам не двигается, но от него могут отскакивать другие объекты.

Можно зайти в редактирование материала и попробовать настроить то, как сильно он будет пружинить, изгибаться и сминаться и т.д. Но для решения задач олимпиады это избыточно.

Выберем теперь свойства какого-нибудь кубика или шарика:

sharika

Подобный объект не только учитывается при соударениях, но и имеют собственную динамику: будет падать под действием силы тяжести, отскакивать при соударениях. Для корректного расчета динамики необходимо указать массу объекта. Для кубиков в младшей категории это примерно 30 граммов, для шариков — до 20 граммов и т.д.

Посмотрим внимательно на основное окно свойств игровых объектов — там есть замечательная кнопка «Adjust color», позволяющая задать цвет объекта (и даже его прозрачность, свечение, пульсацию и т.д.). В появившемся окне выбираем «Ambient/diffuse component» и устанавливаем RGB-компоненты цвета. На скриншоте официальный синий цвет Lego.

Официальный синий цвет Lego

После установки свойств игровым объектам необходимо вернуться к модели робота. Во-первых, его части тоже должны учитываться при соударениях с игровыми объектами, во-вторых, его тоже не мешает покрасить. Выбираем те детали робота, которые будут двигаться и участвовать в расчетах при симуляции. Это объекты со словом «respondable» в имени.

Объектам, в имени которых содержится «visual», можно задать цвет детали.

Все перенесенные из САПР модели роботов, полигона и игровых элементов перенесены, осталось только добавить схват. Открываем библиотеку стандартных компонентов и роботов, выбираем «Components — grippers — suction pad». Это модель пневматического схвата.

Добавим модель на сцену простым перетягиванием. Выскакивает окно с кратким описанием модели. Обратите внимание, схват немного больше наших игровых элементов, значит необходимо его уменьшить.

go-simulator

Заходим в свойства объекта, переходим на вкладку Common и внизу выбираем Scalling. В появившемся окне выбираем масштаб (меньше единицы — уменьшение, больше единицы — увеличение).

Scalling

Scalling

Добиваемся подходящего размера и уже знакомым инструментом Object shift перемещаем его к рабочему органу робота:

Object shift

Теперь надо в списке объектов перетянуть объект «Suction pad» на тот «respondable» объект, который обозначает рабочий орган. В моем случае это «End_Effector_respondable»:

End_Effector_respondable

Для старшей номинации я использовал другой схват, с двумя пальцами:

robot-modelling-simulator

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

В следующей части мы рассмотрим основы написания управляющих скриптов для нашей модели робота или подключения внешней программы. Это облегчит начало работы на курсах. Оставайтесь на связи!

Share Button

Нет комментариев.

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

© 2014-2024 Занимательная робототехника, Гагарина Д.А., Гагарин А.С., Гагарин А.А. All rights reserved / Все права защищены. Копирование и воспроизведение в любой форме запрещено. Политика конфиденциальности. Соглашение об обработке персональных данных.
Наверх