Удаленное управление объектами в Blender-е

  • Tutorial
Отлаживая разные алгоритмы управления для нашего робота, мы на себе прочувствовали насколько приятно было бы иметь среду моделирования и отлаживать программы сначала в ней, а потом уже тестировать на реальном роботе. Поскольку мы активно использовали Blender для создания моделей для 3Д-печати и для пользовательского интерфейса, мы решили попробовать Blender Game Engine в качестве среды для моделирования робота. Первые результаты оказались очень даже неплохими:


На видео показана панель управления для водителя на которой показывается вид с бортовых камер и данные от сенсоров.

После этого стал вопрос — как интегрировать BGE с нашей системой коммуникации и управления? Т.е. как сделать так, чтобы одна и та же программа могла без изменений управлять настоящим или виртуальным роботом в BGE? Для управления роботом по сети мы используем библиотеку Ice, которая, кроме многих других, поддерживает Python. Blender тоже умеет выполнять питоновские скрипты и предоставляет интерфейс ко всем своим объектам и функциям. Таким образом родился план — написать программу на питоне, которая реализовывала бы точно такие-же (удаленные) интерфейсы как и программа, которая работает на роботе. Но вместо реальных моторов она меняла бы свойства объектов в BGE в соответствии с командами поступающими по сети.

В качестве первого шага, мы решили сделать максимально простой пример, который показывает:
  • как написать и запустить Ice-сервер написанный на питоне внутри Blender-а?
  • как изменять атрибуты объекта (например позицию) получая информацию по сети?

Для этого понадобилось сделать два питоновских файла. Первый с кодом сервера, который будет запущен внутри Blender-а и второй — клиентская программа, которая посылает запросы на изменение позиции серверу по сети. Эти две программы можно найти на ГитХаб-е. Testblender.py это сервер. Следует заметить, что было необходимо запускать сервер в отдельном потоке, т.к. иначе, ожидая сообщения по сети, он блокировал пользовательский интерфейс Blender-а и изменение позиции объекта визуально не отображалось. Client.py это простая программа посылающая 100 запросов на изменение позиции текущего (выбранного) объекта двигая его по кругу в плоскости XZ. На следующем видео показано как запустить серверную и клиентскую программу и результат работы — двигающийся по кругу объект.


После того, как мы научились управлять объектами внутри Blender-а удаленно (по сети), мы планируем реализовать интерфейсы для управления роботом внутри BGE для управления моделью.

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

Комментарии 14

    +1
    Вот бы все тоже самое для шагающего робота например (с расчетом налету положения и взаимодействия с гравитацией), или квадракоптера (трение воздуха, тяга двигателей)
      0
      Ну может когда-нибудь и до этого дойдет дело ;-), но начинать решили с более простого. На самом деле, даже с такой моделью много непонятного и сложностей.
        +1
        Могу показать, только делается это не в Blender, а в MATLAB/Simulink, ANSYS, Adams…

        Вот одна из моих поделок:



        Есть и квадрокоптер с тягой, аэродинамикой и гироскопическими моментами.
        Интересно?))
          0
          Безусловно интересно!!!
          Ну и заодно где почитать как этим управлять снаружи и получать из внешней программы текущее положение коптера/результат симуляции?
          Допустим хочу я разработать полетную программу через генетический алгоритм, чтобы хотя бы удерживала коптер в воздухе на одном месте)) На живом коптере, понятно, генетический алгоритм реализовать крайне дорого))
            0
            А зачем из другой, если можно здесь же в МАТЛАБ все и реализовать, и прошить контроллер отсюда же?
            Хотя я думаю возможность есть. На чем Вы пишете?
            Я с уважаемым argz как раз подобной задачей и занялся. Но пока только взлетаем и кружимся.
            К стабилизации еще не добрались.
            Пишите в личку, поговорим, может и придумаем что-то!))
              0
              Пишу на ruby вообще, в матлабе слаб. Не знаю есть ли биндинги к ruby у матлаба.
        0
        Решил после статьи попробовать blender. А только у меня не открывается их сайт?
          0
          У меня тоже не открывается. Похоже их какая-то проблема посетила…
            0
            Я знаю, что многие скачивают альтернативные сборки Блендер-а с других сайтов, но ссылок у меня сейчас нет. Вот тут можно спросить: blender-3d.ru/
              0
              Хм, никогда не слышал про альтернативные сборки хотя и работаю с ним уже давно, не могли бы вы более подробно о них рассказать?
                0
                Наверное имелись ввиду: www.graphicall.org
                  0
                  Хмм, какой то странный список, половина без описаний либо в пару строк из которых ничего не ясно и непонятно по какой причине в массе своей только под винду…
                  Но за наводку, спасибо.
              0
              У них последнее время участились технические работы на сайте, нужно просто немного подождать.
                +1
                Вот кстати уже и открывается сайт www.blender.org/

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое