Как управлять роботом с помощью мобильного телефона
Это продолжение статьи «Управляем мобильным роботом через блютус».
В этом проекте демонстрируется технология беспроводной связи Bluetooth, которая позволяет дистанционно управлять мобильным роботом с помощью сотового телефона.
Робот и мобильный телефон связываются через Bluetooth соединение. Команды управления движением передаются в контроллер робота при нажатии на соответствующие кнопки телефона.
Главное назначение этой статьи — показать ход мыслей и последовательность действий при разработке проекта. Для понимания статьи необходимо начальное знание основ программирования на языке Java.
Задача проекта
Сконструировать мобильного робота и разработать программное обеспечение для управления роботом с помощью команд с сотового телефона через Bluetooth.
Робот
Шасси мобильного робота собрано из конструктора fischertechnik ROBO TX Учебная лаборатория. Этот набор предназначен для создания роботов, способных двигаться, видеть и осязать. На шасси располагается программируемый контроллер ROBO TX Controller, который управляет электромоторами. Для нас важно, что у контроллера есть возможность управления роботом через Bluetooth. Более подробно про контроллер можно прочитать в статье «Программируемый блок управления ROBO TX».
Телефон
Под рукой оказался телефон Nokia 5500 Sport с поддержкой технологий Bluetooth и Java ME. Поэтому было решено использовать эту модель и не тратить время и деньги на дополнительные поиски.
Шаг 1
Для начала я изучил документацию на контроллер ROBO TX, которую можно найти в пакете PC Programming ROBO-TXC 1.2 на сайте fischertechnik. Из документации я понял следующее:
- Внутри контроллера крутится операционная система реального времени 4NetOS.
- Эта ОС предоставляет пользователю консольный интерфейс через виртуальный последовательный порт, который работает через USB или Bluetooth соединение.
- В консоли доступны разные команды, в том числе, для загрузки из flash-памяти прикладных программ и для запуска этих программ. Вот эти команды:
load — загрузка программы в RAM;
run — запуск пограммы, загруженной в RAM;
stop — остановка программы, выполняющейся в данный момент.
Выводы: Если научиться создавать Bluetooth соединение между телефоном и контроллером и затем получить доступ к виртуальному последовательному порту на телефоне, то тогда можно будет запускать заранее подготовленные программы в ROBO TX, засылая команды в удаленную консоль.
Шаг 2
Я проверил подключение к ROBO TX через Bluetooth с помощью ноутбука (в нем есть модуль Bluetooth) и терминальной программы PuTTY.
PuTTY — свободно распространяемый клиент для различных протоколов удалённого доступа, включая SSH, Telnet, rlogin. Также имеется возможность работы через последовательный порт.
Вначале я связал ноутбук с контроллером ROBO TX. На этом этапе требуется ввести пароль. Для всех контроллеров ROBO TX он стандартный — 1234.
Затем в свойствах Bluetooth интерфейса на компьютере я выяснил, какой последовательный порт мне надо использовать. В моем случае нужный мне порт имел номер COM18.
После этого я запустил PuTTY и проверил доступ к консоли. Предварительно я написал в ROBO Pro простую программку RunM, которая включает моторы M1 и M2 и загрузил её в ROBO TX. После того как я подключился к консоли я просто набрал в командной строке: «load /flash/RunM.bin», затем «run» и мой робот поехал.
Выводы: Теперь я могу управлять роботом через терминал, подключенный к удаленной консоли ROBO TX через Bluetooth. Остается проделать тоже самое на сотовом телефоне.
Шаг 3
Для начала я выяснил, какие технологии и API используются в моем Nokia 5500 Sport. На сайте www.developer.nokia.com я нашел свой девайс и в характеристиках увидел следующее:
Technical Specs:
Developer Platform: S60 3rd Edition (initial release)
Operating System: Symbian OS v9.1
APIs:
JSR 139 Connected, Limited Device Configuration (CLDC) 1.1
JSR 118 MIDP 2.0
JSR 82 Bluetooth API
…
Это именно то, что мне нужно. Значит приложение для телефона будем писать на Java.
Технология Java™ (произносится как «джава») состоит из языка и соответствующей программной платформы. Ключевым преимуществом платформы Java является то, что она может функционировать на большом количестве различных операционных систем, скрывая детали реализации конкретного устройства от приложения и разработчика.
Располагая этой информацией я скачал с сайта Nokia и установил Java ME development tools for S60. Затем нагуглил пример, показывающий как работать с виртуальным последовательным поротом через Bluetooth в Java ME. Вот он — ShakerRacer.
Теперь пару слов о том, как работает мое приложение на телефоне:
После первого запуска приложения пользователю предлагается ввести MAC адрес Bluetooth интерфейса контроллера ROBO TX. Это адрес можно узнать в разделе «Info» в меню, которое отображается на LCD дисплее контроллера. В моем случае адрес выглядел так: 00137b52e060.
Вводим MAC-адрес и жмем Connect. В случае успешного подключения отображается экран управления.
Если что-то пойдет не так, то на экране появится сообщение об ошибке. Если все ОК, то программа будет ожидать событие, которое появляется в системе после нажатия на любую цифровую кнопку телефона. Обработчик события определяет, какая кнопка нажата и записывает в выходной поток строку с соответствующей последовательностью команд. Например, для кнопки «1» — это будет последовательность:
load function1.bin
run
В момент отпускания кнопки генерируется еще одно событие, реагируя на которое обработчик записывает в поток строки:
load stop.bin
run
Во время работы на экране телефона отображается код нажатой кнопки и перекрестие с кружком, который показывает направление движения робота.
Важный момент: программы function1.bin и stop.bin должны быть предварительно загружены в flash-память контроллера.
Заключение
В этом проекте я создал для каждой кнопки телефона отдельную программу ROBO Pro для управления моторами робота. Вообще-то команды могут быть какие угодно, а не только для управления движением робота. Например, можно включать звуковой сигнал или свет или выполнять какую-то расчетную задачу.
Вот, собственно, и все. Исходный код проекта лежит тут — robotxcontrol.sourceforge.net
Обсуждение статьи можно продолжить на нашем форуме в теме — Дистанционное управление через Bluetooth?