Использование открытой операционной системы Linux на EV3 блоках - несомненно шаг вперед для LEGO-робототехников. Для них стали доступны следующие возможности: 1) исходные коды EV3 firmware выложены в репозиторий GitHub, а, значит, каждый желающий может ознакомиться с ними и, при необходимости, внеся изменения, собрать свою собственную версию прошивки для блока 2) есть возможность писать C/С++ приложения под Linux платформу и исполнять их на блоке - освоить библиотеку стандартных функций не так сложно. |
Следовательно, каждый может добавлять свои новые функции в firmware и эффективно использовать их непосредственно в Linux окружении, без ограничений вводимых средами программирования EV3-G и другими.
Ровно это и сделал Девид Гилдей, создатель нового робота из набора 31313 (LEGO Mindstorms EV3 Home edition), собирающего кубик-рубика за 101 секунду:
Чтобы понять, как такое удалось Девиду, необходимо разобраться, что же он сделал:
Итак, первое - изменение стандартной firmware (1.05M). Девид сделал небольшие улучшения, касающиеся работы с датчиком цвета. А также внедрил новую функциональность - автозапуск - теперь, если после загрузки проекта, созданного в среде EV3, на блок, в директории с проектом находится файл
autorun.rtf
, то он запускается на исполнение перед запуском непосредственно проекта.Файл
autorun.rtf
может быть любым исполняемым файлом, и даже, в том числе, скриптом на языке Shell. Данный язык является стандартом для любого Linux дистрибутива, и поэтому его знает любой уважающий себя программист, работающий под этой операционной системой.В примере данного конкретного проекта, файл
autorun.rtf
- скрипт и выглядит следующим образом:#!/bin/sh if [ -x mc3solver-v1p1.rtf ] then ./mc3solver-v1p1.rtf & fiДелает он простейшую вещь: проверяет есть ли исполняемый файл
mc3solver-v1p1.rtf
и если есть, то он запускается, как фоновый процесс. Это значит, что после запуска этого процесса, его завершение не ожидается, а вместо этого управление передается обратно в скрипт, который завершает свою работу. После чего запускается непосредственно EV3 программа.Второе:
Функция исполняемого файла
mc3solver-v1p1.rtf
- более-менее эффективное решение задачи кубик-рубика и выражение решения в терминах переворота кубика и поворота одной из граней. Написан он на языке высокого уровня С++, и скомпилирован по той же технологии, что описаны здесь, здесь или здесь"Третье" касается взаимодействия двух параллельно запущенных процессов и обмена данными между ними. Об этом подробнее в следующей части.
А в итоге, можно или нет?
ОтветитьУдалить