Показаны сообщения с ярлыком ultrasonic. Показать все сообщения
Показаны сообщения с ярлыком ultrasonic. Показать все сообщения

воскресенье, 15 декабря 2013 г.

Проблема с двумя датчиками расстояния на EV3

Платформа EV3 - очень новая, и робототехникам, использующим ее для своих проектов, предстоит еще столкнуться с многими тонкостями при ее использовании, а также придумывать способы для борьбы с ошибками, которые появились, как в программном, так и в аппаратном обеспечении.
Например, наверняка, идея использовать два датчика расстояния (ультразвуковых) покажется неплохой идеей для решения задачи поиска выхода из лабиринта роботом: один датчик ищет проходы справа (или слева), другой смотрит - нет ли препятствия перед роботом.

пятница, 1 марта 2013 г.

Кружок по робототехнике. Как готовились к зимним состязаниям

Продолжаем рассказывать о занятиях в самом обычном кружке робототехники.

Как можно было увидеть в прошлой заметке, декабрь выдался довольно урожайным месяцем на робо-состязания (1, 2). Затем, долгожданные и зимние каникулы, которые "съели" аж целых 3 занятия.
Как только вышли с каникул, нужно было готовиться к состязаниям, проходившим в рамках фестиваля РОБОФЕСТ-2013. И, многие уже в курсе, выступали мы очень хорошо!

четверг, 29 ноября 2012 г.

Кружок по робототехнике. Занятие шестое

Продолжение. Предыдущая - пятая часть здесь.

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

среда, 28 ноября 2012 г.

Определение положения предмета с помощью датчиков расстояния

Понятие триангуляция знакомо многим, кто хоть раз разбирался как работают GPS приемники или тем, кто изучал что такое радиопеленгация. На самом деле это понятие пришло из геометрии и геодезии. Но сейчас пойдет речь именно о триангуляции, как способе определения координат или местоположении предмета.
Aswin - блогер из Дании, регулярно публикующий свои заметки на блоге NXT Time. Недавно опубликовал очень интересный материал - он показал, как с помощью двух датчиков расстояния (он использовал стандартные NXT Ultrasonic датчики) можно с допустимой точностью определить местоположение предмета. Для определения местоположения как раз и использовался метод триангуляции.

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

пятница, 16 ноября 2012 г.

Кружок по робототехнике. Занятие пятое

Продолжение. Предыдущая часть здесь.

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

понедельник, 24 сентября 2012 г.

NXT и Python: опрашиваем датчики

Базовые способы работы с моторами в Python были рассмотрены в прошлой заметке - теперь настало время осветить, какие API (applications programming interface) доступны для работы со стандартными LEGO NXT датчиками.
Начнем с того, что посмотрим на модуль nxt.sensor, который предоставляет классы по работе с датчиками. Для этого в Python Shell запросим справку по модулю:
import nxt.sensor
help(nxt.sensor)
Небольшая информационная страничка расскажет, что данный модуль предоставляет доступ к следующим под-модулям:
  • analog
  • common
  • digital
  • generic
  • hitechnic
  • mindsensors
Т.е. видно, что помимо стандартных датчиков, библиотека nxt-python поддерживает работу и с датчиками известных производителей Mindsensors и HiTechnic.

вторник, 20 марта 2012 г.

Робот для состязаний: Робот "Колумб". Часть I

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

Конечно, ландшафт в случае состязаний - условность, он задается усложняющими элементами на поле:

четверг, 13 октября 2011 г.

Что находится под корпусом?

Xander Soldaat в своем блоге ведет очень интересную рубрику под названием "Exposed", которую на русский можно было бы перевести например как "Разоблачение". Для этой рубрики, Xander разбирает какой-нибудь сенсор, использующийся для подключения к NXT блоку и показывает, что там внутри.
Так, например, двумя последними "жертвами" стали ультразвуковой сенсор и цветовой сенсор.

Лично для меня, одним из удивительных открытий стало то, что в цветовом сенсоре на самом деле не три, а два элемента, участвующих в распозновании - третий элемент, выглядящий черным диодом - просто пластиковая заглушка для придания солидности сенсору:

пятница, 26 ноября 2010 г.

Алгоритмы: движение вдоль стены

Не правда ли программа, заданная в качестве задачки на понимание NXT-G в этом посте, похожа на программы, поясняющие движение вдоль линии, в этом?




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

Если быть более точным, то в задаче робот поворачивает вправо, если расстояние на сенсоре меньше 14 см. и влево, если расстояние на сенсоре больше 16 см. Сложно представить, для чего может понадобиться такое движение, если сенсор смотрит вперед или назад. Но многое встает на свои места, если предположить, что сенсор установлен на одном из бортов робота и смотрит в сторону.



Если нарисовать схему такого движения, то становится видно, что по левому борту робота на протяжении всего движения, находится какое-то препятствие и робот пытается не подъезжать к нему слишком близко и не отъезжать слишком далеко. Если предположить, что препятствие это стена, то движение робота можно назвать движением вдоль стены. При некрутых заворотах стены, робот будет стараться держаться на определенном расстоянии, т.е. поворачивать вместе с заворотом стены.



Кстати, этот вариант ответа (движение вдоль стены) тоже был среди ответов, которые были присланы после публикации задачи.

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

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

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

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

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

Решение этой проблемы, традиционно, не одно. Оно может быть как программным, так и конструкторским. Например, можно не фиксировать датчик жестко, а поставить его на мотор.

Таким образом, после поворота робота, скажем, налево, сенсор расстояния поворачивается, стараясь быть направленным прямо на стену. А при повороте направо, мотор поворачивает сенсор в другую сторону:


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

воскресенье, 24 октября 2010 г.

NXT-G: опрос сенсора расстояния (UltraSonic)

В стандартной поставке Lego Mindstorms NXT есть четыре сенсора:
* касания (Touch)
* звука (Sound)
* световой (Ligth)
* расстояния (Ultrasonic)

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

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


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

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

Давайте рассчитаем теоретический предел задержки.

Стандартный ультразвуковой сенсор, поставляемый с набором Mindstorms, позволяет определять расстояние до 2,5 метров (или 100 дюймов). Т.е. зная скорость звука (пусть будет 330 м/c) можно рассчитать, что максимальное время ожидания вернувшейся волны.

Еще одна особенность в том, что работа с сенсором устроена таким образом, что он всегда ждет максимальное время. Т.е. даже если препятствие находится на расстоянии 10 см., то результат программе вернется все равно не раньше, чем через 1/66 секунды.

Простейшая программа позволит проверить так ли на самом деле и не расходятся ли теоретические выкладки с реальным использованием:

Как показывает эксперимент, реальная задержка - это примерно 1/17 секунды (0,058 секунды). Видимо, это связано с внутренней реализацией NXT-G функции опрашивающей сенсор - дополнительные проверки, инициализации, возможно защита для многопотокового использования и т.п.
Следует отметить, что для других языков программирования задержка будет меньше. Например, при аналогичной программе на NXC, он будет примерно 1/34 секунды.

Так что же дает нам это знание?
Чтобы лучше понять это, рассмотрим несколько примеров.

Пример 1.
Необходимо сделать робот-радар. Т.е. датчик установлен на двигателе двигатель вращается так, что робот должен обозревать пространство с углом обзора в 180 градусов. Как результат, отсканированное пространство будет отображено на экране NXT блока.
Пердположим, что время, за которое двигатель делает оборот в 180 градусов - 0,5 секунды. Это значит, что, если программа в цикле опрашивает сенсор расстояния в течении этого поворота, то цикл выполниться 8-9 раз. Иными словами, радар будет "выстреливать" волну каждые 20 градусов.

Очевидно, что такой радар не годиться, поскольку он не обнаружит большинство объектов.
Таким образом, необходимо рассчитать скорость вращения двигателя, так чтобы сенсор расстояния опрашивался как можно чаще в течении поворота. Например, если желательное разрешение радара - 2 градуса, то за один оборот радара сенсор должен опроситься 90 раз, что займет 90/17 = 5,3 секунды. Т.е. двигатель должен двигаться в 10 раз медленнее. Чтобы достичь этого скорее всего придется использовать шестерную передачу.

Пример 2.
Допустим, составлена программа для движения робота вдоль стены на расстоянии 10 см., так что робот находится в трех состояниях: выполнять поворот к стене, выпольнять поворот от стены, не выполнять никакого поворота. Условия смены состояний следующие:
- если расстояние до стены больше 12 см., выполняем поворот к стене
- если расстояние до стены меньше 8 см., выполняем поворот от стены
- если расстояние больше 8 см., но меньше 12 см., не выполнять никакого поворота

Имея два вложенных опроса сенсора, общая задержка выяснения расстояния для того, чтобы среагировать на поворот от стены является 0,117 секунды. При достаточно большой скорости робота, может получиться так, что за это время он может уже доехать до стены и, врезавшись в нее, перевернуться.
Следовательно, при опросе сенсора расстояния в цикле необходимо минимизировать количество обращений к нему.
Например, можно опросить сенсор один раз, занести результат опроса в переменную, а, затем, уже извлекать данные из нее. Для алгоритма описанного выше, это позволит ускорить реакцию на приближающуюся стену почти в два раза:
Related Posts Plugin for WordPress, Blogger...