Максим Куприн1[0000-0001-6183-092X], Игорь Осипов1[0000-0002-8884-4421], Аркадий Ключиков2[0000-0002-8657-6486], Никита Самойлов1[0000-0001-7998-7079]
1 Саратовский государственный технический университет имени Гагарина Ю.А., Россия, 410054, Саратов, Политехническая 77
2 ФГБОУ ВО Вавиловский университет, Россия, 410012, Саратов, Театральная площадь 1
1 kms0207@ya.ru, igoros7755@gmail.com, nikitasamokhin123@yandex.ru
2 Krok9407@mail.ru
Abstract. В рамках статьи рассмотрена возможность использования Unity как среды имитационного моделирования мобильных роботов, определены возможности Unity Editor для применения в имитационном моделировании. Оценена возможность использования стандартного набора инструментов разработки для имитации поведения механических соединений, кинематических цепей и физики твердых тел. Составлена схема архитектуры разработанной системы имитационного моделирования. Описаны способы реализации и функционал имитирующих модулей, таких как ModuleBaseScript для имитации жестких механических соединений, HingeBaseScript для - осевых соединений, ServoMotorScript и MotorBaseScript для - электродвигателей и сервоприводов, соответственно, MicrocontrollerBaseScript, GPIOBaseScript, DataTransferMasterScript для - микроконтроллеров, MotorDriverScript - драйверов электродвигателей, RangeFinderBaseScript – дальномеров и DataTransferSlaveScript для протоколов передачи данных. Произведена апробация полученного пакета инструментов, создана виртуальная модель мобильного робота с дальномером. Выявлены недостатки проекта и предложены пути их устранения.
Keywords: имитационное моделирование, компьютерное моделирование, мобильные роботы, игровой движок, PhysX, Unity.
1 Введение
На сегодняшний день программные средства применяются для проектирования на каждом этапе разработки робототехнических систем. Например: создание чертежей, 3D-моделей деталей, прототипирование электронных схем аппаратной части, математические расчеты и моделирование отдельных элементов робота, а также компиляция программной составляющей.[1-2] В совокупности эти процессы применяются в имитационном моделировании.
Для визуализации процесса имитационного моделирования применяются специализированные программные средства. Одним из способов является применение игровых движков, наиболее популярными из которых являются Unity и Unreal Engine. Исходя из проведенных исследований [3-4], для проектирования упрощенных робототехнических систем в учебных целях возможно применять Unity.
2 Постановка задачи
В связи c выявленной потребностью имитационного моделирования в области проектирования мобильных роботов была поставлена теоретическая цель изучить возможность применения Unity как среды имитационного моделирования мобильных роботов. Практической целью является разработка пакета для проектирования мобильных роботов с использованием средств Unity и оценка возможностей полученного средства. Поставлены следующие задачи:
· воссоздать приближенное к реалистичному поведение механики и электроники;
· реализовать интерфейс программирования микроконтроллеров;
· реализовать гибкую систему настроек элементов моделируемой платформы;
· обеспечить базу заготовленных элементов с возможностью расширения;
· реализовать протоколы передачи данных;
· реализовать одометрию, измерения с помощью датчиков.
3 Анализ возможности применения игрового движка Unity для проектирования систем имитационного моделирования
Unity – кроссплатформенный игровой движок для разработки 2D и 3D игр и приложений, однако на его основе разработчики создают плагины для моделирования роботов [5]. Среди разработанных проектов, применяющихся в исследовательских целях, существуют: симулятор марсохода Curiosity от NASA [6], система 3D-планировки Олимпийских Игр 2014 года [7], US Navy Virtual Training [8].
Для разработки в среде Unity применяется компонентно-ориентированный подход. Свойства объектов на сцене определяются компонентами. Имеющийся набор стандартных компонентов Unity не является достаточным для решения поставленной задачи. Однако в Unity существует возможность создавать собственные. Для написания скриптов используются языки программирования C# и JavaScript.
Одним из критериев, влияющих на качество имитационного моделирования робототехнических комплексов, являются реалистичность и точность физических вычислений. В Unity для определения степени взаимодействия трехмерных тел и внешних сил на них используется движок PhysX [9], который обладает достаточной точностью и стабильностью для моделирования простых роботов [10-14]. Физические аспекты, учитываемые в движке:
· физика твердых тел (rigidbody); [15];
· коллизия (collision); [16]
· соединения (joint); [17]
· кинематические цепи (articulations). [18]
Применение этих компонентов с учетом взаимосвязей и математической модели системы позволяет проводить симуляции механических соединений мобильных роботов и роботов-манипуляторов.
Стандартные средства Unity не предоставляют возможности имитации электронных компонентов, микроконтроллеров, электродвигателей и протоколов передачи данных. Для моделирования аппаратной части необходимо создать специализированные скрипты, расширяющие возможности среды разработки.
4 Архитектура системы проектирования имитационного моделирования мобильных роботов
Разработка механической системы робота трудоемкий процесс, а перенос в среду моделирования требует ряда дополнительных действий. Для автоматизации процесса добавления и настройки механических соединений были разработаны специальные модули в Unity. Полученная система скриптов позволяет моделировать мобильные робототехнические комплексы. Схема архитектуры системы проектирования имитационного моделирования мобильных робототехнических систем представлена на рисунке 1.
5 Разработка модулей имитации механической части робототехнического комплекса
Для упрощения работы пользователя с системой проектирования имитационного моделирования разработаны два базовых модуля: ModuleBaseScript и HingeBaseScript.
Первый модуль соединяет два объекта, фиксируя их положение относительно друг друга. Функционирование реализовано с использованием компонента Fixed joint [19]. Если у соединяемых элементов отсутствует компонент RigidBody, то он будет добавлен автоматически атрибутом RequireComponent [20].
Второй скрипт соединяет два объекта, создавая между ними осевое соединение с одной степенью свободы. Функционирование реализовано с использованием Hinge joint [21].
При запуске сцены эти элементы добавляются на все необходимые компоненты и задают значения параметров соединений.
Использование Hinge joint позволяет создать имитацию вращения двигателя или сервопривода. В компоненте присутствует возможность настройки вращающего момента и достижения указанной угловой скорости или указанного угла. Также Hinge joint настраивает ограничения угла поворота одного тела относительно другого (рис. 2).
Hinge joint имеет избыточное количество параметров, требующее большого количества времени для настройки. Поэтому были разработаны скрипты «ServoMotorScript» и «MotorBaseScript», имитирующие работу сервопривода и электродвигателя соответственно.
Скрипт «ServoMotorScript» обращается по ссылке GPIOScript к GPIO и получает значения порта с номером PortPWMId. Полученное значение находится в диапазоне от 0 до 1 и используется для расчета конечного положения вала сервопривода. Необходимый угол – произведение управляющего сигнала и максимального угла поворота вала.
MotorBaseScript настраивает Motor, максимальную угловую скорость, крутящий момент и получает управляющий сигнал с драйвера электромотора по ссылке «motorDriver». Произведение управляющего сигнала и максимальной угловой скорости передается в параметр «Target velocity».
Для управления аппаратной частью робота применяется микроконтроллер. Модуль, имитирующий его работу, обладает свойствами:
· управление внешними устройствами через GPIO порты;
· передача данных через специальные протоколы;
· программирование и взаимодействия с внешними устройствами;
· работа с таймерами и временем.
Имитация работы микроконтроллера реализована с использованием трех скриптов: «MicrocontrollerBaseScript», «GPIOBaseScript», «DataTransferMasterScript».
MicrocontrollerBaseScript является базовым для имитации работы микроконтроллера. Скрипт содержит ссылки на GPIOBaseScript и DataTransferMasterScript, осуществляя управление GPIO портами и шиной данных, а также отрабатывает алгоритм в соответствие с программным кодом.
GPIOBaseScript используется для имитации работы интерфейса ввода/вывода общего назначения. Скрипт хранит два массива значений: цифровых портов и с возможностью широтно-импульсной модуляции. GPIO передает и получает сигналы с внешних устройств. Любое устройство подключенное к GPIO может получить значение порта и/или записать его.
DataTransferMasterScript и DataTransferSlaveScript позволяют передавать текстовую информацию через шину данных. Скрипт содержит список подключенных к шине устройств. Master может запрашивать у slave данные и отправлять их. DataTransferSlaveScript позволяет получать данные от master и отправлять данные на master по запросу.
Силовое управление двигателями в роботах осуществляется набором силовых ключей (драйвер двигателя). В программном пакете этот модуль реализован в скрипте MotorDriverScript. Он используется при формирования управляющего сигнала для электродвигателя. Скрипт подключается к GPIO выводам микроконтроллера и получает данные с двух цифровых и одного ШИМ порта. Данные используются для определения направления и скорости вращения вала электродвигателя (рис. 3).
Также в разрабатываемом пакете есть возможность моделирования работы дальномера, Класс «Physics» [22] в Unity содержит метод «Raycast» [23] позволяющий выпустить луч из заданной точки пространства в определенном направлении для определения наличия препятствий и расстояния до них. RangeFinderBaseScript позволяет использовать Raycast для измерения расстояний и передавать полученные значения через протокол передачи данных в микроконтроллер.
6 Апробация программного пакета на примере мобильного робота с ультразвуковым дальномером
Актуальная версия программного пакета позволяет моделировать упрощенные конструкции мобильных роботов и проводить испытания программ для микроконтроллеров. Для проверки работоспособности был разработан мобильный робот, состоящий из четырехколесной платформы, микроконтроллера, дисплея, дальномера, сервопривода и четырех драйверов (рис. 4). Видео [24] с демонстрацией работы построенного робота.
Во время моделирования и испытания робота были выявлены следующие недостатки программного пакета:
· стандартные средства Unity для работы с соединениями не предоставляют достаточно информации о соединении в процессе его настройки. Возникают трудности с определением направления вращения колес при настройке их соединения с валом электродвигателя;
· код для моделирования работы микроконтроллера и программа управления роботом расположены в одном файле. Для создания новой программы робота необходимо скопировать файл скрипта микроконтроллера;
· отсутствие возможности моделирования всенаправленных колес и колес «Mecanum».
На сегодняшний день определены направления развития проекта и предложены способы решения существующих проблем.
Для устранения первого недостатка предлагается средствами Unity создать стрелки, которые будут указывать направление оси и направление вращения вала электродвигателя двигателя при положительном значении управляющего сигнала. Это решение обеспечит наглядность и упростит настройку электромоторов.
Вторую проблему возможно решить, разделив скрипт для моделирования микроконтроллера на два файла. Один описывает работу микроконтроллера, второй – программу для управления робота. Это снизит зависимость переменных, делая систему более гибкой для изменений.
7 Заключение
Разработанные средства обладают достаточным для моделирования робототехнических систем функционалом. В ходе апробации были обнаружены недостатки и ограничения, а также выработан вектор их устранения.
Также для дальнейшего совершенствования программного пакеты сформулированы следующие задачи:
· добавить MotorBaseScript возможность автоматического прикрепления компонента Rigidbody к колесам;
· разработать новые средства программирования для микроконтроллеров, позволяющие создавать прошивку без создания дополнительных компонентов;
· реализовать возможность шарнирных соединений тел с использованием средств физики Unity;
· разработать новый компонент, позволяющий моделировать работу мотора с энкодерами;
· разработать компонент, моделирующий функционал шаговых двигателей и сервоприводов;
· создать инструмент, моделирующий различные типы колес.
Список литературы
1. Bräunl T (2020) «Robot adventures in Python and C». Springer, Berlin
2. Shuai Guo, Hua-Wei Li, Jian-Cheng Ji & Zhi-Fa Ming (07 December 2014)«Kinematic analysis and simulation of a new-type robot with special structure» Adv. Manuf. 2, 295–302 (2014). https://doi.org/10.1007/s40436-014-0094-x
3. Манюхина, А. Н. «Использование игровых движков для разработки систем моделирования робототехнических устройств / А. Н. Манюхина // конференция «Интеграция мировых научных процессов как основа общественного прогресса», 2015. – С. 131–137.
4. Pedro V. F. Zawadniak, Luis Piardi1, Thadeu Brito1, José Lima, Pedro Costa, André L. R. Monteiro, Paulo Costa, Ana I. Pereira «Micromouse 3D simulator with dynamics capability: a Unity environment approach» Research Article, SN Applied Sciences (2021)
5. Мокаева А.А., Хамуков Ю.Х., Шауцукова Л.З. Разработка кинематической схемы системы тросового управления манипулятора типа «хобот» // Известия КБНЦ РАН. 2015. № 6.
6. Unity Powers NASA Virtual Mars Rover Experience [Электронный ресурс] // Unity Real-Time Development Platform | 3D, 2D VR & AR Engine. 2012. URL: https://unity.com/our-company/newsroom/unity-powers-nasa-virtual-mars-rover-experience. (Дата обращения: 05.09.2022)
7. Олимпийское 3D. Тернистый путь от маркетинговой визуализации до решения задач национальных проектов. [Электронный ресурс] // CG EVENT — ГЛАВНОЕ СОБЫТИЕ В ОБЛАСТИ КОМПЬЮТЕРНОЙ ГРАФИКИ. URL: https://cgevent.ru/archives/8134 . (Дата обращения: 05.09.2022)
8. Сборка/разборка привода Navy - Heartwood [Электронный ресурс] // Train Faster, Smarter with Interactive Simulations URL: https://hwd3d.com/videos/navy-actuator-virtual-training/ (Дата обращения: 05.09.2022)
9. Unity - Manual: Physics [Электронный ресурс] // Unity - Manual: Unity User Manual 2021.3 (LTS). URL: https://docs.unity3d.com/2020.3/Documentation/Manual/PhysicsSection.html (Дата обращения: 06.09.2022)
10. A. Roennau, F. Sutter, G. Heppner, J. Oberlaender and R. Dillmann, “Evaluation of Physics Engines for Robotic Simulations With a Special Focus on the Dynamics of Walking Robots,” in International Conference on Advanced Robotics (ICAR), Montevideo, 2013.
11. Drumwright, E. An evaluation of methods for modeling contact in multibody simulation / E. Drumwright, D. Shell // IEEE Int. Conf. on Robotics and Automation, 2011. – P. 1695–1701.
12. Erez, T. Simulation Tools for Model-based Robotics: Comparison of Bullet, Havok, MuJoCo, ODE and PhysX / T. Erez,
13. Hummel J. An Evaluation of Open Source Physics Engines for Use in Virtual Reality Assembly Simulations
14. Seugling A. Evaluation of physics engines and implementation of a physics module in a 3d-authoring tool
15. Unity - Manual: Rigidbody [Электронный ресурс] // Unity User Manual 2021.3 (LTS). URL: https://docs.unity3d.com/Manual/class-Rigidbody.html (Дата обращения: 06.09.2022)
16. Unity - Manual: Introduction to collision [Электронный ресурс] // Unity User Manual 2021.3 (LTS) URL: https://docs.unity3d.com/Manual/CollidersOverview.html (Дата обращения: 06.09.2022)
17. Unity - Manual: Introduction to joints [Электронный ресурс] // Unity User Manual 2021.3 (LTS) URL: https://docs.unity3d.com/Manual/Joints.html (Дата обращения: 06.09.2022)
18. Unity - Manual: Introduction to physics articulations [Электронный ресурс] // Unity User Manual 2021.3 (LTS) URL: https://docs.unity3d.com/Manual/physics-articulations.html (Дата обращения: 06.09.2022)
19. Unity - Manual: Fixed Joint component reference [Электронный ресурс] // Unity User Manual 2021.3 (LTS) URL: https://docs.unity3d.com/Manual/class-FixedJoint.html (Дата обращения: 07.09.2022)
20. Unity - Scripting API: RequireComponent [Электронный ресурс] // Unity Scripting API 2021.3 (LTS) URL: https://docs.unity3d.com/ScriptReference/RequireComponent.html (Дата обращения: 07.09.2022)
21. Unity - Manual: Hinge Joint component reference [Электронный ресурс] // Unity User Manual 2021.3 (LTS) URL: https://docs.unity3d.com/2021.3/Documentation/Manual/class-HingeJoint.html (Дата обращения: 07.09.2022)
22. Unity - Scripting API: Physics [Электронный ресурс] // Unity Scripting API 2022.1 (LTS) URL: https://docs.unity3d.com/2022.1/Documentation/ScriptReference/Physics.html (Дата обращения: 08.09.2022)
23. Unity - Scripting API: Physics.Raycast [Электронный ресурс] // Unity Scripting API 2021.3 (LTS) URL: https://docs.unity3d.com/ScriptReference/Physics.Raycast.html (Дата обращения: 08.09.2022)
24. RSMA: Simple mobile robot [демонстрация работы программного пакета] // YouTube. 24 сентября 2022 (URL: https://www.youtube.com/watch?v=4CZjw4ji71s&t=50s)