Все скрипты написаны с использованием интерпретатора Python 3.8.10
с использованием виртуального окружения из папки venv
. Для активации виртуального окружения воспользуйтесь командой:
source venv/bin/activate
После окончания работы окружение можно отключить с помощью команды deactivate
В папке xml_examples
собраны примеры различных динамических моделей MuJoCo, часть .xml-кода было позаимствовано из данных примеров.
В скрипте автоматически создается .xml файл для модели BirdBot. В качестве референса была взята иллюстрация из статьи BirdBot achieves energy-efficient gait with minimal control using avian-inspired leg clutching.
Модель была отрисована во Fusion360
, размеры модели были откалиброваны относительно мотора Dynamixel MX-64AT, который использовали авторы статьи. Модель доступна в облаке Fusion360
Скрипт BirdBot_xml_generator.py
реализован через шаблон f-строки. В целом, реализация может варьироваться от сложности, например для автоматизации можно использовать древовидные структуры в python и собирать xml-строки через рекурсивные алгоритмы. Но подобной задачи не стояло, поэтому сам скрипт представляет собой параметризованную сборку стандартных моделей в модель робота. В переменных LINK_i
, где i
- номер сочленения по CAD-модели, зашита информация об имени тела, имени вращательного сустава, начальных координатах y0
и z0
, длине сочленения length
и его начальном повороте вокруг оси X
в системе отсчета, связанной с землей. В переменной LINK_SIZE
находится значение ширины сочленений. Переменная FLOOR_POSITION
отвечает за положение пола относительно нуля модели. В переменной K
содержится значение жесткости троссов, соединяющих элементы конструкции. В переменной ELECTRONICS_BOX
содержатся линейные размеры блока электроники модели.
Сама модель построена по принципу "сверху-вниз". Базовым элементом является блок электроники, его начальное положение берется за нулевую точку системы координат, связанной с землей. Блок электроники соеденен с внешним миром через линейный сустав, поскольку модель не является симметричной и возможно вектор силы тяжести блока выходит за площадь косания ноги с землей. Далее от блока электроники отходят сочленения, составляющие ногу робота. Для поддержания структуры замкнутой цепочки между элементами link_1
, link_2
, link_3
и link_4
введено ограничение на кинематику модели - конец элемента link_2
должен прилегать к элементу link_4
в join_4
. Упругие троссы проложены в соответствии с иллюстрацией выше.
В оригинальной статье мотор, отвечающий за коленный сустав, передает свое движение за счет наматывания троса на вал мотора, однако Mujoco не поддерживает данный режим работы мотора совместно с тросом. Поэтому в данной реализации передача реализована через линейный сустав. Однако при дальнейшем использовании модели стоит учесть данный факт на уровне управления и в реальной модели делать поправку на диаметр накрутки троса на вал. Также была задана максимально возможная жесткость троса, чтобы передача перестала быть податливой и могла понять сочленение за коленным суставом.
В процессе исполнения генерируется .xml-файл, сохраняется в файл BirdBot.xml
и отрисовывается нулевое положение робота без учета динамики.
Запустить модель во встроенном симуляторе Mujoco можно с помощью команды:
python -m mujoco.viewer --mjcf=BirdBot.xml
В скриптах используется встроенный симулятор mujoco-viewer
, в частности его пассивная версия, для управления моделью через python-скрипты. Время симуляции приведено к физическому времени на исполняющем компьютере, соответственно временные промежутки соответствуют общепринятым секундам. В скриптах используется управление по позиции, поскольку в модели задан позиционный актуатор.
В скрипте BirdBot_jump_step.py
используется шаговая функция, за которой следует линейный возврат бедренного сустава к нулю. Графики и видео можно увидеть ниже.
В скрипте BirdBot_run_sin.py
используется простая гармоническая функция для генерации бега. К сожалению в реальном мире данная модель управления бы не сработала, однако за счет погрешностей солвера Mujoco создается ощущение что модель бегает. Графики и видео представлены ниже.
На данном этапе необходимо проработать модель с точки зрения коллизий, развести элементы моделей в пространстве чтобы минимизировать их точки контакта и уменьшить погрешности встроенных компиляторов для симуляций.
В будущем стоит доделать модель до двуногой версии и проработать алгоритм CPG для генерации паттерна походки. При этом паттерн для каждой ноги должен отличаться на одну фазу движения. В дальнейшем стоит переводить связь между "миром" и блоком электроники из линейного сустава в свободный сустав для проверки устойчивости модели. Также в модели дополнительно можно задавать массы, тензоры инерции, коэффициенты трения и тд, для наиболее точной симуляции.