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