=DeaD= писал(а):Не путайте единичный маневр и накапливающуюся погрешность за десятки разных перемещений по разной поверхности (или у вас идеальная поверхность чистая и полированная с идеальным же сцеплением? Тогда что же вы её пылесосите, раз она такая вся из себя идеальная? :)
Карта помещения формируется при единичном обходе всего помещения "по стенке", а не при езде "змейкой".
Езда "змейкой" происходит уже по сформированной карте.
После прохождения каждого из прямоугольников "змейкой", устранение погрешностей происходит с помощью езды "по стенке" к следующему прямоугольнику, путем сопоставления поворотных участков: расчетных и фактических.
Что касается этого первого, единичного обхода, происходящего на этапе №1:
Мне кажется, количество поворотов даже в достаточно сложной квартире будет невелико, и погрешность окажется достаточно незначительной.
Кроме того, в начальной точке пути, для определенности, я бы поставил маяк.
Таким образом, обойдя полностью помещение, робот поймет однозначно, что пришел в ту же точку, из которой вышел.
При этом, если на виртуальной карте линии не сходятся, нужно произвести дополнительные преобразования.
Можно - даже преобразования "случайным" образом, т.е. к какому-нибудь повороту добавить 1 градус, к какой нибудь стенке - 0.5 см и т.д., до тех пор, пока линии не сойдутся.
Даже при таком вот случайном сглаживании точность будет нормальной, а на каждом из прямоугольников - уж совсем хорошей.
Ведь прямоугольники на самом деле цепляются к поворотным моментам на стене, эти поворотные моменты являются своеобразными маяками для робота :)
Но базовая карта помещений - это еще полбеды. Здесь можно, я подозреваю, оставить все как есть.
А вот обнаруженные в процессе змейки препятствия - это конечно сложнее.
Например, представьте, большое прямоугольное помещение, у стен ничего нет, зато в центре комнаты очень много отдельно стоящих предметов.
Поскольку поворотов в таком помещении всего лишь 4, то цепляться роботу особенно не за что...
Так что, при значительных погрешностях такие препятствия действительно могут привести к путанице (например, робот может дважды обнаружить одно и то же препятствие, и нанести его на карту дважды...)
Вот несколько решений, которые, как мне кажется, смогут уменьшить погрешности:
1) использование электронного компаса для отслеживания поворотов (правда, сам не очень представляю как это будет выглядеть... :oops: )
2) добавление к энкодеру на ведущей оси, энкодера на некоем пассивном колесе, которое можно запихнуть под днище и сделать сверхцеплючим (например, состоящим сплошь из резиновых шипов). И показания с двух этих энкодеров усреднять...
2 =DeaD= может быть, у Вас у самого какие-нибудь есть идеи, как решить проблему с погрешностями (только без использования предустановленной карты)? Я смотрю, Вы много с ними работали.
А то я сам - чистый программист, и во всех этих энкодерах понимаю, на самом деле, не так уж много...