Автоматическое и ручное управление контроллера EV3

Відповісти
artyom_n
Повідомлень:1
З нами з:22 квітня 2016, 12:37
Автоматическое и ручное управление контроллера EV3

Повідомлення artyom_n » 22 квітня 2016, 12:59



Пост содержит описание опыта использования конструктора Lego Mindstorms EV3 для создания прототипа робота с его последующим программным и ручным управлением при помощи Robot Control Meta Language (RCML).

Далее будут рассмотрены следующие ключевые моменты:
  • Сборка прототипа робота на базе конструктора Lego Mindstorms EV3
  • Быстрая установка и настройка RCML для Windows
  • Программное управление роботом на базе контроллера EV3
  • Ручное управление периферией робота с помощью клавиатуры и геймпада
Забегая немного вперед, добавлю, что для реализации управления Lego-роботом с помощью клавиатуры требуется создать программу, содержащую всего 3 строки программного кода. Подробней о том, как это сделать написано далее.

1. Для начала из конструктора Lego Mindstorms EV3 был создан прототип робота, который будет использоваться для программирования и ручного пилотирования.
Описание прототипа робота (Фото 1.5 Мб)
Робот имеет конструкцию схожую с автомобильным шасси. Два мотора, установленные на раме, имеют одну общую ось вращения, которая соединена с задними колесами через редуктор. Редуктор преобразует крутящий момент путем увеличения угловой скорости задней оси. Рулевое управление собрано на базе конического редуктора.

Зображення
Зображення
Зображення
Зображення
Зображення
Зображення
2. Следующий шаг - подготовка RCML для работы с конструктором Lego Mindstorms EV3.

Следует скачать архивы с исполняемыми файлами и файлами библиотек rcml_build_1.0.6.zip и rcml_modules_build_1.0.6.zip.

Далее описан процесс выполнения быстрого старта для взаимодействия RCML и Lego робота, управляемого контроллером EV3.

Скаченные архивы нужно извлечь в каталог с произвольным именем, однако следует избегать русских букв в названии.
Содержимое каталога после распаковки в него архивов
Зображення
Далее необходимо создать файл конфигурации config.ini, который необходимо расположить в этом же каталоге. Для реализации возможности управления контроллером EV3 при помощи клавиатуры и геймпада, следует подключить модули lego_ev3, keyboard и gamepad.
Листинг конфигурационного файла config.ini для RCML

Код: Виділити все

[robot_modules]
module = lego_ev3
[control_modules]
module = keyboard
module = gamepad
Далее следует произвести сопряжение контроллера EV3 и адаптера.
Инструкция для сопряжения контролера EV3 и Bluetooth адаптера
Инструкция содержит пример сопряжения контроллера Lego Ev3 и ПК под управлением операционной системы Windows 7.

1. Нужно перейти в раздел настроек контроллера Ev3, далее в пункт меню «Bluetooth»

2. Следует убедиться в правильности установки параметров конфигурации. На против пунктов “Visibility”,” Bluetooth” должны быть установлены галочки.
Зображення

3. Необходимо перейти в «Панель управления», далее «Устройства и принтеры», далее «Устройства Bluetooth»
Зображення

4. Необходимо нажать кнопку «Добавление устройства». Откроется окно для выбора доступных Bluetooth устройств.
Зображення

5. Следует выбрать устройство “EV3” и нажать кнопку «Далее»

6. На экране контроллера EV3 отразится диалоговое окно «Connect?». Нужно выбрать вариант галочки, и подтвердить свой выбор нажатием центральной клавиши.
Зображення

7. Далее отобразиться диалоговое окно «PASSKEY», в строке ввода должны быть указаны цифры «1234», далее следует подтвердить ключевую фразу для сопряжения устройств, путем нажатия центральной клавиши на позиции с изображением галочки.
Зображення

8. В мастере сопряжения устройства появится форма для ввода ключа для сопряжения устройств. Нужно ввести код «1234» и нажать клавишу «Далее».
Зображення

9. Далее отобразиться окно, с успешным подключением устройства. Следует нажать клавишу «Закрыть».
Зображення

10. На ПК необходимо вернуться в «Панель управления», далее «Устройства и принтеры», далее «Устройства Bluetooth». В списке доступных устройств отобразится устройство, с которым было произведено сопряжение.
Зображення

11. Следует двойным нажатием зайти в свойства подключения “EV3”
Зображення

12. Далее необходимо перейти во вкладку «Оборудование»
Зображення

13. Далее следует двойным нажатием перейти в свойства подключения «Стандартный последовательный порт по соединению Bluetooth»
Зображення

14. Указанный в свойствах индекс COM-порта, следует использовать в конфигурационном файле config.ini модуля lego_ev3. В примере показаны свойства Bluetooth подключения контроллера Lego EV3 с использованием стандартного последовательного порта COM14.
Дальнейшая конфигурация модуля сводится к тому, что необходимо прописать в конфигурационном файле модуля lego_ev3 адрес COM-порта, через который осуществляется коммуникация с роботом Lego.
Листинг конфигурационного файла config.ini для модуля lego_ev3

Код: Виділити все

[connections]
connection = COM14
[options]
dynamic_connection = 0
Теперь необходимо произвести настройку модуля keyboard. Модуль находится в каталоге control_modules, далее keyboard. Следует создать конфигурационный файл config.ini рядом с файлом keyboard_module.dll. Перед тем, как создать конфигурационный файл, необходимо определить, какие действия должны быть совершены по нажатию клавиш.

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

В качестве примера, буду использовать нажатия следующих клавиш:
  • Стрелки вверх/вниз используются для вращения мотора задних колес вперед/назад
  • Стрелки влево/вправо поворачивают колеса влево/вправо
Файл конфигурации модуля keyboard описывает, какие оси доступны программисту, для осуществления взаимодействия с роботом в режиме ручного управления. Таким образом, в примере получилось две управляющих группы – это оси клавиатуры. Для добавления новой оси, следует придерживаться следующих правил описания осей.
Правила описания осей для модуля keyboard
1. При добавлении новой оси, необходимо в секцию [mapped_axis] добавить свойство, имя которого есть имя оси, и присвоить ему значение кнопки клавиатуры в HEX формате, при этом на каждую кнопку заводится подобная запись, т.е. имя оси может быть использовано несколько раз. В общем случае запись в секцию [mapped_axis] будет выглядеть следующим образом:

Код: Виділити все

имя_оси = значение_кнопки_клавиатуры_в_HEX_формате
2. Необходимо установить максимальное и минимальное значение, которое может откладываться по данной оси. Для этого необходимо с новой строки добавить секцию в конфигурационном файле config.ini, одноименную с именем оси, и задать свойства upper_value и lower_value, которые соответствуют максимум и минимуму оси соответственно. В общем виде данная секция выглядит следующим образом:

Код: Виділити все

[имя_оси] 
upper_value = максимальное_значение_оси 
lower_value = минимальное_значение_оси
3. Далее следует определить, какое значение будет иметь ось в случае нажатия кнопки на клавиатуре, которая ранее была прикреплена к ней. Определение значений происходит посредством создания секции, название которой состоит из имени оси и значения кнопки клавиатуры в HEX формате, разделенные между собой символом нижнего подчеркивания. Для задания значения по умолчанию (в не нажатом) и нажатом состоянии используются свойства unpressed_value и pressed_value соответственно, в которые передаются значения. Общий вид секции в таком случае выглядит следующим образом:

Код: Виділити все

[имя-оси_значение-кнопки-клавиатуры] 
pressed_value = значение_оси_при_нажатой_клавише 
unpressed_value = значение_оси_при_отжатой_клавише
Текст спойлера для удобства просмотра скопирован из документации по RCML.
Для реализации управления прототипом робота был создан конфигурационный файл модуля keyboard, который включает в себя оси go и rotate. Ось go используется для задания направления движения робота. При нажатии клавиши “стрелка вверх” ось получит значение 100, при нажатии клавиши “стрелка вниз” ось примет значение -50. Ось rotate используется для установки угла поворота передних колес. При нажатии клавиши “стрелка влево” значение оси будет равно -5, при нажатии «стрелки вправо» ось примет значение 5.
Листинг конфигурационного файла config.ini для модуля keyboard

Код: Виділити все

;Обязательная секция
[mapped_axis]
;название_оси = код_клавиши (в HEX формате)

;Ось go получает значения от стрелки_вверх
go = 0x26
;Ось go получает значения от стрелки_вниз
go = 0x28

;Ось rotate получает значения от стрелки_влево
rotate = 0x25
;Ось rotate получает значения от стрелки_вправо
rotate = 0x27

;Описание оси go, всегда должно иметь оба ключа
[go]
;Верхняя граница значений оси go
upper_value = -100
;Нижняя граница значений оси go
lower_value = 100

;Описание оси rotate, всегда должно иметь оба ключа
[rotate]
;Верхняя граница значений оси rotate
upper_value = -100
;Нижняя граница значений оси rotate
lower_value = 100

;Описание поведения оси go для клавиши *стрелка_вверх* (0x26)
[go_0x26]
;При нажатии клавиши *стрелка_вверх* значение оси задать равным 50
pressed_value = 100
;При отпускании клавиши *стрелка_вверх* значение оси задать равным 0
unpressed_value = 0

;Описание поведения оси go для клавиши *стрелка_вниз* (0x28)
[go_0x28]
;При нажатии клавиши *стрелка_вниз* значение оси задать равным -50
pressed_value = -50
;При отпускании клавиши *стрелка_вниз* значение оси задать равным 0
unpressed_value = 0

;Описание поведения оси rotate для клавиши *стрелка_влево* (0x25)
[rotate_0x25]
;При нажатии клавиши *стрелка_влево* значение оси задать равным -5
pressed_value = -5
;При отпускании клавиши *стрелка_влево* значение оси задать равным 0
unpressed_value = 0

;Описание поведения оси rotate для клавиши *стрелка_вправо* (0x27)
[rotate_0x27]
;При нажатии клавиши *стрелка_вправо* значение оси задать равным 5
pressed_value = 5
;При отпускании клавиши *стрелка_вправо* значение оси задать равным 0
unpressed_value = 0
Далее для реализации управления при помощи геймпада, необходимо настроить модуль gamepad. Конфигурирование модуля включает в себя создание конфигурационного файла config.ini рядом с gamepad_module.dll, находящего в каталоге control_modules, далее gamepad.
Универсальный файл конфигурации модуля для взаимодействия с геймпадом

Код: Виділити все

;Обязательная секция описания используемых осей
 [axis]
;Ось для завершения режима ручного управления
Exit = 9
; 11 бинарных осей, соответствующих кнопкам геймпада
B1 = 1
B2 = 2
B3 = 3
B4 = 4
L1 = 7
L2 = 5
R1 = 8
R2 = 6
start = 10
T1 = 11
T2 = 12
; 4 оси стиков
;Правый стик движение вверх/вниз
RTUD = 13
;Правый стик движение влево/вправо
RTLR = 16
;Левый стик движение вверх/вниз
LTUD = 15
;Левый стик движение влево/вправо
LTLR = 14
; 2 оси крестовины
;Движение крестовины вверх/вниз
arrowsUD = 17
;Движение крестовины влево/вправо
arrowsLR = 18

;Описание поведения оси B1
[B1]
;При нажатии кнопки B1 значение оси задать равным 1
upper_value = 1
;При отпускании кнопки B1 значение оси задать равным 0
lower_value = 0
	
[B2]
upper_value = 1
lower_value = 0
	
[B3]
upper_value = 1
lower_value = 0
	
[B4]
upper_value = 1
lower_value = 0
	
[L1]
upper_value = 1
lower_value = 0
	
[L2]
upper_value = 1
lower_value = 0
	
[R1]
upper_value = 1
lower_value = 0
	
[R2]
upper_value = 1
lower_value = 0
	
[start]
upper_value = 1
lower_value = 0
	
[T1]
upper_value = 1
lower_value = 0
	
[T2]
upper_value = 1
lower_value = 0

;Описание поведения оси правого стика движение вверх/вниз
[RTUD]
;Значение оси при перемещении в максимально возможное верхнее положение
upper_value = 0
;Значение оси при перемещении в максимально возможное нижнее положение
lower_value = 65535
	
[RTLR]
upper_value = 0
lower_value = 65535
	
[LTUD]
upper_value = 0
lower_value = 65535

[LTLR]
upper_value = 0
lower_value = 65535

;Описание поведения оси крестовины движение вверх/вниз
[arrowsUD]
;Значение оси при нажатии стрелки вверх
upper_value = 1
;Значение оси при нажатии стрелки вниз
lower_value = -1
	
[arrowsLR]
upper_value = 1
lower_value = -1
Дополнительная информация об особенностях настройки модуля gamepad отображена в справочном руководстве по RCML.

3. Следующий шаг - написание программы на языке RCML.

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

Для модуля lego_ev3 программный код резервирования робота, имеет следующий вид:

Код: Виділити все

@tr = robot_lego_ev3;
На странице подключения модуля lego_ev3 описано большинство функций, поддерживаемых контроллером. В качестве тестового примера, была создана программа для автоматического вхождения робота в занос.

Алгоритм программы следующий:

После резервирования первого свободного работа, устанавливается связь двух двигателей для последующей работы с ними, как с одним. Затем робот начинает выполнять заносы. Программное описание действий робота позволяет точно устанавливать углы поворота передних колес и скорость вращения задних. Использование этого приёма позволяет добавиться результатов, которых сложно повторить во время ручного пилотирования с клавиатуры или геймпада.
Листинг программы для Lego робота на языке RCML

Код: Виділити все

function main() { 
    	@tr = robot_lego_ev3; //Резервирование робота
	@tr->setTrackVehicle("B","C",0,0); //Установка синхронизации двигателей
	
	@tr->motorMoveTo("D",100,0,0);
	system.sleep(500);
	@tr->trackVehicleForward(-100);
	system.sleep(1000);
	@tr->motorMoveTo("D",50,-50,0);
	system.sleep(4000);
	@tr->motorMoveTo("D",50,50,0);
	system.sleep(4000);
	@tr->trackVehicleOff();
	system.sleep(1000);
}
Для компилирования программы необходимо использовать командную строку window. Сначала следует переместиться в созданный каталог с исполняемыми файлами rcml_compiler.exe и rcml_intepreter.exe. Далее нужно ввести следующие команды.

Команда для компилирования файла hello.rcml:

Код: Виділити все

rcml_compiler.exe hello.rcml hello.rcml.pc
В результате компилирования, в созданной директории появится новый файл hello.rcml.pc.
Скриншот командой строки после успешного компилирования
Зображення
Теперь следует убедиться в том, что контроллер EV3 включен, сопряжен с Bluetooth адаптером. Геймпад должен быть подключен к ПК. После этого нужно выполнить команду исполнения программного файла:

Код: Виділити все

rcml_intepreter.exe hello.rcml
Внешний вид командной строки во выполнения программы
Зображення
Видеоролик демонстрирующий программу движения робота расположен внизу статьи.

4. Следующий шаг – управление роботом в ручном режиме при помощи клавиатуры.

Далее будет продемонстрирован процесс программной установки связи между двигателями робота и клавиатурой.

При помощи клавиатуры возможно управление любым двигателем робота. В рамках примера реализовано управление следующими механизмами:
  • Углом поворота передних колес
  • Направлением вращения задних колес
Листинг программы взаимодействия клавиатуры и робота Lego на базе контроллера EV3

Код: Виділити все

function main() { 
	@tr = robot_lego_ev3; //Резервирование робота
	@tr->setTrackVehicle("B","C",0,0); //Установка синхронизации двигателей
	system.hand_control(@tr,"keyboard",
				"straight","go",
				"speedMotorD","rotate");
}
Далее следует откомпилировать программу и выполнить её. Результат ручного управления Lego роботом при помощи на клавиатуры показан на видео внизу страницы.

5. Помимо клавиатуры доступен модуль gamepad позволяющий манипулировать роботом при помощи геймпада. Для реализации управления робота при помощи геймпада необходимо описать на уровне программы, какие оси робота будут принимать значения осей геймпада.
Листинг программы взаимодействия геймпада и робота Lego

Код: Виділити все

function main() { 
	@tr = robot_lego_ev3; //Резервирование робота
	@tr->setTrackVehicle("B","C",0,0); //Установка синхронизации двигателей
	system.hand_control(@tr,"gamepad",
				"straight"," RTUD",
				"speedMotorD"," RTLR");
}
Далее следует повторить процесс компилирования программы и затем выполнить её. Далее показан результат ручного управления Lego роботом при помощи на геймпада, и все ранее подключенные способы:


В статье кратко продемонстрированы только лишь некоторые возможности RCML. Наиболее подробное описание находиться в справочном руководстве.

Статья опубликована специально для сообщества ukrbricks.
Оригинал статьи опубликован на Geektimes

С радостью отвечу на Ваши вопросы!
Аватар користувача
Fyodor_Sh
Повідомлень:454
З нами з:15 вересня 2013, 00:26
Звідки:Полтава

Re: Автоматическое и ручное управление контроллера EV3

Повідомлення Fyodor_Sh » 22 квітня 2016, 15:32

:good2:
Отличная статья. Спасибо.
У меня теперь ещё больше желания появилось купить себе EV3.
BrickSet
rebrickable

Продажа деталей Lego http://bricks4sale.com.ua/
Группа в ВК: https://vk.com/bricks4sale
Facebook: https://www.facebook.com/Bricks4SaleUA/

Рассмотрю ваши предложения о продаже Lego Technic.
Аватар користувача
MaximB
Повідомлень:2424
З нами з:24 липня 2012, 02:06
Звідки:Ужгород

Re: Автоматическое и ручное управление контроллера EV3

Повідомлення MaximB » 24 квітня 2016, 23:43

Крутотень!
Видео посмотрел, текст прочитал бегло. Надеюсь будет время реализовать все это.
Зображення Зображення Зображення Зображення
Зображення
Відповісти

Повернутись до “LEGO Technic и Mindstorms”