Digit писал(а):Что-то я в этом не разобрался нефига.
Что такое сонар? Он не определяет расстояние до препятствия?
Определяет

но как-бы не совсем, дело в том, что он имеет очень широкий угол в котором видит препятствия, поэтому при получении отраженного сигнала не ясно где оно конкретно с точки зрения направления;
Digit писал(а):Если ничего не напутал, то вариант 2 вполне хорош. Все остальное не особо нужно. Счас перескажу, как я понял

Сонар у нас ничего о расстоянии сказать не может, а только свободно\занято, зато на относительно большом расстоянии.
Расстояние он может сказать точно, не может точно сказать направление.
Digit писал(а):ИК-дальномер может сказать дистанцию до препятствия, но на расстоянии меньшем, чем видит сонар.
Дистанция ИК-дальномера не зависит от расстояния на котором работает сонар, но обычно она меньше.
Digit писал(а):ИК-бампер всегда подскажет, что предыдущие датчики лоханулись.
Это как раз не так, ИК-бампер заведомо хуже ИК-дальномера, он просто от безденежья

Digit писал(а):Итак, двигаемся куда хотим и сканируем сонаром, пока он не скажет, что препятствие. Пока сканируем, постоянно прибавляем многоугольники к полигону "разведано" и к полигону "свободно от препятствий". Многоугольники эти размером "по-умолчанию", т.е. на сколько ориентировочно "видит" сенсор, причем, видимо, он размером с область видения сенсора, способного определить расстояние (в нашем случае, ИК-дальномера).
Вроде всё так.
Digit писал(а):В зависимости от того, насколько шустро бот работает сенсорами, возможно, придется остановиться, когда сонар увидит препятствие. Проверяем ИК-дальномером расстояние в секторе, куда смотрел сонар. При обнаружении расстояния, масштабируем многоугольник "по-умолчанию" до размеров расстояния и прибавляем уже его.
Ну вроде да, всё так если поведение рассматривать, хотя мы поведение будем выносить на другой уровень в программе.
Digit писал(а):ЗЫ
Кстати, чтоб не отрываться по каждому писку о препятствии, надо сделать какую-то быструю проверку на то, увидели ли мы новое препятствие или нет. Т.к. иначе робот навсегда потеряется на кухне, где ножки от стола и табуреток\стульев (в случае, конечно, если проверка расстояний и сканирование будут занимать достаточно большое количество процессорного времени).
А это просто - если на карте есть препятствие на таком расстоянии значит не паримся, если нет - значит что-то новенькое и можно попробовать обшарить ИК-дальномером.
Добавлено спустя 7 часов 59 минут 39 секунд:В общем начнем с малого - с варинта 2

отсутствие препятствий выявляем сонаром и ИК-дальномером, а наличие - только ИК-дальномером.
Попробуем спроектировать объекта "карта":
Свойства объекта:
- разведанное пространство;
- выявленные препятствия;
- подготовленная карта и граф расстояний для поиска путей;
Методы объекта:
- Обнулить карту;
- Загрузить карту (из указанного файла);
- Сохранить карту (в указанный файл);
- Показать карту (в объекте TImage, - разведанную территорию и поверх неё выявленные препятствия);
- Добавить информацию об отсутствии препятствий (в заданном многоугольнике);
- Добавить информацию о наличии препятствия (в заданном многоугольнике);
- Подготовить карту для поиска путей (задаются - количество вершин в аппроксимации скруглений и отступ от препятствий и неразведанных участков, так же задается флаг - искать только по разведанному пространству или рассматривать неразведанные участки);
- Найти ломанный путь из точки А в точку Б;