Проблем тут, действительно, много и Radist очень хорошо озвучил наиболее существенные из них. Я не готов сейчас дать исчерпывающий ответ на все вопросы, попробую сейчас ответить лишь на некоторые. Однако, уверен, что все перечисленные проблемы имеют решения.
Radist писал(а):
Если второй раз мы не едем 1 в 1, то узнать где поворот, а где прямая можно с погрешностью, зависящей от рассогласования первой и второй траектории.
Я поэтому и предложил использовать автомобильную схему. Энкодер мы используем только для измерения пройденного относительно старта пути, не более. Уверен, что разница в длине пути между двумя попытками к концу трассы не превысит нескольких сантиметров - вполне допустимая погрешность. А то, что траектории не идеально совпадают, нам не важно, мы ориентируемся только на пройденный путь.
Radist писал(а):
Допустим, обе линейки аналоговые (на дискретных точно ничего не получится), шаг линии 1 мм. Можно теоретически узнать радиус поворота (погрешность будет зависеть от шага и расстояния между линейками). Но как воспользоваться этой информацией? Чтобы робот ехал по дуге - на колеса нужно подать разный шим. Знаем радиус - знаем какой шим на какое колесо. А регулятор? Отключить пока? Так радиус у нас с погрешностью - уведет. Не отключать? Так регулятор сам выставит нужные шимы.
Радиус поворота, по большому счёту нам не важен. Всё, что нам нужно - знать место начала поворота, чтобы успеть своевременно затормозить перед ним. Регулятор же, работает всё время - всю трассу мы проходим опираясь только на него. Конфигурацию трассы (места начала и конца поворотов) мы используем только для управления скоростью, чтобы знать, где разгоняться, а где тормозить.
Radist писал(а):
Я могу поставить робота на прямом отрезке так, что на одной линейке он будет по центру, а на другой - нет. Скажете такая ситуация не возможна? А когда робот выходит из поворота на прямую - у него есть небольшие перелеты - а ваш робот подумает, что это начало поворотов. То есть первый круг робот должен практически проползти, чтобы не было в его памяти ложных поворотов. Наверное стоит ввести еще критерий прямой линии, чтобы кучу малых радиусов считать прямой.
Да, это, на мой взгляд самая существенная проблема - однозначно отличить по чему мы едем, по линии или по дуге. Об этом стоит подумать. Очень интересные предложения высказал RiO в предыдущем посте.
Radist писал(а):
То есть первый круг робот должен практически проползти, чтобы не было в его памяти ложных поворотов.
Да, именно так, ведь основная цель на первом круге - записать трассу.
RiO писал(а):
простейший алгоритм - запоминать начало и длину прямого участка по энкодерам
Да, это как раз то, что я и предлагаю. Использование компаса - очень интересная и оригинальная мысль. Вопрос ещё в том, как компас будет себя вести в условиях электромагнитных помех от двигателя(ей).
Подводя итог, ещё раз хочу сформулировать основную мысль, которую хотел донести: запомненная трасса в памяти робота используется исключительно для управления скоростью движения робота, следование по трассе происходит целиком и полностью за счёт регулятора.