пятница, 14 февраля 2014 г.

EV3: можно ли использовать С++ программы на WRO? Часть I

Использование открытой операционной системы 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 - более-менее эффективное решение задачи кубик-рубика и выражение решения в терминах переворота кубика и поворота одной из граней. Написан он на языке высокого уровня С++, и скомпилирован по той же технологии, что описаны здесь, здесь или здесь

"Третье" касается взаимодействия двух параллельно запущенных процессов и обмена данными между ними. Об этом подробнее в следующей части.

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

Related Posts Plugin for WordPress, Blogger...