Вопрос про возможности Matlab и Simulink для моделирования ходьбы с нейросетью
Здравствуйте.
Я выбираю систему моделирования ходьбы четвероногого и двуногого роботов.
До этого почти не работал с Matlab и прежде чем я погружусь в изучение этого средства для меня важно понять.
Возможно ли создать физическую модель робота в Simulink и получать/изменять в реальном времени ее параметры из вне?
Поясню подробнее:
Я хочу сделать физич. модель робота и обучить его ходьбе с использованием нейросети или генетических алгоритмов. Для этого мне нужна модель, которая будет в реальном времени реагировать на внешнее воздействие и управляющие сигналы.
Я планирую получать состояние модели из Simulink (положение ног, тела и пр.) и в тоже время вносить изменение сил действующих на моторы модели по указаниям нейросети.
Положение ног, тела и окружение будут входами нейросети , а силы моторов – ее выходами.
Поскольку в Simulink не интегрирован TensorFlow, то придется разделить на 2 части весь процесс: модель c ее поведением в Simulink, обработка в TensorFlow.
Отсюда и вопрос: Возможно ли в реальном времени получать/передавать значения из Simulink и заодно видеть на экране поведение модели и получать ее параметры (в идеале, сразу в виде матриц)?
И вообще правильный ли выбор Simulink для этой задачи?
В качестве примера реализации отображения+нейросети есть ролик https://youtu.be/wL7tSgUpy8w (Neural network racing cars around a track)
И еще вопрос:
В темах и youtube-роликах связанных с matlab упоминаются: Анализ данных или машинное обучение, глубокое обучение
(например, вот здесь есть упоминание об этом https://youtu.be/YGnOFMwj0cQ (Simulating Walking Robot Mechanics))
Насколько эти возможности развиты, подойдут ли они к этой задаче ? Или нужно сразу смотреть использование сторонних реализаций нейросетей типа TensorFlow?
Ответы
Добрый день. Модель робота в Simulink построить не проблема, если у вас есть модели например в solidworks можно перенести физическую модель в Simscape multybody. Есть примеры в help MATLAB.
Взаимодействие системы управления с вашими исполнительными моторами тоже можно реализовать несколькими способами.
1. Используя систему управления с нейростеяпи в самом simulink.
2. Используя взаимодействие с сторонним приложением, в этом случае ваше приложение будет управлять моделью в simulink.
А что значит в реальном времени?
В видео по ссылке можно подробнее ознакомиться с возможностями.
https://www.mathworks.com/videos/optimizing-robotic-systems-with-simscape-1561904111727.html
Simulink здесь это самый правильный выбор, потому что это мощнейшая среда симуляции, а Simscape Multibody позволяет малой кровью создавать трехмерные кинематические системы, в том числе путем импорта из CAD. Плюс Simulink тесно интегрируется с MATLAB, который имеет собственные нейросети, а также может работать с TensorFlow и другими фреймворками.
Для моделирования и управления моделью из MATLAB будет полезен новый плейлист на нашем канале (Автоматизация системного моделирования).
По поводу нейросети тут 3 варианта:
1) Вместо TensorFlow использовать Reinforcement Learning Toolbox, он как раз для этих целей создан. Плюс в комплекте есть пример с обучением шагающего робота в Simulink
2) Если по каким-то причинам нейросети из Reinforcement Learning Toolbox не подходят, можно попробовать импортировать в MATLAB сеть из TensorFLow, такой импорт предусмотрен для ряда сетей
3) Если импортировать не удается, то можно из MATLAB обращаться к Python
Спасибо за ответы, начну подробнее исследовать Mathlab и Simulink.
В реальном времени - для меня это означает, что результат работы нейр. сети можно было бы сразу видеть на экране, без записи в файл и только потом воспроизведения того что было.
По другим советам есть еще возможность использовать unity 3d и blender. Плюсом этого подхода явл то, что можно разделить задачу на 3 части: для части визуализации взять все возможности Unity, для нейр сети напр. Caffe или просто Tensorflow, а систему уравнений для модели придется писать на бумаге и делать отд программу которая будет получать данные от части нейр сетей и визуализировать (это скорее всего придется встраивать в unity или делать взамиодействие через сокеты). Также плюсом этого подхода будет не завязанность на средства Simulink.
Потому что пока не понятно как в Simulink, например, распараллелить обучение, чтобы пройти 1000 поколений быстро одновременно и насколько там все быстро работает.
Если вы энтузиаст, и вам хочется просто поэкспериментировать, можете на завязываться на Simulink и попробовать подобрать опенсорсные инструменты.
Если вам нужен результат, например, по работе или в учебном проекте, лучше выбрать качественный инструмент - Simulink. Так справитесь быстрее.
Чтобы распараллелить обучение, достаточно установить Parallel Computing Toolbox и активировать при обучении опцию распараллеливания, все остальное произойдет автоматически. Вот пример.
В качестве визуализации можно использовать возможности Simscape Multibody, это если надо посмотреть в 3D как неловко ваш робот себя ведет) если надо отражать процесс обучения с эпохами, численным параметрами и т.д., то это в окно команд MATLAB выводится, или в отдельное графическое окно.
Не стоит забывать еще один этап - создание модели физического объекта, который будет ходить. В этом плане Simscape Multibody бует весьма кстати.