- В современных информационно-измерительных и управляющих
системах, создаваемых для научных исследований и поддержки
образовательного процесса, неизбежно возникает задача удаленного
доступа к контролируемым объектам. Использование оборудования для
распространенных беспроводных сетей требует значительных
материальных затрат и не всегда оправдано, особенно, если объект
имеет малые размеры и может перемещаться в пространстве.
- Для решения данной задачи компанией Sun Microsystems была разработана технология Sun SPOT (Sun Small Programmable Object Technology), основанная на технологии Java [1, 2].
- Проект Sun SPOT, первоначальной целью которого являлось создание беспроводных сетей датчиков различного назначения, был инициирован лабораторией Sun Labs в сентябре 2004 года. В наши дни политика компании Sun в отношении данного проекта направлена на разработку новых приложений самими пользователями, поскольку данная технология позволяет создавать сложные технические системы достаточно простыми средствами [3–5].
- Минимальный комплект Sun SPOT содержит базовую станцию, подключаемую к компьютеру, и два переносных модуля, связанных со станцией по радиоканалу стандарта IEEE 802.15.4 (2.4 ГГц). В состав модуля входят: 32-битный процессор ARM920T, блок памяти (512 Кб SDRAM, 4 Мб Flash), плата датчиков и литий-ионная аккумуляторная батарея. Плата датчиков содержит трехосевой акселерометр, термочувствительный элемент, светочувствительный элемент, 8 RGB-светодиодов, 6 аналоговых входов, 2 быстродействующих выключателя, 5 контактов ввода/вывода общего назначения и 4 контакта для коммутации цепей повышенной мощности. Работает устройство под управлением виртуальной машины Squawk Java VM (Project Squawk) [6]. Разработка программного обеспечения осуществляется в среде NetBeans с набором Ant-скриптов, обеспечивающих поддержку устройств Sun SPOT.
- Целью данной работы являлось создание прототипа робота для контроля складских и производственных помещений на базе технологии Sun SPOT. Одной из главных причин применения этой технологии послужило то, что модули обладают малыми размерами, а для создания программного обеспечения используется язык высокого уровня Java.
- Прототип робота представляет собой модель автомобиля с набором датчиков, платы управления двигателями, платы сопряжения датчиков и переносного модуля Sun SPOT. Возможность произвольного движения в горизонтальной плоскости обеспечивается двумя электродвигателями, один из которых отвечает за движение вперед и назад, другой – за поворот вправо и влево.
- Управление объектом осуществляется командами, посылаемыми базовой станцией, подключенной к ПК. Система управления реализована по принципу клиент – сервер с использованием протокола UDP. Клиентом является базовая станция, а сервером – переносной модуль. Разработанный прикладной протокол обеспечивает сбор информации с датчиков и передачу команд управления двигателями модели. Программа-клиент работает на персональном компьютере, на переносном модуле – сервер доступа к исполнительным механизмам и датчикам, также реализующий алгоритм перемещения в заданную точку.
- Управление может осуществляться как «вручную» (с помощью клавиш на клавиатуре ПК), так и по заранее заданной программе. Траектория перемещения модели находится как решение уравнений движения с учетом реальных скоростей движения по прямой и окружности. При достижении точки назначения погрешность координат составляет не более 5% по каждой из осей.
- Программное обеспечение написано в среде NetBeans с использованием пакета классов com.sun.spot из Sun SPOT SDK (Software Developer Kit) [7]. Рассмотрим его более подробно.
- Программное обеспечение системы включает программный модуль для управления базовой станцией (клиентскую программу), программное обеспечение переносного модуля (серверную программу) и библиотеку (SPOTConn.jar), содержащую набор методов, реализующих передачу данных между устройствами Sun SPOT в соответствии с разработанным протоколом.
- Библиотека SPOTConn.jar содержит два класса – Packet и SPOTConnection.
- В классе Packet описывается формат пакета, пересылаемого между базовой станцией и переносным модулем. Пакет может состоять из двух или четырех полей. Первые два поля содержат код операции и длину поля данных. Если длина данных ненулевая, то в пакет включаются поля типа данных в пакете и сами данные.
- Класс содержит две группы методов, обеспечивающих формирование пакета и извлечения информации из пакета.
- К первой группе относятся следующие методы:
- Для решения данной задачи компанией Sun Microsystems была разработана технология Sun SPOT (Sun Small Programmable Object Technology), основанная на технологии Java [1, 2].
- setCode – задает код операции, выполняемой переносным модулем (код операции может задаваться как в виде числа, так и виде текстовой строки);
- setDataType – задает тип данных в пакете;
- setDataLength – количество передаваемых данных указанного типа;
- setParam – позволяет задать код операции, длину данных и их тип одновременно;
- setContent – формирует содержимое пакета на основе исходной датаграммы, полученной по радиоканалу;
- addData – обеспечивает добавление данных в пакет.
- Ко второй группе относятся следующие методы:
- getCode, getCodeB – возвращают код операции (в виде числа либо в виде строки);
- getDataType, getDataTypeB – возвращают тип данных в пакете;
- getNextInt, getNextDouble – возвращают следующее значение из массива данных, содержащихся в пакете;
- getIntData, getDoubleData – возвращают массив данных из пакета целиком.
- Класс SPOTConnection обеспечивает радиосвязь между переносным модулем и базовой станцией. Содержит следующие методы:
- connect – метод для установления соединения между клиентом, которым является базовая станция, и сервером, функции которого выполняет переносной модуль;
- startListening – метод, обеспечивающий прослушивание указанного порта;
- send – метод, осуществляющий отправку пакета. Может принимать как объект класса Packet, так и просто код операции в виде числа или строки – в этом случае подразумевается, что передачи данных не требуется;
- receive – метод, обеспечивающий прием пакета;
- close – метод, разрывающий соединение.
- Программное обеспечение для управления базовой станцией,
обеспечивающее управление прототипом робота, включает в себя три
класса.
- Класс Device с помощью методов классов SPOTConnection и Packet реализует процедуры пересылки команд и данных между базовой станцией и переносным модулем, предоставляя более высокоуровневый доступ к техническому объекту.
- Данный класс содержит:
- Класс Device с помощью методов классов SPOTConnection и Packet реализует процедуры пересылки команд и данных между базовой станцией и переносным модулем, предоставляя более высокоуровневый доступ к техническому объекту.
- группу методов (moveAhead, moveBack, moveLeft, moveRight), осуществляющих отправку команд перемещения объекту, управляемому переносным модулем;
- метод для отправки устройству конфигурационной информации (sendConfig);
- метод goToPoint, отправляющий команду на перемещение в заданную точку;
- группу абстрактных методов, предназначенных для посылки запросов о состоянии встроенных и подключенных к переносному модулю датчиков, а также методов, обеспечивающих формирование команд для управления дополнительными устройствами объекта.
- Класс ViewArea
реализует элемент графического интерфейса пользователя
(GUI), представляющего собой графическое
поле для взаимодействия пользователя с объектом (указания и
отображения текущих координат объекта).
- Класс ControlPanelView отвечает за графический интерфейс пользователя. Значительная часть данного класса сформирована средой разработки NetBeans. Остальные методы – это методы, обрабатывающие события, генерируемые пользователем, – нажатие кнопки, клик мыши в определенном месте графического поля GUI, нажатие клавиш. Также в этом классе присутствует метод receiveCycle, запускающийся в отдельном потоке при создании формы, в котором осуществляется прием пакетов и описана реакция на содержимое этих пакетов.
- Для непосредственного управления техническим объектом реализованы классы Action и StartApplication, загружаемые в память переносного модуля Sun Spot.
- В классе Action содержатся методы:
- Класс ControlPanelView отвечает за графический интерфейс пользователя. Значительная часть данного класса сформирована средой разработки NetBeans. Остальные методы – это методы, обрабатывающие события, генерируемые пользователем, – нажатие кнопки, клик мыши в определенном месте графического поля GUI, нажатие клавиш. Также в этом классе присутствует метод receiveCycle, запускающийся в отдельном потоке при создании формы, в котором осуществляется прием пакетов и описана реакция на содержимое этих пакетов.
- move – обеспечивает перемещение объекта в разных направлениях;
- moveToPoint – реализует алгоритм перемещения в заданную точку;
- distSensorInit – инициализирует датчик расстояния;
- moveInd – переводит технический объект в режим самостоятельного движения с объездом препятствий;
- абстрактные методы, предназначенные для контроля трехосевого акселерометра, термочувствительного датчика, датчика освещенности и управления светодиодами. В эту группу также войдут методы для работы с распространенными датчиками охранной сигнализации.
- Отметим, что для доступа к аппаратным
средствам переносного модуля в данном классе используются методы из
пакетов com.sun.spot.peripheral,
com.sun.spot.sensorboard,
com.sun.spot.sensorboard.peripheral, com.sun.spot.sensorboard.io
и др.
- Класс StartApplication содержит только один метод run, который выполняет две основных функции: принимает входящие пакеты от базовой станции и реагирует на них, вызывая соответствующие методы из класса Action.
- Рассмотрим процедуру взаимодействия компьютера с техническим объектом.
- Первым запускается сервер на переносном модуле, который выполняет процедуру инициализации высокоточных выходов, используемых для управления реле, коммутирующих электродвигатели, а также инициализирует датчик расстояния.
- Далее базовая станция начинает прослушивать порт, ожидая поступления пакетов команд и данных от программы-клиента. Связь между базовой станцией и переносным модулем осуществляется с использованием протокола UDP.
- Компьютер с помощью базовой станции отправляет переносному модулю датаграмму, содержащую конфигурационную информацию, используемую при расчетах движения объекта. После этого базовая станция и переносной модуль готовы к работе.
- В дальнейшем сервер в цикле принимает и анализирует пакеты от базовой станции и выполняет действия, соответствующие содержащемуся в пакете коду операции.
- Объект может двигаться как прямолинейно, так и по произвольной траектории. Последнее достигается с помощью одновременной работы обоих электродвигателей. При движении технического объекта также используется светодиодная индикация направления движения, что удобно при отладке кода, поскольку позволяет не использовать двигатели (в этом случае они просто отключаются с помощью механического переключателя).
- Управление движением может осуществляться как с помощью клавиатуры компьютера, так и с использованием графического интерфейса.
- Использование графического интерфейса переводит систему в режим автоматического достижения заданных координат. В данном случае пользователю предоставляется возможность указать точку назначения из допустимого диапазона значений координат (x, y). Ограничение обусловлено тем, что есть предельное значение угла поворота технического объекта и, соответственно, существует область, недостижимая для него. Эту проблему можно решить путем использования отката назад для выхода из «мертвой зоны». Но в данной работе это не было реализовано.
- Движение к заданной точке обеспечивается методом moveToPoint, который решает систему уравнений, состоящую из уравнения окружности и уравнения касательной к окружности. В этой системе две неизвестные координаты – координаты точки x и y, начиная с которой технический объект начинает двигаться исключительно по прямой линии. Определив координаты точки и, следовательно, расстояние, которые должен преодолеть объект от начала координат до этой точки, и от нее до точки назначения, можно (зная средние скорости движения модели по окружности и по прямой) найти время, необходимое для достижения цели. При выборе этого режима модель сначала движется по окружности, а затем продолжает движение по прямой линии, пока не достигнет заданной точки.
- Режим самостоятельного движения с объездом препятствий в данный момент находится в режиме разработки и тестирования. Для определения наличия перед моделью препятствий используется датчик расстояния. В дальнейшем предполагается не только определение наличия посторонних объектов перед моделью, но и расчет оптимальной траектории объезда (в этом случае необходимо иметь, по крайней мере, два датчика расстояния, расположенных на углах объекта).
- Также предполагается реализовать сопряжение устройства с цифровой камерой, а также отслеживание изменения вертикальной координаты z (на основе встроенного акселерометра).
- При использовании разработанной модели в качестве охранного устройства к нему можно подключить объемный датчик движения, поверхностный звуковой датчик и др.
- При наличии GSM-терминала устройство может передавать информацию о произошедших событиях как на пульт системы (через глобальную сеть), так и на мобильные телефоны ответственных лиц в виде коротких текстовых сообщений.
- В заключение отметим, что разработанное авторами устройство на базе технологии Sun Spot может иметь достаточно много применений. Оно может использоваться, например, для организации охранного комплекса в больших производственных и складских помещениях, системы сбора данных на объектах большой протяженности, а также может использоваться в качестве учебного пособия для студентов, изучающих информационные технологии и программирование технических объектов.
- На базе данного устройства возможно создание и детской программируемой игрушки, преимущество которой заключается в том, что алгоритмы работы можно реализовать посредством выбора необходимых «соблюдаемых правил» и параметров в пользовательском графическом интерфейсе. В этом случае, в отличие от существующих аналогов, данная модель может программироваться как опытным программистом, так и ребенком, едва знакомым с работой на персональном компьютере. Степень компетенции пользователя, может быть довольно низкой, дружественный интерфейс позволяет в полной мере оперировать параметрами и функциями данного устройства.
Литература:
- Класс StartApplication содержит только один метод run, который выполняет две основных функции: принимает входящие пакеты от базовой станции и реагирует на них, вызывая соответствующие методы из класса Action.
- Sun SPOT World – Home. Электронный ресурс. URL: http://sunspotworld.com/ (дата обращения: 20.01.2011).
- Sun SPOT Tutorials. Электронный ресурс. URL: http://sunspotworld.com/ (дата обращения: 20.01.2011).
- Vipul Gupta. Experiments with a Solar-powered Sun SPOT. Электронный ресурс. URL: http://labs.oracle.com/techrep/2009/smli_tr-2009-178.pdf (дата обращения: 20.01.2011).
- Bernard Horan. A Platform for Wireless Networked Transducers / Bernard Horan, Bill Bush, John Nolan and David Cleal. Электронный ресурс. URL: http://labs.oracle.com/techrep/2007/smli_tr-2007-172.pdf (дата обращения: 20.01.2011).
- Bernard Horan. The Use of Capability Descriptions in a Wireless Transducer Network. Электронный ресурс. URL: http://labs.oracle.com/techrep/2005/smli_tr-2005-131.pdf (дата обращения: 20.01.2011).
- The Squawk Project. Электронный ресурс. URL: http://research.sun.com/projects/squawk/index.html (дата обращения: 20.01.2011).
- Российский сайт разработчиков Sun Microsystems. Электронный ресурс. URL: http://developers.sun.ru/javaee/ (дата обращения: 20.01.2011).