• Документация подобна пище: хорошо сделанная она дарит удовольствие, но даже сделанная хоть как-то, она всё же лучше, чем ничего.

Описание работы с Lego EV3 Basic

Программный комплект EV3 Basic, включающий в себя библиотеку расширений Lego EV3, предназначен для работы с блоком Lego EV3 и совместим со всеми стандартными моторами и датчикам из комплектов Lego EV3 и NXT. Также, он поддерживает дополнительные датчики и устройства, работающие по протоколам I2C и UART. Кроме библиотеки расширений он включает в себя программу EV3 Explorer, предназначенную для работы с файловой системой блока EV3, подключенного к компьютеру и выполнения на нём команд программы, запущенной на компьютере.

Для тех, кто переходит со стандартной системы программирования LEGO EV3-G на EV3 Basic мы рекомендуем следующую таблицу соответствия команд EV3-G и EV3 Basic.

Установка

Установка дополнения EV3 Basic выполняется автоматически — программой-инсталлятором, которая устанавливает на ваш компьютер под управлением Microsoft Windows версии 7 или новее с установленным Microsoft Small Basic и Microsoft .Net Framework библиотеку расширений EV3 и программу EV3 Explorer. Инсталляция стандартная и не представляет затруднений.

EV3 Explorer

Программа EV3 Explorer предназначена для работы с файловой системой блока EV3: копирования, перемещения и удаления файлов и запуска ваших программ непосредственно в блоке EV3. Кроме того, EV3 Explorer выполняет компиляцию программ, написанных на Small Basic, в исполняемые файлы для блока EV3 — файлы формата RBF.

Программы на блоке можно запускать либо в момент их компиляции, нажав кнопку «Скомпилировать и запустить» в EV3 Explorer, либо позже, из меню блока или с помощью проводника. В режиме запуска на блоке EV3 вы не можете использовать функции Small Basic, такие как графическое окно Small Basic или возможность воспроизведения звуков через динамик ПК.

Для размещения вашей программы в блоке EV3 нужно сохранить программу в файл, отметить его на правой панели, а на левой создать в памяти EV3 папку, например EV3Basic, затем зайти в нее. После этого кнопкой Compile скомпилировать и загрузить на блок программу. На блоке программу вы найдете в созданной папке и сможете запустить ее из меню без подключения к компьютеру.

Если вы хотите удалить созданную вами папку просто войдите в нее и нажмите кнопку «Удалить». Файлы можно выделять группой, используя клавишу «Shift» на клавиатуре. Все пути для запущенных программ начинаются от начальной папки. Смотрите также раздел Файловая структура.

Блок EV3

EV3 Basic имеет методы для работы с ЖК-экраном блока EV3 (Класс LCD) для вывода на него текстовой и графической информации, с его динамиком (Класс Speaker) — для воспроизведения отдельных тонов или записанных звуковых файлов. Также, EV3 Basic позволяет обрабатывать нажатия кнопок блока (Класс Buttons) и включать их подсветку (Класс EV3). Кроме того, возможно получение информации о блоке, аккумуляторе и текущем расходе его заряда (Класс EV3), а также, управление передачей данных между блоками по каналу Bluetooth (Класс Mailbox). И наконец, EV3 Basic позволяет программно взаимодействовать с файловой системой блока (Класс EV3File).

Моторы

EV3 Basic совместим со средними и большими моторами EV3, а также с моторами NXT (Класс Motor). Существует 9 методов, которые могут использоваться для управления моторами, 5 из них достаточно просты для начинающих (Motor.Move(), Motor.MoveSync(), Motor.Start(), Motor.Stop() и Motor.StartSync()). Команды для работы с моторами используют следующие параметры:

  • Порты – порты блока EV3, к которому подключен мотор, например «BC» или «A». Если команда предназначена для нескольких моторов – они всегда должны быть записаны в алфавитном порядке.
  • Угол – угол поворота мотора. Угол должен всегда иметь положительное значение, в случае отрицательного – знак игнорируется. Если мотор нужно вращать в обратную сторону – меняйте знак у скорости, а не у угла.
  • Режим торможения — «True», если после остановки мотор должен затормозить и удерживать положение оси, иначе — «False»: ось будет проворачиваться относительно свободно.
  • Скорость – от -100 до 100, знак числа определяет направление вращения оси мотора.

Кроме того, моторы могут также использоваться в качестве датчиков угла поворота, например, когда их проворачивают внешней силой. Метод Motor.GetCount() позволяет определить угол, на который повернулась ось мотора.

Управление моторами

В следующей таблице приведены рекомендации по выбору команд для управления моторами:

  Повернуться на x градусов (программа ждет завершения) Включиться на постоянное вращение Повернуться на x градусов (без ожидания завершения)
Контроль скорости Motor.Move() Motor.Start() Motor.Schedule()
Контроль мощности Motor.MovePower() Motor.StartPower() Motor.SchedulePower()
Синхронизация вращения моторов Motor.MoveSync() Motor.StartSync() Motor.ScheduleSync()

Датчики

EV3 Basic совместим со всеми стандартными EV3 и NXT датчиками (Класс Sensor). Многие датчики могут использоваться в нескольких режимах. Чтобы
переключить датчик в определенный режим используется метод Sensor.Setmode(). Важно всегда устанавливать режим работы датчика перед его использованием. Некоторые режимы датчиков возвращают значение в процентах. Для чтения таких показаний датчиков используется метод Sensor.ReadPercent(). Некоторые режимы датчиков возвращают значение не в процентах. Например, цветосветовой датчик в режиме 2 («определение цвета») возвращает коды цветов от 0 до 7, ультразвуковой датчик в режиме 0 («расстояние в миллиметрах») выдает целые числа от 0 до 255, соответствующие измеренному им расстоянию до объекта в миллиметрах. Для чтения одного значения — не в процентах — используется метод Sensor.ReadRawValue(). В некоторых режимах датчики возвращают несколько значений одновременно, собранными в
массив. Чтобы прочитать этот массив используется метод Sensor.ReadRaw(). Например, чтобы получить RGB (красную, зеленую и синюю) составляющие цвета с цветосветового датчика цвета, подключенного к порту 1 используйте вызов метода Sensor.ReadRaw(1, 3) после перевода датчика в режим 4. Нумерация элементов в массиве данных начинается с нуля. Первый элемент имеет индекс [0], это в данном случае будет интенсивность красной составляющей цвета, [1] – зеленой и [2] – синей.

Датчик касания (кнопка) можно использовать с методом Sensor.ReadPercent(), который возвращает 0, если кнопка не нажата и 100 в нажатом положении.

В EV3 Бейсике цветосветовой датчик может работать в 4 режимах:

  1. Режим отраженного света (режим 0)
  2. Режим измерения уровня внешней освещенности (режим 1)
  3. Режим измерения цвета (режим 2)
  4. Режим измерения RBG-составляющих цвета (режим 4)

В режиме 0 датчик возвращает методу ReadPercent() уровень отраженного света в процентах (от 0 до 100). В режиме 1 датчик возвращает 0 при минимуме внешнего освещения и 100 на ярком свету. В режиме 2 датчик цвета возвращает код цвета (0 – цвет не определен, 1 – черный, 2 – синий, 3 – зеленый, 4 – желтый, 5 – красный, 6 – белый, 7 – коричневый). Обратите внимание, что цветосветовой датчик откалиброван по цветам кубиков LEGO, поэтому, по остальным цветам, даже если они кажутся для вас очевидными, датчик может выдать неожиданный результат.

Для определения расстояния, которое возвращает ультразвуковой датчик можно использовать метод Sensor.ReadRawValue(). Ультразвуковой датчик EV3 в режиме 0 возвращает расстояние в миллиметрах (не в сантиметрах!). А ультразвуковой датчик NXT в режиме 0 возвращает расстояние в сантиметрах. Датчик EV3 в режиме 1 возвращает расстояние в десятых дюймах.

В EV3 Бейсике инфракрасный датчик может работать в следующих режимах:

  • 0 – измерение расстояния до объекта в сантиметрах
  • 1 – измерение расстояния и направления на ИК-маяк
  • 2 – сигналы, принятые от ИК-маяка (или от маяков, до 4 одновременно)

По умолчанию датчик работает в режиме 0 и метод Sensor.ReadPercent() возвращает целое число от 0 до 100 — расстояние до объекта в см. Это расстояние не точное и сильно
зависит от освещенности объекта: более точно измеряется расстояние до ярко освещенных объектов.

Гироскопический датчик может определять угол поворота и угловую скорость вращения. Режим 0 гироскопа измеряет угол в градусах относительно начальной позиции датчика на момент старта программы или с момента сброса его показаний. Датчик может измерять вращение и угол  только в одной плоскости, это зависит от того как он установлен на роботе. Для чтения показаний в режиме измерения угла используется метод Sensor.ReadRawValue() который возвращает массив из единственного элемента (с индексом 0). В режиме 1 датчик измеряет угловую скорость вращения в градусах в секунду. Так как гирскопическим датчикам свойственно накопление ошибки (постоянное изменение показаний в неподвижном состоянии) желательно, чтобы датчик гироскопа был неподвижен в момент запуска блока EV3 или при подключении кабеля между гироскопом и включенным блоком. Для устранения дрейфа можно попробовать переподключить кабель к неподвижному датчику, однако, лучше устранять ошибку показаний программно.

Режимы работы датчиков

EV3 датчики

Тип

Режим

Название режима

Доступные функции

Возвращаемое значение

Датчик касания

16

0

TOUCH

ReadPercent

0 — не нажат, 100 — нажат

Цветосветовой датчик

29

0

COL-REFLECT

ReadPercent

0 — нет отраженного света, 100 — макс. яркость

29

1

COL-AMBIENT

ReadPercent

0 — нет внеш. освещения, 100 — макс. яркость

29

2

COL-COLOR

ReadRawValue

0 — неизвестный, 1 — черный, 2 — синий, 3 — зеленый, 4 — жёлтый, 5 — красный, 6 — белый, 7 — коричневый

29

4

RGB-RAW

ReadRaw (3 values)

value[0] — красная составляющая, value[1] — зеленая составляющая, value[2] — синяя составляющая

Ультразвуковой датчик

30

0

US-DIST-CM

ReadRawValue

Расстояние в миллиметрах

30

1

US-DIST-IN

ReadRawValue

Расстояние в десятых дюйма

Гироскопический датчик

32

0

GYRO-ANG

ReadRawValue

Угол отклонения в градусах

32

1

GYRO-RATE

ReadRawValue

Скорость вращения в градусах в секунду

Инфракрасный датчик

33

0

IR-PROX

ReadPercent

Расстояние в см (примерное)

33

1

IR-SEEK

ReadRaw

value[0] — направление на ИК-маяк, value[1] — Расстояние до ИК-маяка

33

2

IR-REMOTE

ReadRawValue

value[0] — сигнал на канале 1, value[1] — сигнал на канале 2, и т.д.

NXT датчики

Тип

Режим

Название режима

Доступные функции

Возвращаемое значение

Датчик касания

1

0

NXT-TOUCH

ReadPercent

0 — не нажат, 100 — нажат

Цветосветовой датчик

4

0

NXT-REFLECT

ReadPercent

0 — нет отраженного света, 100 — макс. яркость

4

1

NXT-AMBIENT

ReadPercent

0 — нет внеш. освещ., 100 — макс. яркость

4

2

NXT-COLOR

ReadRawValue

1 — черный, 2 — синий, 3 — зеленый, 4 — желтый, 5 — красный, 6 — белый

Ультразвуковой датчик

5

0

NXT-US-CM

ReadRawValue

Расстояние в сантиметрах

Файловая структура

Блок EV3 работает под управлением операционной системы Linux. Пользователям доступна часть папок, в которых они могут размещать файлы своих проектов.

/home
    /root
        /lms2012
            /apps
            /source
            /sys
            /tools
            /prjs - начальная папка проектов
                /BrkProg_SAVE
                    /CVS
                /SD_Card
                    /Project - папка проектов на карте памяти

Начальная папка проектов (prjs) и все папки ниже доступны пользователям через файловый менеджер самого блока EV3. В начальную папку записываются ваши программы и данные по умолчанию. Программа EV3 Explorer при запуске открывает на блоке именно эту папку. Все пути для ваших программ начинаются именно от начальной папки проектов, где бы ни находилась ваша программа. Поэтому, если вы захотите сохранить свой файл на карте памяти, вы должны указать к нему путь, например, так: /SD_Card/Project/my_prj/my_file.txt.

Ошибки программ

Бывает, что программа, запущенная в «PC-режиме» (кнопкой «Запуск» в среде MS Small Basic с подключенным блоком EV3) прекрасно работает, но при попытке скомпилировать ее в RBF-файл для автономной работы на блоке возникает ошибка. Разумеется, когда такое происходит при попытке использовать функции, которые не поддерживает блок EV3 (например, вывод на экран компьютера TextWindow.Write()), — все очевидно. Однако, иногда встречаются далеко не такие простые и очевидные ошибки.

Несколько рекомендаций, как их можно избежать:

  • Не используйте методы, работающие с компьютерными объектами, например, такими как GraphicWindow, TextWindow и т.п.
  • Вместо класса Timer используйте метод Program.Delay().
  • Не используйте переменные до того, как им были присвоены значения.
  • Размещайте подпрограммы перед основной программой.
  • Не используйте строки в качестве индексов массива: только числовые индексы, желательно, целые последовательные числа, начинающиеся с 0.
  • Не используйте следующий способ присваивания значений элементам массива: Colors = " 0 = UNKNOWN; 1 = BLACK; 2 = BLUE; 3 = GREEN".
  • В имени файла .sb для EV3 используйте не более 25 символов.
  • В именах файлов разрешены следующие символы: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 -_ и символ пробела » «.
  • В EV3 Basic тип переменной не может изменяться в процессе выполнения программы и определяется при первом присваивании  — по типу значения.
  • В компиляторе EV3 Explorer «машинный нуль» больше, чем в MS Small Basic: если присвоить переменной очень маленькое числовое значение, например A = 0,0000001, то это сработает в PC-режиме, однако, не скомпилируется в EV3 Explorer.

Дополнение

Каждый проект, который вы создаете в программном обеспечении EV3, состоит из множества файлов меньшего размера (изображений, звуков и т. д.). В одном файле проекта может храниться одна или несколько программ, наряду с изображениями, звуковыми файлами, текстовыми файлами и (или) файлами регистрации необработанных данных.

Разные типы файлов, используемых в программном обеспечении EV3, имеют свои расширения файлов. Понимая, какого типа этот файл, вы сможете лучше разобраться в том, с какими типами данных вы столкнулись. Большинство специфических форматов файлов декодируются или редактируются только в фирменном программном обеспечении от LEGO (другая ссылка).

Тип файлаРасширение файла
Файлы программ.rbf, .uf2
Программы.ev3p
Эксперименты регистрации данных.ev3e
Звуковые файлы.rsf
Графика и изображения.rgf
Журналы данных (необработанные данные).rdf
Файл проекта (включает все три указанные выше типа).ev3
Текстовый файл (обратите внимание: это простой текстовый файл).rtf, .txt

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

Каждый блок EV3 имеет доступную память около 16 мегабайт. Некоторая часть этой памяти используется для хранения программ примеров, графики, звуковых файлов, которые предварительно загружены на модуль EV3. Таким образом, остается около 6 мегабайт для файлов, которые вы создаете и загружаете.

Если вы хотите освободить больше места в памяти, вы можете удалить программы примеров. При обновлении встроенного ПО модуля EV3 все файлы будут восстановлены до состояния, установленного по умолчанию производителем.

Дополнительное место для хранения можно получить, используя порт встроенной SD-карты. Модуль EV3 воспринимает SD-карты максимальной емкостью 32 Гб.


Поделиться:

  •