Роботы, которые видят, слышат, говорят и двигаются (с помощью Java)

Роботы, которые видят, слышат, говорят и двигаются (с помощью Java)

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

Однако, чтобы разработать эффективную и не слишком дорогую роботизированную систему, нам необходима технологическая инфраструктура, которая была бы достаточно стойкая и долговечная. В нашем мире, где появляется все больше и больше разнообразных устройств и операционных систем, в корне отличающихся друг от друга по возможностям и методам проектировки, вполне логично, что инфраструктура робототехники не должна зависеть от какого-либо устройства либо операционной системы. Кроме того, в сферах, занимающихся исследованиями космоса, поставщики управляющих систем могут меняться неожиданно и достаточно часто.

Еще во время ранних попыток исследования Луны, обнаружив, что их оборудование неожиданно оказалось неработоспособным, исследователи, согласно своим техническим руководствам, были вынуждены остановить все оставшееся диагностическое оборудование. Что они, собственно, незамедлительно и сделали. Однако для марсианского вездехода, который находится на чужой планете на расстоянии приблизительно 141 млн миль от Земли, никто не сможет произвести подобные действия так быстро. Находясь на "красной планете" в поисках инопланетной жизни, робот не может позволить себе "синий экран смерти".

Причем здесь Java?
Для того чтобы существовать и жить в этом мире, человеку необходимо как минимум видеть, слышать, говорить и двигаться. Но чтобы выполнять все эти свойственные человеку функции, роботизированные системы должны иметь возможность эмулировать их с помощью программного обеспечения. Java-технология предлагает целый ряд API, которые могут удовлетворить всем потребностям, возникающим при изготовлении подобных систем в сфере робототехники. Java Speech API дает возможность строить командно-контрольные системы для распознавания человеческой речи, системы диктовки, а также возможность синтеза речи. В свою очередь Java Media Framework используется для получения и обработки визуальных изображений.

Саймон Риттер (Simon Ritter) — технологический эксперт компании Sun Microsystems. Он знаком и работает над множеством различных аспектов Java-технологии. Но помимо этого Саймон является еще и лучшим специалистом использования Java-технологии в мире робототехники. Он разработал Robotics Software Development Kit (инструментарий для разработки программной начинки роботов на Java) и регулярно демонстрирует невероятные роботизированные системы, построенные им с помощью Java-технологии. Среди этих демонстрационных показов представляются небольшие, нересурсоемкие роботы, которые используют блок LEGO Mindstorms RCX. Риттер предоставляет детальные инструкции (как для аппаратной части, так и для программной) для построения, программирования и разворачивания своих разнообразных LEGO-роботов.

Для Риттера превосходство стандартных Java API для робототехники над другими имеющимися средствами в том, что с помощью Java процесс разработки значительно упрощается, позволяя сконцентрироваться исключительно на логических аспектах поставленной задачи. Таким образом, вам не обязательно вникать в особенности и тонкости каждой индивидуальной роботизированной системы.

И чтобы вы не думали, что заниматься робототехникой на основе Java-технологии невозможно, если только ты не являешься разработчиком соответствующей компании корпоративного масштаба, Риттер обращает ваше внимание на следующие немаловажные моменты. Движок синтеза речи для робототехники можно приобрести приблизительно за $30, веб-камеры сегодня стоят не больше $100, ну, а блок LEGO Mindstorms можно купить приблизительно за $200.

Распознавание речи
Java Speech API (JSAPI) предоставляет достаточно простой, но очень функциональный интерфейс к системе работы с речью. Он включает элементы, пригодные как для распознавание речи, так и для ее синтеза. "Java Speech API сам по себе не содержит системы для распознавания и синтеза речи", — объясняет Риттер. — Он является просто интерфейсом для работы с этими системами".

Существует ряд недорогих систем, которые можно использовать с Java Speech API. "В приложении, используемом в моих демонстрациях, я применил движок IBM ViaVoice, — говорит Риттер. — Это относительно новая технология, и IBM сделала очень хорошее дело, выложив свою реализацию Java Speech API, которую вы можете скачать совершенно бесплатно с сайта AlphaWorks". Цена же на движок ViaVoice была подобрана достаточно разумно. Менее чем за 30 долларов США разработчики могут снабжать свои Java-приложения возможностями распознавания и синтеза речи.

Ключевой функциональностью в распознавании речи у JSAPI является так называемый командно-контрольный распознаватель. "Вы просто определяете несколько слов, которые по вашему желанию сможет распознать система, — продолжает Риттер, — и после устанавливаете соответствующие события, которые будут вам посланы, когда система распознает то или иное слово". Формат грамматики (Grammar Format) в Java Speech API позволяет задать слова, которые должна распознавать система. "Это предоставляет нам платформонезависимый вариант контроля над распознавателем речи", — добавляет разработчик.

Пример грамматики для Java Speech API

grammar robot;

public <stop> = stop {stop};
public <left> = [Turn] left {left};
public <right> = [Turn] right {right};
public <forward> = [Go] Forward {forward};
public <reverse> = [Go] Back {back};
public <bye> = ([Good] Bye) | So long {bye};

"С помощью этого кода я определяю набор слов, которые хочу чтобы распознавала система, — объясняет Риттер, — а после — события, которые хочу получать при распознавании того или иного слова. Также я могу сделать систему более умной, например, добавив несколько вариантов прощания: "bye", "good bye" или "so long". Для всех этих слов в случае их распознания в программу будет возвращено одно и то же событие".

Java Speech API может также использоваться и для систем диктовки, которые предлагают, по существу, расширенный набор функциональности командно-контрольного распознавателя. Вместо того чтобы искать отдельное слово/команду, такая система обрабатывает каждое сказанное слово для использования в текстовых процессорах или же web-браузерах.

Ниже приведен код, который использует непосредственно заданную JSAPI-грамматику (ввиду ограниченности газетной площади более полную версию этого кода смотрите в SDK робототехники от Риттера — см. ссылки в конце статьи).

Пример кода для создания обработчика событий согласно заданному файлу грамматики

import javax.speech.*;
import javax.speech.recognition.*;

// Создание распознавателя и распределение ресурсов
Recognizer recognizer = Central.createRecognizer(null);
recognizer.allocate();

/* Добавление обработчика — для оповещения, когда речевой движок
* остановлен, запущен и т.д.
*/
recognizer.addEngineListener(engineListener);

// Чтение файла грамматики
File gf = new FileReader(grammarFile);
RuleGrammar rules = recognizer.loadJSGF(gf);

/* Добавления обработчика. VoiceListener вызывается тогда, когда
* определенное грамматическое слово распознано. Событие, которое
* связано с этим словом, передается этому методу обработки
*/
rules.addResultListener(new VoiceListener());

// Сообщает распознавателю о необходимости принять изменения
recognizer.commitChanges();
// Системный запрос на получение управления над микрофоном
recognizer.requestFocus();
// Начинаем слушать
recognizer.resume();

// Не забывайте про "отлов" исключений

Как только JSAPI-обработчик определен, любые распознанные слова будут создавать событие, вследствие которых будет вызываться определенный метод обработчика (VoiceListener). Этот метод может получить доступ к тегу события, которое его вызвало, и тем самым определить распознанную команду.

Пример кода для получения и обработки речевой команды

import javax.speech.*;
import javax.speech.recognition.*;

// Вызывается, когда распознано какое-либо слово из файла грамматики
public class VoiceListener
extends ResultAdaptor {
public void resultAccepted(ResultEvent re) {
FinalRuleResult result = (FinalRuleResult)re.getSource();
// Получаем и анализируем грамматический тег
String[] tags = result.getTags();
System.out.println("First tag was :" + tags[0]);
}
}

Синтез речи
С противоположной стороны голосовых возможностей робота лежит не что иное как синтез речи. Специально для этого был разработан язык Java Speech API Markup Language, который улучшает функциональность и совершенствует произносимый текст. "Мы можем выбрать конкретный голос, — сообщает Риттер, — в зависимости от системы, которая используется вместе с JSAPI. Мы также можем добавлять контекстную информацию о том, как именно нужно произносить разные вещи. Например, в случае, когда нужно сказать "JXML", необходимо, чтобы система произнесла это слово не иначе как в виде четырех букв".

По некоторым исследования и оценкам, лишь 10% информации воспринимается при вербальном общении из непосредственно произносимых слов. Поэтому для того, чтобы сделать синтезируемую речь более информативной и понятной, так, как если бы ее произносил человек, очень важно включать элементы расстановки, громкости, длительности, также как и ударения/выделения. "Очень много информации поступает именно от расстановки, громкости и длительности произносимой речи, — говорит Риттер. — Если мы хотим, чтобы компьютер звучал более реалистично, нам нужно каким-то образом эмулировать эти характеристики человеческой речи".

Пример использования Java Speech API Markup Language

Контекстная информация:
<sayas class="literal">JSML</sayas>

Выделение слова интонацией:
Java technology is <emphasis>cool</emphasis>

Просодия:
This car, <prosody volume="-20%">but not this one</prosody>, is new

Ниже приведен код, который необходим для эффективного синтеза речи в программе, написанной на языке программирования Java.

Пример кода синтеза речи с помощью Java Speech API

import javax.speech.*;
import javax.speech.synthesis.*;

public void say(String words) {
// Создание синтезатора
Synthesizer s = Central.createSynthesizer(null);
// Распределение ресурсов
s.allocate();
// Произношение строки
s.speak(words, null);

Замечание: Последняя версия Java Speech API на данный момент готовится к проверке у Java Community Process — Java Specification Request 113 (JSR-113).

Визуальное восприятие
Для человека наиболее ключевым средством навигации окружающего физического мира является зрение. Фактически, как показали исследования, половина человеческого мозга занята непосредственно поддержкой обработки визуальной информации. Поэтому естественно, что этот фактор является ключевым и для многих роботизированных систем. Но, опять же, аппаратные средства для организации подобных функций у роботов на удивление легко доступны. "USB-web-камеры в действительности крайне недороги в наше время", — утверждает Риттер.

Существует два базовых метода для доступа к визуальным данным из роботизированной системы на базе Java-технологии. Самый быстрый и простой из них — использование интерфейса TWAIN. "TWAIN начинал свое существование как интерфейс для соединения сканеров и персональных компьютеров, — объясняет Риттер, — но теперь он расширен, с тем чтобы дать программистам возможность работать с такими устройствами, как web-камеры. Группа выходцев из Словакии на данный момент создала интерфейс Java/TWAIN, и, если вы не коммерческая организация, то можете скачать его совершенно бесплатно. Это позволит вам получать изображение из TWAIN-устройства и создавать из него изображение Java AWT, которое впоследствии можно легко обработать".

Но, будучи простым в использовании, интерфейс TWAIN представляет собой телевизионный пользовательский интерфейс, оставляя множество параметров изображения, которые невозможно менять путем программирования. Плюс к этому TWAIN первоначально спроектирован для получения одиночных изображений. "Когда я использовал TWAIN для демонстрации, — говорит Риттер, — я должен был получать приблизительно один фрейм в полторы секунды. Это уже больше напоминает слайд-шоу, особенно если вы хотите делать обработку в реальном времени".

Пример кода для доступа к изображениям, снятым web-камерой (интерфейс Java/TWAIN)

// Создание TWAIN-объекта
Twain t = new Twain();

/* Отключаем телевизионный пользовательский
* интерфейс TWAIN
*/
t.setVisible(false);

// Настраиваемся получить 20 изображений
t.setTransferCount(20);

// Получаем AWT-изображение
Image i = Toolkit.getDefaultTookit().createImage(new TwainImage(t));

Наиболее богатый по возможностям и гибкий для программирования метод управления web-камерами — это метод с использованием Java Media Framework (JMF). Изначально JMF был спроектирован для того, чтобы обеспечить возможность проигрывания различного типа медиа-информации без привязки к какой-либо конкретной платформе. Но совсем недавно он был расширен и теперь включает возможность проигрывания, захвата изображений, передачи, транскодирования, а также множество различных кодеков (компрессор/декомпрессор) в виде плагинов. Поскольку JMF куда лучше поддается программированию, вы можете получить более полный контроль над получаемым изображением включая управление размером, контрастом, глубиной цвета и многим другим.

Первый шаг к использованию JMF — определить положение конкретной web-камеры как устройства с помощью CaptureDeviceManager. Следующим шагом является получение источника данных через MediaLocator. Потом следует установить желаемый формат изображения (зависит от устройства). "С JMF мы приобретаем более полный контроль над процессом получения изображений, — сообщает Риттер. — Мы можем сами решать, что нам, например, необходимо изображение размером 160x120 пикселей с заданной глубиной цвета, заданным контрастом и т.д."

В качестве следующего шага нужно создать Processor, являющийся сущностью JMF. Он фактически передает изображение программе. После этого создается источник данных PushBuffer. Как только эта операция завершена, вы можете генерировать поток PushBufferStream через PushBufferDataSource и читать буферы, которые и представляют реальные фреймы из камеры. Эти изображения можно конвертировать в AWT-изображения с помощью метода BufferToImage.

Пример кода для получения изображений с web-камеры с использованием JMF

import javax.media.*;
import javax.media.control.*;
import javax.media.util.*;

// Получаем CaptureDevice, который соответствует определенной web-камере
CaptureDeviceInfo dev = CaptureDeviceManager.getDevice("vfw:USB Video
Camera:0");

Format[] cfmts = dev.getFormats();

RGBFormat fmt = null;

for (int i = 0; i < cfmts.length; i++) {
// Ищем формат с желаемым размером и пр.
fmt = (RGBFormat)cfmts[i];
}

// Получение MediaLocator
MediaLocator loc = dev.getLocator();

// Получение DataSource (из MediaLocator) — источник данных изображения
DataSource src = Manager.createDataSource(loc);

// Получение FormatControls для выходного источника данных
FormatControl[] fmtc = ((CaptureDevice)src).getFormatControls();

/* Цикл по доступным объектам FormatControls и попытка
* установить формат
*/
for (int i = 0; i < fmtc.length; i++) {
if (fmtc[i].setFormat(fmt) != null)
break;
}

// Создание Processor
Processor p = Manager.createProcessor(src);

// Реализация Processor
p.realize();

// Надо ждать до возникновения RealizeCompleteEvent

// Запуск Processor
p.start();

// Получение доступа к PushBufferDataSource
PushBufferDataSource pbSrc = (PushBufferDataSource)p.getDataOutput();

/* Теперь можем вернуть PushBufferStream, который позволит нам
* получить доступ к данным из камеры
*/
PushBufferStream[] strms = pbSrc.getStreams();

/* Тестирование формата — в рамках предыдущих выбранных
* параметров
*/
camStream = strms[0];
RGBFormat rgbf = (RGBFormat)camStream.getFormat();

// Подготовка к конвертированию
BufferToImage conv = new BufferToImage(rgbf);

// Получение изображения с web-камеры
Buffer b = new Buffer();
camStream.read(b);

// Конвертирование в AWT-изображение
Image i = conv.createImage(b);

Потом полученное изображение можно конвертировать в RGB с помощью класса PixelGrabber. Ну, а растровое изображение может быть легко обработано и проанализировано (например, на предмет определения цвета и границ). Java 2D API — идеальное средство для множества простых способов определения границ/краев, в то время как Java Advanced Imaging API больше подходит для более сложных операций анализа.

Прежде чем планировать реализацию функциональности web-камеры, очень важно осознать разницу между источниками данных PushBufferDataSource в JMF и USB-web-камере. "PushBufferDataSource начнет выдавать изображения от камеры, как только вы создадите его", — объясняет Риттер. — Таким образом вы получите первое изображение, которое находится в буфере. Следовательно, если мы запустим камеру за четыре секунды до того, как нам понадобится изображение, то получим изображение, снятое четыре секунды назад". Поэтому, если вам необходимо получать изображения в реальном времени, необходимо использовать PullBufferDataSource. "Согласно тому, как работает USB-web-камера, — продолжает Риттер, — вы не сможете получить PullBufferDataSource. В этом случае вам нужно писать отдельную нить (поток), которая постоянно получала бы изображения из камеры. А как только вам понадобится получить изображение, вы просто запрашиваете очередное у созданной вами нити".

LEGO Mindstorms Robotics Invention System

Всем тем, кто думает, что мобильная робототехника — это что-то не для рядового Java-программиста, советуем обратить внимание на следующую систему: LEGO Mindstorms Robotics Invention System. "LEGO пришли на рынок с системой Mindstorms где-то три года назад", — рассказывает Риттер. — Она была разработана совместно с MIT".

В сердце этой системы располагается программируемый RCX-блок — небольшой компьютер в желтом корпусе LEGO. Он содержит 8-битный процессор от Hitachi (16 MHz), 16 Kb ROM, 32 Kb RAM, 3 сенсорных устройства ввода, 3 ходовых вывода, 5-символьный LCD-дисплей и последовательный инфракрасный порт. Компьютер маленький и чрезвычайно ограниченный в количестве ресурсов, особенно на фоне сегодняшних стандартов на настольные компьютеры с гигагерцевыми процессорами и сотнями мегабайт оперативной памяти. "С другой стороны, — весело добавляет Риттер, — для меня этот маленький блок настолько же производителен, как и мой самый первый персональный компьютер".


Рис. 1. Блок LEGO RCX

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

Вначале блок RCX был спроектирован LEGO специально для того, чтобы его можно было программировать посредством систем на базе персональных компьютеров, которые позволяют визуально собирать функциональные компоненты. Эта система, управляемая компонентами, производит законченные программы, которые впоследствии могут быть загружены в блок RCX.

Но благодаря open-source среде разработки leJOS открылось множество перспектив для новых изобретений и новых выполняемых функций этого блока. Создателям leJOS удалось сжать обычный вариант Java Runtime Environment (включая поддержку множественных потоков) в 14 Kb специально для использования в блоке RCX. Понятно, что leJOS — это совсем не полная реализация Java-платформы. "Это в порядке вещей — не думаю, что кто-то надеялся на это, — говорит Риттер. — Даже наличие AWT в этой реализации ни о чем не говорит". Из-за серьезных ограничений по количеству доступной памяти в блоке в leJOS не реализован даже "сборщик мусора", но вот hook'и уже планируют включить в будущих реализациях.

Благодаря leJOS Java-разработчики получили теперь дешевую (плюс к тому — мультипотоковую) платформу для разработки роботизированных систем. Базовый комплект стоит порядка $200.

Для того чтобы проще приспособить блок для обновления его операционной системы до новых версий, он был спроектирован таким образом, что позволяет очень просто загружать в себя новые прошивки от LEGO. Поэтому вы можете без особого труда заменить родную прошивку блока средой leJOS. В качестве первого шага по подготовке блока RCX к выполнению программ, написанных на Java, в него надо загрузить LeJOS.

lejosfirmdl

"Это порядка 14 Kb, — сообщает Риттер, — и, несмотря ни на что, это достаточно эффективная Java Runtime среда".
После этого для запуска программ на обновленном блоке с поддержкой Java нужно создать и скомпилировать Java-программу.

lejosc MyClass.java

"Lejosc устанавливает новый bootclasspath, собирает различные классы и пакеты из других classpath-мест и запускает javac", — объясняет далее Риттер. — Таким образом производится новый class-файл, который практически ничем не отличается от обычных class-файлов, которые вы получаете при компиляции нормальных частей Java-кода". Однако, для того чтобы сделать эту программу выполняемой на блоке с ограниченным количеством ресурсов, вы должны создать специфичный для RCX бинарный файл. Это повлечет отбрасывание частей class-файла, которые несут с собой ненужную информацию.

lejos –o MyClass.bin MyClass

И, наконец, бинарный файл нужно загрузить (с помощью последовательного инфракрасного порта) в блок RCX.

lejosrun MyClass.bin

Для того чтобы запустить уже загруженную программу, вы просто нажимаете кнопку Start на панели блока. Но 5-символьный LCD-дисплей — это единственное устройство вывода, поэтому процесс отладки программ зачастую бывает очень изнурителен.

На сегодняшний день существует три версии блока RCX. Версии 1.0 и 1.5 по существу ничем не отличаются друг от друга и используют последовательный инфракрасный порт для осуществления связи между персональным компьютером и самим блоком на скорости 2400 бод. При использовании среды leJOS для связи с блоком можно использовать Java Communications API. "Кто-то как-то написал даже web-сервер, который работал на блоке RCX!", — замечает Риттер.

Версия RCX 2.0 использует коммуникационный порт USB. И, хотя среда leJOS без проблем может быть загружена в такую систему, на данный момент не существует поддержки для Java USB API (JSR-080). Теперь leJOS обеспечивает поддержку USB-соединений как на Windows, так и на Linux и включает коммуникационный API, который предоставляет почти такую же функциональность, как и JavaComm API.


Парад изобретений
Роботы, созданные с использованием Java-технологий и элементов LEGO, действительно впечатляют. В мае 2001 года евангелисты Java-технологии в Sun устроили соревнование в Bay Area университетах, чтобы посмотреть, кто же сможет изобрести самого непревзойденного робота на основе блока RCX от LEGO. UC Santa Cruz выдали SlugBot — робота, который одним пальцем играет мелодии на небольшой клавиатуре. Stanford произвели MazeBot, который решал задачи по прохождению лабиринтов. А UC Berkeley разработали выигравшего в этом соревновании робота PaperBot, который выбирал и сортировал цветные бумажки по их цвету.

Рис. 2. SlugBot от UC Santa Cruz играет мелодии

Рис. 3. MazeBot от Stanford проходит лабиринты

Рис. 4. PaperBot от UC Berkeley сортирует бумажки

Саймон Риттер демонстрировал ряд своих LEGO-роботов на конференции SunNetwork 2002 в Сан-Франциско. Один из них — LEGO-блок на колесиках, запрограммированный на обнаружение и следование по неравномерному черному следу на белом фоне. "Один поток обнаруживает события, — поясняет Риттер, — а второй берет на себя управление моторами и поиском направления".

Другой робот из серии LEGO-ботов Риттера работает в качестве крупье игры blackjack. Система распознает команды, озвучивает выполняемые действия и воспринимает их визуально. "Начнем игру", — объявляет робот. "У игрока шесть карт пиковой масти", — говорит он.

Если брать во внимание ограниченные возможности обработки информации блока RCX от LEGO, то естественно, что для реализации демонстрационных роботов Риттера было бы невозможно обойтись функциями одного лишь блока RCX. С другой стороны, этот блок берет на себя гораздо больше функций, чем обычный набор моторов, управляемых компьютером. "Понятно, что часть обработки визуальной информации производится на персональном компьютере, — говорит Риттер. — Например, если брать моего робота, который приносит мяч заданного цвета, то здесь задача определения местоположения мяча ложится на компьютер. После этого координаты мяча посылаются роботу. Но и то, что на RCX-блок возлагаются задачи определения возможности взять мяч, поднять его и принести обратно, говорит о многом. Помимо этого, робот должен запомнить координаты своего изначального местоположения, чтобы знать, куда возвращаться обратно".

Это так же справедливо для робота-крупье. В то время как синтез речи и обработка визуальной информации обрабатывается персональным компьютером, блок RCX управляет всеми моторами, определяет, где находятся карты и т.д.

Код, написанный Риттером для своих демонстрационных роботов, а также его SDK для робототехники, доступны для скачивания в Сети (см. ссылки в конце статьи).

Будущее
Мир робототехники стремительно демонстрирует мощь своей платформонезависимости и гибкость благодаря Java-технологии — начиная с полнофункциональных Java Speech и Java Media Framework API и заканчивая ограниченной в количестве ресурсов, но эффективной open-source средой leJOS. "Java Speech API — это очень подходящий, недорогой путь к добавлению голосового контроля, распознавания и синтеза речи в ваши приложения", — говорит Риттер. — А Java Media Framework API — это полезный и очень мощный набор технологий, которые позволяют получать информацию от web-камеры и производить обработку полученной информации. Ну, а leJOS — это великолепный open-source-проект, предоставляющий мощность и простоту Java-технологии для управления роботами".

Когда объединяются Java и робототехника, то даже небо не является границей в сфере применения роботов. В 2001 году LEGO, Siemens, Hitachi и Introspace организовали соревнование на лучшего LEGO-робота. Система-победитель была взята на борт Международной Космической Станции (декабрь 2001). "Робот парил вокруг и собирал куски строительного мусора", — вспоминает Риттер. — Таким образом он представлял собой самый настоящий уборщик мусора, в программном обеспечении которого Сборщика мусора не было:)!"

А совсем недавно Джеймс Гослинг (James Gosling) из Sun Labs консультировался с учеными и инженерами из NASA и JPL с целью рассмотрения возможности использования Java-технологии в вездеходе, предстоящая миссия которого — Марс. "Красная планета" находится примерно в двадцати световых минутах от Земли. И получается, что даже с использованием связи на скорости света (и радиоволны) передача сообщения планетарному вездеходу будет осуществляться в течение двадцати минут. Плюс к этому чтобы получить ответ и подтверждение получения сообщения потребуется еще двадцать минут. Такие расстояния делают неосуществимой возможность контроля над транспортным средством в режиме реального времени. Поэтому роботы — исследователи планет должны принимать множество решений самостоятельно. Программное обеспечения следующего поколения для марсианского вездехода в оригинале было спроектировано и построено с помощью C++. Однако Гослинг работает совместно с NASA и JPL, чтобы создать Java-версию кода, который вместе с вездеходом будет послан на Марс в 2009 году.

Ссылки
Домашняя страница Java Speech API http://java.sun.com/products/java-media/speech/
Спецификация Java Speech Grammar Format http://java.sun.com/products/java-media/speech/forDevelopers/JSGF/index.html
Спецификация Java Speech API Markup Language http://java.sun.com/products/java-media/speech/forDevelopers/JSML/index.html
Java Speech API JSR-113 http://www.jcp.org/jsr/detail/113.jsp
Java Communications API http://java.sun.com/products/javacomm/
Java Media Framework API 2.1.1 http://java.sun.com/products/java-media/jmf/2.1.1/
Интерфейс Java/TWAIN http://www.gnome.sk/Twain/jtp.html
Домашняя страница Java 2D API http://java.sun.com/products/java-media/2D/
Домашняя страница Java Advanced Imaging API http://java.sun.com/products/java-media/jai/
Java Technology Robotics Developers Kit http://www.sun.com/developers/evangcentral/totallytech/robo-sdk.html
Демонстрационный робот от Саймона Риттера http://www.sun.com/developers/evangcentral/robot/
Java Technology LEGO MindStorms Challenge (университетское состязание на лучшего робота) http://www.sun.com/developers/evangcentral/challenge/
Команда EvangCentral of Sun's Technology Evangelism http://www.sun.com/developers/evangcentral/
Интервью с Саймоном Риттером http://java.sun.com/features/2002/05/robot.html
Speech for Java от IBM (реализация Java Speech API) http://alphaworks.ibm.com/tech/speech
IBM ViaVoice http://www-3.ibm.com/software/speech/
Домашняя страница LEGO Mindstorms http://mindstorms.lego.com/
Инструментарии для робототехники на основе LEGO Mindstorms http://www.lego-mindstorms-robotic-kits.com/lego_mindstorms_info.html
Домашняя страница LeJOS http://lejos.sourceforge.net/
Книги по программированию leJOS http://lejos.sourceforge.net/books.html

По материалам Steve Meloan
Подготовил Алексей Литвинюк,
http://www.litvinuke.hut.ru



Компьютерная газета. Статья была опубликована в номере 30 за 2003 год в рубрике разное :: роботика

©1997-2022 Компьютерная газета