Void left() // Поворот налево



{

motor[motorB]=-100; motor[motorC]=100; nMotorEncoder[motorC]=0; while(nMotorEncoder[motorC]<500); motor[motorB]=motor[motorC]=0; PlaySound(soundUpwardTones); wait1Msec(1000);

}

Task main() // Основной алгоритм

{ while(true) {

if(SensorValue[S1]>30) { // Если справа проем  right();  forward(); } else

if(SensorValue[S2]>30) // Если спереди свободно    forward();    else    left();

}

}

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

Удаленное управление

Передача данных

Контроллер NXT оснащен устройством беспроводной передачи данных Bluetooth второго класса. Это значит, что бесперебойная связь гарантирована на расстоянии до 10 м. Но качество и скорость обмена данными во многом будут зависеть от команд и алгоритмов, которые используются при программировании. Соединить можно как два контроллера между собой, так и контролер с компьютером или мобильным телефоном, оснащенным Bluetooth. Существует специальное программное обеспечение, которое с компьютера или мобильного телефона позволяет передавать на NXT команды управления подключенными к нему устройствами: моторами, датчиками и пр. В этом случае нет необходимости запускать какую-либо программу на NXT-приемнике, достаточно установить соединение. Если же необходимо передавать данные, то на приемнике и получателе запускаются разные программы, которые отправляют и обрабатывают полученные данные.

Обмен информацией следует разделить на четыре составляющих:

1) установка соединения,

2) передача данных или управляющих команд, 3) прием данных или выполнение управляющих команд, 4) завершение соединения.

Bluetooth-устройство, которое инициирует подключение, называется ведущим (master). Устройство, которое принимает подключение, называется ведомым (slave). К одному «мастеру» может быть подключены до трех ведомых NXT, по одному на каждый виртуальный порт (соответственно на 1-й, 2-й и 3-й). 

Соединение можно устанавливать вручную, а можно и программно, эта функция реализована в RobotC.

При первом соединении двух устройств запрашивается числовой пароль, который нужно ввести на каждом из них. Впоследствии он не требуется. Подключаемые устройства узнают друг друга по имени (поэтому все имена должны быть уникальными) и способны обмениваться данными. Рассмотрим порядок действий при установке соединения вручную.

1. Включить два NXT и убедиться, что у них уникальные имена.

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

3. На ведомом контроллере включить опцию «Виден всем» (Visibility → Visible). 

4. На ведущем контроллере включить режим поиска соседних устройств (Search).

5. Из списка найденных устройств выбрать ведомый и подключиться к нему.

6. При первом подключении потребуется ввести числовой код (по умолчанию «1234») и нажать «галочку». При последующих подключениях нужный контроллер можно будет найти по инмени в разделе My Contacts.

7. Выбрать любой порт: 1, 2 или 3.

8. При успешном соединении ведомый издаст звуковой сигнал (если включен звук) и на экране каждого из контроллеров рядом со значком Bluetooth появится ромбик «<>». Если подключения нет, то останется значок «<», т. е. левая половинка ромбика.

282

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

Со времен инфракрасной связи в RCX по «почте» передавался 1 байт, а в NXT допускаются большие числа: от –215 до 215 – 1, т.е. в диапазоне –32768...32767. Ноль в «почтовом ящике» означает, что ничего не было принято, поэтому отправлять его не имеет смысла.

На NXT-приемник и NXT-передатчик загружаются разные программы (рис. 8.125).

 

Рис. 8.125. Передача числа 5 по нажатию датчика (слева) и ответный звуковой сигнал (справа).

В общем случае перед приемом данных необходимо изначально инициализировать (т. е. обнулить) почтовый ящик, чтобы очистить его от писем, которые могли остаться от предыдущих сеансов. Команда «Жди письма» (Wait for mail) сама обнуляет его и ждет очередного письма с заданным значением. Если конкретное число не задано, ожидается письмо с ненулевым значением.

Теперь рассмотрим пример с передачей двух различных чисел 

(рис. 8.126).

 

Рис. 8.126. Передача чисел 4 или 5 по нажатию соответствующего датчика и ответные звуковые сигналы.

На передатчике две параллельные задачи осуществляют отправку значений 4 или 5 в зависимости от того, какой из двух датчиков касания был нажат. Для повторного срабатывания после нажатия требуется отпустить датчик. На приемнике также две параллельные задачи «заглядывают» в почтовый ящик и вызывают соответствующий звуковой сигнал. При этом вызовы сигналов могут «наслаиваться» друг на друга, поскольку письма с разными значениями могут приходить довольно часто.

Передача данных является довольно медленной операцией, на гарантированную доставку одного сообщения тратится 0.03 — 0.05 с. Можно, конечно, отправлять сообщения слишком часто, не заботясь о том, будут ли они приняты. В некоторых случаях работает и такой подход. Мы будем стремиться к устранению потерь пакетов при передаче. В двух приведенных выше примерах естественную задержку перед отправкой письма создает сам человек, нажимая на датчик с некоторыми перерывами. 

Теперь рассмотрим пример удаленного управления мотором, в котором задержки задаются программно (рис. 8.127). Чтобы увидеть его в действии, необходимо на приемник и передатчик прикрепить по мотору, подключив каждый к порту A (8.128).

 

Рис. 8.127. Передача значения энкодера и управление скоростью удаленного мотора.

Для передачи значения энкодера мотора A используется соответствующий модификатор (Value of Encoder A из палитры NXT Commands), значение которого отправляется в виде письма с задержкой 0.05 с на доставку пакета. На приемнике после обнуления почты используется модификатор (Value of Mail из палитры Modifiers), который несет в себе значение полученного письма (т. е. содержимое почтового ящика). Это значение подается в качестве скорости управляемого мотора A.

 

Рис. 8.128. Приемник вращает колесо со скоростью, заданной на передатчике поворотом балки.

284

 

Рис. 8.129. Отображение принимаемого значения: слева — в виде числа, справа — в виде диаграммы.

Усовершенствуем приемник, добавив отображение принимаемого значения на экране в виде числа или даже диаграммы (рис. 8.130).

На рис. 8.129 слева показано, что одновременно с управлением скоростью мотора на экране приемника отображается принимаемое значение. Задержка отсутствует, поскольку вывод на экран сам по себе является довольно существенной задержкой.

На рис. 8.129 справа принимаемое значение в нижней части экрана отображается в виде изменяющегося прямоугольника, а в центральной — в виде числа. Поскольку максимальная ширина прямоугольника на экране 100 точек, что в 2 раза меньше диапазона скоростей мотора    –100...100, то полученное по почте значение m смещается в неотрицательный диапазон и сокращается вдвое. Координата X одной пары вершин отображаемого прямоугольника находится в позиции 50 (визуальная точка отсчета), а координата противоположной пары (значение красного контейнера) колеблется в диапазоне 0...100. 

 
 
 

Рис. 8.130. Диаграмма на экране NXT.

Читатель может добавить в программу управление скоростью мотора, показанное на рис. 8.129, самостоятельно. 

Теперь рассмотрим удаленное управление положением мотора (рис. 8.131). Такая возможность полезна при взаимодействии с роботом-манипулятором, который находится на удалении от оператора.

 

Рис. 8.131. Управление положением удаленного мотора.


Дата добавления: 2019-02-22; просмотров: 942; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!