RoboCam – управляем роботом от первого лица с клавиатуры компьютера
В новой версии приложения RoboCam добавлена поддержка физической клавиатуры, то есть теперь у вас появилась возможность управлять роботом LEGO Mindstorms EV3 от первого лица со стационарного компьютера или ноутбука. В этой статье я опишу, как настроить приложение RoboCam, чтобы использовать новую возможность, а также напишу, что ещё появилось в новой версии.
Статья описывает новые возможности, появившиеся в версии 1.2 приложения RoboCam. Все статьи посвященные приложению RoboCam вы можете найти здесь. Приложение RoboCam можно установить из магазина Google Play или скачать apk-файл и установить приложение вручную. Для скачивания есть 2 версии: обычная версия RoboCam и версия RoboCam с использованием RenderScript (для некоторых старых смартфонов).
Все изменения, которые произошли в новой версии, коснулись только настроек роботов, поэтому сразу начнём разбираться, что нового здесь появилось. Итак, обновите или установите приложение RoboCam, запустите его и откройте настройки какого-либо робота. Я буду использовать в статье настройки «Исследователя EV3». Если вы не знаете, как открыть настройки робота, прочтите первую статью о приложении RoboCam.
Итак, первое, что бросается в глаза – это галочка «Показывать отладочную информацию». Если эта галочка установлена, то на клиенте будут показываться координаты джойстика, когда он используется, и коды нажатых клавиш.
Если установлена галочка «Скрывать джойстики при использовании клавиатуры», то джойстики на клиенте исчезнут, как только будет нажата любая клавиша на клиенте. Так джойстики не будут мешать вам. Как только вы щёлкните мышкой по экрану, джойстики появятся снова.
Автоматический запуск пользовательской программы на EV3
Следующая настройка будет полезна, если при управлении роботом через приложение RoboCam, в модуле EV3 должна работать пользовательская программа, которая, например, будет просматривать определённые почтовые ящики и управлять моторами. Если вы поставите галочку «Запускать программу» и в поле ниже введёте полный путь к файлу программы (например, «../prjs/MyProgram/MyProgram.rbf»), то при подключении приложения RoboCam, указанная программа сразу запустится на EV3. При этом при отключении клиента-водителя, указанная программа будет перезапущена.
Программы, которые вы создаёте с помощью фирменного ПО LEGO MINDSTORMS Education EV3 и загружаете на EV3, попадают в папку с пользовательскими проектами «../prjs». В этой папке создаётся папка с названием проекта, а в ней файл с названием программы и расширением «.rbf». Рассмотрим на примере. Допустим, вы создали простой проект с названием «MyProject» и программой «MyProgram», см. рисунок ниже. Программа выводит на экран надпись «Hello!» и зависает в бесконечном цикле.
Как видите, на верхней закладке написано «MyProject» - это название проекта, а на закладке снизу – «MyProgram» - это название программы. После загрузки программы на EV3, путь к файлу программы будет «../prjs/MyProject/MyProgram.rbf». В настройках RoboCam так и указываем, см. картинку ниже.
Теперь, когда вы подключите приложение RoboCam к EV3, на EV3 сразу запустится программа «MyProgram.rbf» и на экране отобразится текст «Hello!». При отключении RoboCam от EV3, программа остановится и на экране модуля EV3 снова появится меню.
Обратите внимание, что при указании полного пути к программе важен регистр. Если вместо заглавной буквы вы напишите строчную, то программа не запустится. Если вы ошибётесь при написании пути к программе хотя бы в одном символе, то программа также не запустится.
Если во время подключения к EV3, запущено выполнение какой-либо пользовательской программы, то программа, указанная в настройках RoboCam, запущена не будет.
Управление роботом с помощью физической клавиатуры
Кроме настроек, упомянутых выше, в приложении RoboCam появилась поддержка физической клавиатуры на клиенте. Давайте разберёмся, как осуществляется управление роботом EV3 с клавиатуры. А работает это так. В настройках приложения RoboCam задаются клавиши, на которые робот должен каким либо образом реагировать. Клиент об этих клавишах знает и постоянно проверяется статусы этих клавиш, нажаты они или нет. Если какую либо из проверяемых клавиш нажали или отпустили, то код этой клавиши и её новый статус сразу передаются приложению RoboCam. Дальше, в зависимости от настроек, приложение RoboCam либо напрямую управляет двигателями робота, либо отправляет коды клавиш в почтовые ящики EV3.
Группы клавиш
Чтобы разделить функции, возлагаемые на те или иные клавиши, в приложении RoboCam используются группы клавиш. Количество групп клавиш не ограничено. Каждой группе клавиш, так же как и в случае с джойстиками, вы сможете доверить либо непосредственное управление двигателями, либо коды клавиш просто будут передаваться в почтовый ящик, и вы сможете возложить их обработку на программу EV3.
Пролистайте настройки робота вниз, до заголовка «Группы клавиш». Если вы смотрите настройки «Исследователя EV3», то, скорее всего, здесь уже добавлено две группы клавиш (на картинке ниже видно группу клавиш 1), одна для руления роботом (клавишами W, A, S, D и клавишами стрелками), а вторая для управления рамкой для смартфона (клавишами Y и H).
Если вы обновили приложение RoboCam, то групп клавиш в настройках «Исследователя EV3» вы не увидите, это происходит из-за того, что настройки остались от предыдущей версии, в которой ещё не было поддержки группы клавиш. Если вы хотите чтобы настроенные группы клавиш появились, то вам нужно удалить настройки «Исследователь EV3», и, после перезапуска RoboCam, они создадутся снова и в них уже будут группы клавиш.
Удалить настройки «Исследователь EV3» можно одним из следующих способов:
-
-
- Нажать на кнопку «Удалить» из списка настроек. Чтобы это сработало, настройки не должны быть текущими.
- Стереть все данные приложения RoboCam в диспетчере приложений Android (все другие настройки в этом случае тоже пропадут, поэтому, если они вам дороги, нужно их экспортировать, а после переустановки импортировать обратно! Как экспортировать и импортировать см. здесь).
- Удалить и установить приложение RoboCam заново (все другие настройки в этом случае тоже пропадут, поэтому, если они вам дороги, нужно их экспортировать, а после переустановки импортировать обратно! Как экспортировать и импортировать см. здесь).
-
Первая галочка, которую вы можете увидеть в настройке группы клавиш – это «Активность». Если эту галочку убрать, то группа клавиш станет неактивной, как будто её нет вовсе. Настройки в этом случае скроются, но не пропадут.
Статусы клавиш постоянно проверяются на клиенте, даже если клавиатура не используется, поэтому, если вы планируете использовать только джойстики, рекомендуется деактивировать все группы клавиш, чтобы не нагружать процессор клиента и не разряжать аккумулятор.
Дальше следует выбор типа группы клавиш – настройка «Тип». Каждая группа клавиш может быть одного из трёх следующих типов: «Независимые моторы», «Руление» или «Почтовый ящик».
У групп клавиш «Независимые моторы» и «Руление» вы можете задать неограниченное количество клавиш «вверх», «вниз» (назовём их клавишами вертикальной оси) и клавиш «вправо», «влево» (назовём их клавишами горизонтальной оси). Чуть ниже вы увидите, как это сделать.
В группе «Независимые моторы» клавиши вертикальной оси могут управлять одним мотором (далее мотор A) или несколькими моторами, а клавиши горизонтальной оси - другим мотором (далее мотор B) или другими моторами. При этом мотор A не зависит от клавиш горизонтальной оси, а мотор B – не зависит от клавиш вертикальной оси. Именно поэтому такая группа клавиш называется «Независимые моторы».
Для группы «Независимые моторы» отдельно задаются порты, моторы на которых будут управляться клавишами вертикальной оси и отдельно порты, моторы на которых будут управляться клавишами горизонтальной оси. С помощью такой группы клавиш вы сможете управлять, например, автомобилем, у которого клавишами «вверх» и «вниз» будет разгоняться и останавливаться мотор, который крутит задние колёса, а клавишами «влево» и «вправо» будет поворачиваться мотор, который крутит руль.
В группе «Руление» клавиши вертикальной и горизонтальной осей связаны. Здесь уже задаются порты для левого и правого мотора и при нажатии на одну из клавиш крутятся оба эти мотора. Например, если вы нажимаете клавишу «вверх», то оба двигателя крутятся так, чтобы робот ехал вперёд, если нажимаете клавишу «влево», то тоже крутятся оба мотора, только левое колесо назад, а правое вперёд, и получается, что робот поворачивает налево.
У группы клавиш «Почтовый ящик» тоже задаются клавиши, но здесь они не управляют роботом, а просто передаются в указанный почтовый ящик на EV3. Не указанные здесь клавиши не попадут в почтовый ящик группы клавиш.
А теперь давайте рассмотрим подробнее настройки групп клавиш «Независимые моторы» и «Руление». Чуть ниже вы увидите параметры «Окончание нажатия (для клавиш влево/вправо)» и «Окончание нажатия (для клавиш вверх/вниз)», которые определяют, что будет происходить, когда пользователь отпустит нажатую клавишу. Здесь, так же как и в случае с джойстиками, есть два варианта – «Возвращаться к нулю» и «Сохранять позицию».
Работает это так. Допустим, при нажатии на клавишу W у вашего робота крутятся два мотора, и робот едет вперёд. Если в настройках установлено «Возвращаться к нулю», то когда вы отпустите клавишу W, скорость вернётся к нулю, моторы перестанут крутиться, и робот остановится. А если бы у вас было установлено «Сохранять позицию», то двигатель продолжал бы крутиться, т.е. в данном случае, после отпускания клавиши, скорость сохранится.
Теперь другой пример, допустим, при нажатии на клавишу Y меняется угол поворота среднего двигателя, и рамка, которая держит смартфон, наклоняется вниз. В этом случае, если в настройках установлено «Возвращаться к нулю», то когда вы отпустите клавишу Y, угол поворота среднего двигателя вернётся к нулю, рамка повернётся обратно и встанет вертикально. А если у вас будет установлено «Сохранять позицию», и вы отожмёте клавишу Y, то двигатель останется повёрнутым на тот же угол, который был в момент отпускания клавиши Y, и рамка сохранит свою позицию.
Следующие параметры группы клавиш отвечают за пошаговое увеличение или уменьшение скорости или угла поворота моторов. Дело в том, что у клавиш есть всего два состояния – нажата или отжата. Представьте, мы управляем Исследователем EV3 и нажимаем на клавишу Y, при этом угол сразу меняется на 100 градусов. Причём это происходит так резко, что смартфон, прикреплённый к рамке, может оторваться и улететь. Или вот ещё ситуация, вы нажимаете на клавишу D и робот начинает резко поворачиваться вправо, а ведь нам нужно было повернуться чуть-чуть, но из-за большой скорости мы повернулись слишком много.
Такая работа робота, как описана выше, нас не устраивает, поэтому с помощью пошагового изменения скорости и угла поворота можно сделать управление с клавиатуры более удобным. Например, мы можем сделать, чтобы при движении робот ускорялся постепенно, а рамка двигалась мелкими шажками. В настройках «Исследователя EV3» именно так и сделано. Давайте рассмотрим эти параметры.
Чуть ниже вы увидите шесть полей для пошагового управления двигателями «Увеличение по горизонтали», «Увеличение по вертикали», «Уменьшение по горизонтали», «Уменьшение по вертикали», «Пауза между горизонтальными увеличениями/уменьшениями» и «Пауза между вертикальными увеличениями/уменьшениями».
Как уже было написано выше, у нас есть клавиши вертикальной оси и клавиши горизонтальной оси. Так вот, «Увеличение по горизонтали» и «Уменьшение по горизонтали» - эти настройки показывают, с каким шагом будет меняться скорость или угол подключенных моторов при использовании клавиш вертикальной оси, а параметры «Увеличение по вертикали» и «Уменьшение по вертикали» - тоже для клавиш вертикальной оси. Параметры «Пауза между горизонтальными увеличениями/уменьшениями» и «Пауза между вертикальными увеличениями/уменьшениями» указывают интервал в миллисекундах между этими шагами.
Разберёмся на примере. Допустим клавиша W – это клавиша «вверх», т.е. – это клавиша вертикальной оси. С этой клавишей связаны два больших мотора, которые крутят колёса. У нас в настройках увеличение по вертикальной оси равно 15, а уменьшение – 50. Это значит, что когда на клиенте мы нажмём и будем держать клавишу W, то скорость вращения больших моторов будет увеличиваться пошагово на 15 единиц каждые 100 миллисекунд, пока не достигнет максимального значения, т.е. 100 единиц. Т.е. робот будет плавно разгоняться. А вот когда мы отпустим клавишу W, то скорость начнёт падать пошагово каждые 100 миллисекунд на 50 единиц, пока не достигнет нуля. Т.е. робот остановится тоже плавно, но гораздо резче, чем он разгонялся.
Обратите внимание, что увеличением здесь считается изменение скорости или угла от 0 до 100 и от 0 до -100, а уменьшением – изменение от 100 до 0 и от -100 до 0.
Значения шагов могут быть в пределах от 0 до 200, причём, если вы выставили 0 или 200 – то скорость или угол будут меняться резко, а не пошагово.
Значение для паузы не может быть меньше 100 миллисекунд. Учтите, что каждая реальная пауза между шагами может быть больше выставленной вами, т.к. при отправке команд на EV3 могут происходить задержки.
С помощью следующих 4-х кнопок «Клавиши вверх», «Клавиши влево», «Клавиши вниз» и «Клавиши вправо» вы можете задать определённые клавиши для управления роботом. Чтобы задать или изменить выбранные клавиши, нажмите на нужную кнопку. После этого откроется список доступных клавиш. Выберите здесь нужные клавиши и нажмите на кнопку «Готово».
Если вы подключите к своему смартфону физическую клавиатуру, то вы сможете выбрать клавиши с помощью неё, нажимая на нужную клавишу, пока открыт этот список. Правда в этом случае не все клавиши можно будет выбрать.
Дальше в настройках группы клавиш идут порты. Порты групп клавиш настраиваются аналогично портам джойстиков, и рассматривать это подробно я здесь не буду. Про настройки портов читайте в статье «Управление роботом LEGO Mindstorms EV3 от первого лица».
Теперь давайте отдельно рассмотрим настройки для группы клавиш «Почтовый ящик». Итак, если вы переключите тип на «Почтовый ящик», то увидите, что настройки для этой группы клавиш поменяются. Здесь будут только «Название почтового ящика» и «Клавиши». В поле «Название почтового ящика» указывается имя постового ящика EV3, в который будут приходить коды нажатых клавиш, среди тех которые вы укажите ниже с помощью кнопки «Клавиши». Коды клавиш, которые здесь не перечислены, приходить в почтовый ящик не будут.
Рассмотрим на примере, как получить в модуле EV3 коды цифровых клавиш 0 – 9. Для этого почтовому ящику дадим название «test» и укажем все клавиши от 0 до 9.
Теперь переделаем нашу программу, которую мы делали выше для EV3, следующим образом, см. рисунок ниже. Здесь мы просто будем выводить на экран код клавиши, полученный из почтового ящика «test». Готовую программу загрузите в модуль EV3.
К сожалению, блок работы с почтовым ящиком не может принимать массив чисел, поэтому в почтовый ящик передаётся только код последней нажатой клавиши или 0, если последнюю нажатую клавишу отпустили. Поэтому, чтобы сделать независимую обработку нескольких клавиш, нужно сделать несколько почтовых ящиков – один почтовый ящик для одной клавиши.
После того как программа загружена на EV3, не забудьте поставить галочку «Запускать программу» и указать к ней путь «../prjs/MyProject/MyProgram.rbf».
Теперь, когда вы подключите приложение RoboCam к EV3, на EV3 сразу запустится программа, MyProgram.rbf и на экране появится цифра 0, означающая, что ни одна клавиша не нажата. Теперь запустите сервер RoboCam, подключитесь к нему с помощью браузера на вашем компьютере и попробуйте понажимать на клавиши. Вы увидите, что когда вы нажимаете клавиши с цифрами, то код последней нажатой клавиши отображается на экране EV3, а при нажатии других клавиш – отображается 0.
Теперь поговорим о кодах клавиш. Вы можете использовать большинство клавиш, коды которых в основном соответствуют кодировке ASCII. Однако есть так называемые горячие клавиши, на которые браузер реагирует особым образом. Например, клавиша F1 вызывает справку браузера, а клавиша F5 обновляет открытую страницу. Такие клавиши будут недоступны в приложении RoboCam. В таблице ниже приведены все клавиши, которые вы можете использовать с приложением RoboCam, а также их коды.
Код | Клавиша | Код | Клавиша | Код | Клавиша |
8 | Backspace | 57 | 9 | 99 | 3 (Numpad) |
9 | Tab | 65 | A | 100 | 4 (Numpad) |
12 | Clear | 66 | B | 101 | 5 (Numpad) |
13 | Enter | 67 | C | 102 | 6 (Numpad) |
16 | Shift | 68 | D | 103 | 7 (Numpad) |
17 | Ctrl | 69 | E | 104 | 8 (Numpad) |
18 | Alt | 70 | F | 105 | 9 (Numpad) |
19 | Pause | 71 | G | 106 | (*) (Numpad) |
20 | Caps Lock | 72 | H | 107 | (+) (Numpad) |
27 | Esc | 73 | I | 109 | (-) (Numpad) |
32 | Space | 74 | J | 110 | (.) (Numpad) |
33 | Page Up | 75 | K | 113 | F2 |
34 | Page Down | 76 | L | 115 | F4 |
35 | End | 77 | M | 118 | F7 |
36 | Home | 78 | N | 119 | F8 |
37 | Left | 79 | O | 120 | F9 |
38 | Up | 80 | P | 121 | F10 |
39 | Right | 81 | Q | 144 | Num Lock |
40 | Down | 82 | R | 145 | Scroll Lock |
45 | Ins | 83 | S | 186 | (;) |
46 | Del | 84 | T | 188 | (,) |
48 | 0 | 85 | U | 189 | (-) |
49 | 1 | 86 | V | 190 | (.) |
50 | 2 | 87 | W | 191 | (/) |
51 | 3 | 88 | X | 192 | (`) |
52 | 4 | 89 | Y | 219 | ([) |
53 | 5 | 90 | Z | 220 | (\) |
54 | 6 | 96 | 0 (Numpad) | 221 | (]) |
55 | 7 | 97 | 1 (Numpad) | 222 | (') |
56 | 8 | 98 | 2 (Numpad) |
Вот мы и разобрались с новым функционалом, который появился в приложении RoboCam. Все вопросы по использованию клавиатуры можете оставлять ниже в комментариях. Также вам могут быть полезны другие статьи по приложению RoboCam.
Tags: RoboCam Учебники по использованию программ Обзоры программ
Комментарии
It would be nice to be able to get gyro sensor data from the phone to a messenger block.
Then I do not need to buy gyro sensor to my EV3 and use one of my ports for it.
I have now ok stearing control to my holonomic / omni robot. :)
Regards Magnus
Just want to show you what you can do with your RoboCam app.
I have made a holonomic omni EV3 robot and plan to set up a telerobotic game with your app.
Would really like to get your source code to make some adjustments.
www.youtube.com/watch?v=VmEzJDlAiNw
Regards Magnus
RSS лента комментариев этой записи