среда, 27 октября 2010 г.

NXT-G: калибровка сенсоров освещенности и звука

Навеяно чтением книги "Lego Mindstorms NXT-G Programming Guide"

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

Следовательно, у нас есть два способа бороться с этим:
  1. Каждый раз когда наша окружающая обстановка меняется, мы измеряем новые показания сенсоров звука и освещенности и меняем программу, так чтобы отразить новые условия. Этот процесс долгий, к тому же многие части программы нам придется тестировать и отлаживать заново.
  2. Для каждой новой окружающей обстановки мы производим настройку сенсоров или их калибровку. Таким образом, если в нашей программе мы раз установили значение для самого темного участка в 20%, то в новой окружающей обстановке, после калибровки, темное место опять будет отображаться как 20% - программу изменять и на заново тестировать не придется.

Блок Calibrate позволяет калибровать только звуковой сенсор и сенсор освещенности.
Большинство параметров в конфигурацонной панели блока говорят сами за себя.

Параметр Action позволяет выбрать два действия для блока: калибровать (Calibrate) и сбросить настройки (Delete). В большинству случаев, нужно будет пользоваться действием "калибровать". Но если все-таки есть необходимость сбросить предыдущие параметры калибровки, используйте Delete.
Параметр Value определяет какое значение необходимо откалибровать - минимальное (Minimum) или максимальное (Maximum). Отсюда следует вывод, с использованием одного блока можно откалибровать (или сбросить) только минимальное значение, для того чтобы отклибровать максимальное значение, вы должны использовать блок Calibrate еще раз. Хотя и NXT-G предоставляет возможность использовать только один блок в программе для калибровки только одного значения, автоматически калибруя второе значение, это делать не рекомендуется во избежание возможных проблем калибровки и в работе программы.

Еще одна особенность блока Calibrate в том, что если к блоку NXT подключено несколько однотипных сенсоров (например, три сенсора освещенности), использование двух блоков калибровки для одного из них, приведет к тому, что они автоматически применятся к другим сенсорам этого типа.

Давайте рассмотрим использование же блока Calibrate в программе:

1. Отдельная программа для калибровки сенсоров.

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

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

2. Калибровка сенсора перед запуском основного алгоритма.
Такое использование блока Calibrate может быть в тех случаях, когда нужно, чтобы робот произвел калибровку самомстоятельно непосредственно перед выполнением основного задания.
Например, робот прежде чем двигаться вдоль черной линии, сначала находит самый светлый участок и калибрует его как максимум, затем находит самый темный участок и калибрует его как минимум.
Программа ниже демонстрирует идею как можно откалибровать максимальное значение сенсора освещенности перед движением робота по черной линии. Программа подразумевает, что перед ее запуском, робот поставлен на линию или около нее, так что сенсор робота пройдет над лининей во время "калибрующего" поворота вокруг своей оси.

5 комментариев:

  1. Очень полезная информация у Вас! А главное доступно! Вопрос: Как сделать колибровку в BricxCC ?

    ОтветитьУдалить
  2. Спасибо!
    Про калибровку могу сказать только за NXC (и если, аналогия уместна, то и за NBC).
    Хотя калибровка в них и, судя по-всему, доступна, необходимости делать ее особой нет, поскольку NXC продоставляет считать сырые (RAW)значения c сенсора. Как вы может прочитать в http://nnxt.blogspot.com/2010/12/blog-post_05.html, калибровка - всего лишь масштабирование значений с сенсора в "условные" откалиброванные показания. Доступность сырых значений избавляет от необходимости делать калибровку. На худой конец, вы всегда можете сделать ее программно:
    откалибр. знач = (Max-RAW)*100/(Max-Min), где Max - масимальное значение, которое показывает сенсор (белый), а Min - минимальное значение сенсора (черный).

    ОтветитьУдалить
  3. Извините не понял формулу, может
    откалибр. знач = (RAW-Min)*100/(Max-Min)
    А вообще спасибо, все элементарно оказалось
    почему-то зациклился на поиске встроенных функций.
    Как эксперименты проведу, обязательно выложу, программку (в стиле Вашей).

    ОтветитьУдалить
  4. Ну можно и так :) Просто у вас за 100% взят светлый участок, а у меня получился черный :)

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

    ОтветитьУдалить
  5. Выложите подобную программку

    ОтветитьУдалить

Related Posts Plugin for WordPress, Blogger...