суббота, 19 января 2013 г.

Mindstorms EV3: Linux на борту - размышления

Многие уже в курсе из прошлых статей на блоге, что прошивка в новом EV3 блоке базируется на операционной системе Linux. Это довольно перспективный шаг с точки зрения открывающихся новых возможностей для программистов LEGO-роботов. Почему - будет рассмотрено в данной заметке.

Следует отметить, что все написанное выше является лишь плодом раздумий подкрепленных знанием внутренностей ОС Linux и опытом ее использования. Т.е. это никак не значит, что в реальном EV3 блоке удастся достичь данной функциональности путем изменения прошивки, хотя предпосылки к этому определенно есть.


Сначала можно рассмотреть, как будут выполняться пользовательские программы на блоке, т.е. программы написанные в средах программирования, обычно используемых для программирования LEGO-роботов. Для этого еще раз необходимо вспомнить, что для нового робота будет предлагаться среда программирования основанная на LabView и процесс программирования поэтому выглядит следующим образом: вставка нужных граф управляющих блоков в "текст" программы, настройка их, компиляция, загрузка на блок, выполнение.


Это тот же самый процесс, что и с NXT блоком, поэтому можно продолжить аналогию: компиляция будет проходить в байт-код, который на самом блоке будет выполняться специальной "виртуальной машиной". С точки зрения операционной системы Linux, это значит, что существует отдельный процесс (возможно автоматически запускаемый, когда выполняется команда Run), которому будет передаваться имя файла с байт-кодом необходимым для выполнения. Данный процесс будет последовательно считывать инструкции байт-кода и интерпретировать их в команды операционной системы - системные вызовы, которые в свою очередь будут формировать список управляющих команд или запросов к драйверам оборудования - специальным модулям ядра операционной системы, ответственным за "общение" с экраном, моторами, датчиками, файловой системой, кнопками на блоке и т.п.


Другой возможный путь, имеющий право на существование, что при компиляции программы для робота будет генерироваться не байт-код, а непосредственно в машинный код (native code), сразу же понятный для ARM процессора. В этом не должно быть ничего сложного - программа на LabView может быть блок за блоком интерпретирована либо в программу на языке C или ассемблер, а потом уже с использованием стандартных компиляторов скомпилирована непосредственно в бинарный машинный код. Неоспоримое преимущество такого подхода - увеличивается скорость выполнения получившегося кода, поскольку пропадает промежуточное звено интерпретатор. Итоговая программа, которую будет выполнять ОС Linux, может быть в виде отдельного бинарного исполняемого файла, либо в виде подгружаемой (shared object) библиотеки.

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

Появление линуксового интерпретатора байт-кода программ для LEGO роботов позволяет строить размышления еще об одном аспекте его использования. При условии доступности исходного кода интерпретатора можно перекомпилировать его под Intel архитектуру (а не под ARM), а это позволит запустить интерпретатор на обычных рабочих станциях. Да даже если не получиться перекомпилировать, то можно запустить интерпретатор в внутри виртуальной машины, эмулирующей работу ARM процессора. В итоге получается, что код, предназначенный для EV3 блока, будет выполняться на обычном компьютере. Теперь остается научиться перехватывать вызовы идущие от интерпретатора к датчикам и моторам и создать виртуальный мир с виртуальным роботом - можно для начала 2D, а можно и 3D. Перехваченные вызовы от интерпретатора к виртуальному роботу - и получиться полноценный эмулятор LEGO-робота, который в отличии от всех существующих эмуляторов (nxcSimulator, RobotC Virtual Worlds) будет понимать программы созданные и скомпилированные непосредственно в тех же средах программирования, что используются и для реальных роботов.


Еще одно преимущество от использования ОС Linux - это то, что Linux - многозадачная операционная система - в один момент времени может выполняться несколько программ или потоков. Это заставит немного попотеть создателей программного обеспечения, но в целом не видно ограничений, которые бы не позволили запустить из одной программы для LEGO-робота, другую программу (например, если нет доступа к ее исходному коду). Это к тому же пример хорошего программирования - итоговое поведение робота будет складываться из работы отдельных хорошо отлаженных модулей.

Также с точки зрения операционной системы, теперь не должны быть проблемой расширенные файловые операции - файлы можно будет не только создавать во время работы робота, но и копировать из одной директории в другую, удалять их, переименовывать, дописывать данные к уже существующим файлам.

Наличие выхода для SD карты не может не радовать. Во-первых, это значит, что новые программы на робота теперь можно переносить через карту, а не только в результате компиляции программы, когда робот подключен к компьютеру.

Во-вторых, на карте теперь будет умещаться больше звуковых файлов, больше графических файлов. А, например, если выводить много-много картинок одну за другой - то будет получаться уже настоящий мультфильм.

В-третьих, автономный робот может теперь складывать на эту карту много-много данных во время своей работы: показания с сенсоров и енкодеров. А это уже будет отличный инструмент для отладки поведения робота при выполнении долгих и сложных миссий типа задания для World Robot Olympiad.

Следующий плюс от наличия внешнего источника хранения информации, который поддерживает до 32Gb, позволяет создавать из EV3 блока почти полноценный компьютер. Дело в том, что на SD карте, по идее, можно хранить и исполняемые файлы для самой операционной системы Linux. Самое простое - это может быть интерпретатор какого-то скриптового языка, например Python. Тогда программы для робота смогут писать и те, кто знаком с этим языком. На карте можно будет хранить сразу несколько интерпретаторов: для leJOS/Enchanting и RobotC (если они будут использовать интерпретаторы, конечно). Это позволить запускать любой из них без необходимости заново перепрошивать firmware EV3 блока. Теперь ничего не будет стоить сделать из блока MP3 плеер или даже своеобразный видео-плеер, если добавить на карту соответствующую программу (например, mplayer). Ничего теперь не мешает выполнять прямо на блоке "тяжелые" программы по распознаванию изображений, видео или даже звука. Или наоборот - добавить программы, генерирующие человеческую речь из текстовых строк. А как на счет собственного web-сервера, запущенного на роботе?

Если при этом кто-то беспокоиться, что 64Mb оперативной памяти будет мало для выполнения какой-то очередной увесистой программы, то ничего не будет теперь мешать на карте памяти расположить файл-подкачки. Т.е. программам будет доступна довольно быстрая (поскольку swap-файл все-таки на карте, а не на жестком диске) дополнительная память объемом до 4Gb (!!!).

Ну и в заключении, конечно же, нельзя не сказать о таком подарке от разработчиков Mindstorms EV3, как USB-host. Пусть даже он имеет ограничение на 4 одновременно подключенных устройства (что, скорее всего решается, USB концентратором с отдельным питанием), но зато какие это могут быть устройства? USB музыкальные колонки или наушники, внешние звуковые и видео карты, мышки, клавиатуры, web-камеры, GPS- и WiFi-приемники или даже принтер. Не стоит забывать также, что USB-протокол - открытый стандарт, а это значит, что ничего не мешает теперь создать собственный датчик, работающий посредством USB, драйвер для него - и уже использовать его в своих программах для робота.

Кто еще считает, что LEGO Mindstorms - детский конструктор?

1 комментарий:

Related Posts Plugin for WordPress, Blogger...