понедельник, 14 декабря 2015 г.

Решение задачи №11: Разворот на центр объекта

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


Давайте попробуем решить эту задачу. Как обычно мы ищем, например, банки в круге для простейшего кегельринга? Робот разворачивается на месте и как только заметил датчиком расстояния объект, ближе чем указанная граница - останавливается. Причем робот видит край объекта, а инерция доворачивает его до центра банки. Подбирая скорсоть разворота мы отлаживаем направление на центр объекта.

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



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

Пусть моторы подключены к портам В и С. На псевдокоде программа c использованием энкодера будет выглядеть следующим образом:

МОТОРЫ (50,-50)
ЖДИ (РАССТОЯНИЕ < 50)
А = ЭНКОДЕР (В)
ЖДИ (РАССТОЯНИЕ > 50)
B = ЭНКОДЕР (В)
МОТОРЫ (СТОП)
С = (B -A) / 2
МОТОРЫ_НА)ГРАДУСЫ(-50,50,С)

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

A = ТАЙМЕР (1)
МОТОРЫ (50,-50)
ЖДИ (РАССТОЯНИЕ < 50)
B = ТАЙМЕР (1)
ЖДИ (РАССТОЯНИЕ > 50)
C = ТАЙМЕР (1)
МОТОРЫ (СТОП)
МОТОРЫ(50,-50)
ЖДИ (С-A)
МОТОРЫ (СТОП)
D = (B - A) + (C -B) / 2
МОТОРЫ (50,-50)
ЖДИ (D)
МОТОРЫ (СТОП)

Очевидно, что данный способ применим не только для поиска объектов датчиков расстояния. Используя датчик освещенности робот может "нащупать" центр широкой линии, а используя датчик цвета - середину цветной поверхности.

Комментариев нет:

Отправить комментарий

Самое популярное