Как управлять роботом с помощью мобильного телефона

Это продолжение статьи «Управляем мобильным роботом через блютус».

В этом проекте демонстрируется технология беспроводной связи 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?