roboforum.ru

Технический форум по робототехнике.

Алгоритм самонастройки ПД регулятора лайнтрейсера

Алгоритм самонастройки ПД регулятора лайнтрейсера

Radist » 26 дек 2010, 22:47

Многие из форумчан уже делали лайнтрейсеров примерно такой конструкции: два ведущих колеса, одно подруливающее, линейка датчиков линии. Алгоритмы соотношения скоростей колес в зависимости от положения линии в текущий момент могут быть разными, в частности ПД (есть мнение, и я с ним согласен, что это лучший алгоритм для этого дела. Но чтобы он работал хорошо - нужно правильно подобрать коэффициенты П и Д). Обычно это делают в ручную, ориентируясь на поведение бота - если ездит примерно плавно, то настройка окончена. Мало кто может точно засечь изменение времени прохождения трассы, чтобы можно было определить лучшую пару коэффициентов. Предложенный далее алгоритм предназначен для автоматизации подбора этих коэффициентов.
Исходные данные. У вас уже есть подпрограмма ПД регулятора, и подпрограмма для опроса датчиков линии. Саму трассу придется немного модифицировать - поперек трассы наклеить кусок черной изоленты. Это будет точка отсчета, старт/финиш. Критерием качества прохождения линии будет время прохождения линии, его нужно минимизировать. Подпрограмму опроса датчиков линии нужно дописать таким образом, чтобы бот всегда знал: на старте он или на линии. С датчиков кроме информации о положении линии приходит флаг: старт/финиш или линия. Сама процедура автонастройки имеет несколько режимов, о них далее. Перед началом автонастройки нужно грубо найти минимальный коэффициент П, при котором бот не теряет линию (при нулевом коэффициенте Д). Итак, все готово.
Переход со старта на линию - это событие, по которому начинается заезд. Переход с линии на финиш - это событие, по которому подводится итог и делаются все нужные действия. Чтобы на подбор коэффициентов не влияли случайности, введено фильтрование - результат усредняется за 4 круга.
В начале режим нулевой. Бот выезжает на линию, проезжает 4 круга, усредняет время - это наше первое время, именно его мы будем улучшать. В качестве времени выступает число циклов опроса датчиков линии. Затем режим становится первым.
В первом режиме подбирается коэффициент П при нулевом коэффициенте Д. Увеличиваем его, 4 заезда, усредняем, сравниваем время. Если получилось быстрее - берем новый коэффициент П. Если медленнее - берем старый коэффициент П, а режим становится вторым.
Тут нужно небольшое пояснение. Представьте декартову плоскость, первый квадрант. Ось Х - это П, вторая ось - это Д. Где-то лежит наша точка минимума. Мы не знаем сколько в этой функции двух переменных локальных минимумов. Проверять все комбинации точек - очень долго. Поэтому алгоритм строится на предположении, что минимум у нас один.
Во втором режиме вокруг каждой точки находятся 8 точек (кроме границ). Вокруг нашей выбранной точки лежит 5 точек, в двух из которых мы побывали чуть ранее. Обход остальных точек будем делать по часовой (это связано с тем, что одновременно с уменьшением П увеличивают Д - чаще всего это помогает). Чтобы не проверять точки дважды - их координаты (суть пара коэффициентов) заносятся в кольцевой буфер на 8 пар коэффициентов. После каждой проверки пары сравнивается время. Если его удалось уменьшить - запоминаем эту пару как текущую, если нет - эту пару заносим в буфер и переходим к следующей паре. Как только все точки вокруг текущей оказываются проверенными (во всех их время больше) - мы нашли минимум.
Внешне работа алгоритма выглядит просто - бот катается по трассе минут 5 - 10, потом останавливается. Коэффициенты можно хранить в ее проме, потом считать их оттуда и все.

Я описал алгоритм до того, как его реализовал. Может вы найдете в нем грубые ошибки и это поможет сохранить мое время. Собираюсь реализовать алгоритм в течение новогодних каникул.

Re: Алгоритм самонастройки ПД регулятора лайнтрейсера

avr123.nm.ru » 26 дек 2010, 22:53

Настройку можно делать так - поставить датчик прохождения круга трассы и автоматом измерять время круга игнорируя круги на которых в бот передается корректировка коэфов.

Re: Алгоритм самонастройки ПД регулятора лайнтрейсера

Radist » 26 дек 2010, 22:58

Не понял каким автоматом и кто должен измерять время круга.
но догадываюсь, что измерять время будет бот.
Раз коэффициенты передаются откуда то, подозреваю что с компа через радиоканал... Это значит что прога нужна для компа, нужна двухсторонняя связь, нужна доработка лайнтрейсера. Задача решится, но возни будет больше.

Re: Алгоритм самонастройки ПД регулятора лайнтрейсера

vadinator » 26 дек 2010, 23:00

Класно! Самообучающийся робик...

Re: Алгоритм самонастройки ПД регулятора лайнтрейсера

avr123.nm.ru » 26 дек 2010, 23:14

Radist писал(а):Не понял каким автоматом и кто должен измерять время круга.
Комп на котором ведется лог и манипуляции коэфами.

Radist писал(а):подозреваю что с компа через радиоканал...
Да.

Добавлено спустя 2 минуты 17 секунд:
vadinator писал(а):Класно! Самообучающийся робик...
Можно и так, ддя этого надо на длинном прямом участке дистанции нарисовать поперечную черту для затемнения всех датчиков или магнит расположить а на боте датчик холла или иначе дать боту информацию о прохождении круга.

Re: Алгоритм самонастройки ПД регулятора лайнтрейсера

Radist » 27 дек 2010, 22:08

Начал по кусочкам отлаживать алгоритм и получил интересные на первый взгляд материалы. Сперва немного пояснений.

У меня оба ведущих колеса с реверсом. Линейка датчиков выдает отклонение от центра линии плюс/минус 25 мм. Максимальный шим 255, что дает максимальный коэффициент П = 10, а с учетом реверса П максимум равен 20. Так я рассуждал. На деле же оказалось что отклонений от центра линии в 25 мм у бота практически нет, и коэффициент П может быть больше 20 (работает регулятор при этом без захода в насыщение). Выходит что зря я поставил 6 датчиков - хватило бы и 4. Просто мой бот не очень быстрый, максимальная скорость по прямой 23 см/с, а опрос датчиков проводится достаточно быстро - вот я до краёв линейки и не дохожу. Но я не знаю, можно ли было предвидеть этот результат заранее, или же в данном случае раз на раз не приходится.

Я проверял коэффициенты 7, 10, 15, 19, 22
Получил результаты (перевел их в секунды)
11,505
10,884
10,663
10,465
10,388

Это иллюстрация того, что на глаз коэффициенты можно подобрать ОЧЕНЬ грубо.

ЗЫ. Трасса не 1-34, а укороченная до 1,85 м. Но мой робот не лайнтрейсер в чистом виде - на нем я оттачиваю алгоритмы и испытываю датчики. Робот-многостаночник.

Re: Алгоритм самонастройки ПД регулятора лайнтрейсера

Michael_K » 28 дек 2010, 01:04

Radist писал(а):Выходит что зря я поставил 6 датчиков - хватило бы и 4. Просто мой бот не очень быстрый...

ну тут не только от скорости зависит, а еще и от скорости отработки команд...
грубо говоря, вот задаете вы шим 200, за какое время робот до заданной скорости разгонится. То же касается и разворота.

Radist писал(а):Это иллюстрация того, что на глаз коэффициенты можно подобрать ОЧЕНЬ грубо.

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

Re: Алгоритм самонастройки ПД регулятора лайнтрейсера

Виталий » 28 дек 2010, 01:42

Просто довольно странно использовать ПИД на 4 или 6 датчиках.

Re: Алгоритм самонастройки ПД регулятора лайнтрейсера

Michael_K » 28 дек 2010, 01:57

...если они дискретные.

Re: Алгоритм самонастройки ПД регулятора лайнтрейсера

Виталий » 28 дек 2010, 02:08

Ну а лайнтрейсере вроде дискретные...

Re: Алгоритм самонастройки ПД регулятора лайнтрейсера

Zeus » 28 дек 2010, 11:49

дискретные

А что мешает завести на аналоговый вход?

Re: Алгоритм самонастройки ПД регулятора лайнтрейсера

Radist » 28 дек 2010, 12:09

В описании алгоритма нигде не упоминается какие датчики линии. Датчик линии может иметь любую конструкцию, быть аналоговым или дискретным, реализован на одном оптроне или на десяти. Он должен делать четыре вещи:
- говорить с какой стороны центр линии
- говорить как далеко центр бота находится от центра линии
- говорить, находится бот на старте/финише или на линии
- говорить что бот потерял линию.

Но раз уж речь зашла о том, какие у меня датчики... У меня 6 оптронов, выходы с которых заведены на 6 каналов ацп. Есть две подпрограммы опроса датчиков: дискретная, где не учитывается амплитуда, а учитывается лишь положение относительно программного порога, и аналоговая, где определяется центр масс. К сожалению, линейка датчиков расположена близко к полу, поэтому вместо плавного "кадра" засветки в аналоговом режиме я имею резко меняющиеся данные. То есть и в цифровом, и в аналоговом режиме показания от линейки у меня изменяются с дискретом 5 мм. Коэффициенты у меня тоже грубые, поэтому управляющее воздействие меняется достаточно резко. В последующих конструкциях я это учту, а на фенольном шасси клиренс поменять очень проблематично.

На последок повторюсь: здесь мы обсуждаем алгоритм, который не зависит от вида датчика линии.

Re: Алгоритм самонастройки ПД регулятора лайнтрейсера

Radist » 06 янв 2011, 22:48

Снова занялся алгоритмом. Экспериментально определил точку перегиба П - составляющей. Данные такие:

П время, сек
7 11,505
10 10,884
15 10,663
19 10,465
22 10,388
24 10,247
25 10,199 - вот он, минимум!
26 10,331
27 10,359

Так что в моем случае минимум не острый. Но эти данные получены не роботом, а мной - поэтому я и смог привести промежуточные точки. Задача на ближайшее время - чтоб я его запустил, а он сам нашел, что лучше всего когда П = 25.

Re: Алгоритм самонастройки ПД регулятора лайнтрейсера

Michael_K » 06 янв 2011, 23:05

хм... не такой уж он и "не острый"?

Re: Алгоритм самонастройки ПД регулятора лайнтрейсера

Radist » 07 янв 2011, 00:47

Научил робота находить П. Он согласен, что это 25, только время показал 10,290. А при П = 26 робот уже сильно дергается, это хорошо видно, а по времени это видно плохо - разница в 0,1 сек на глаз не видна. Если построить график, провал может и будет острым, но не настолько, чтобы глаз заметил разницу. Теперь вместо П - регулятора надо запрограммить ПД. Он у меня есть, но что-то глючит, где-то ошибка в коде.
Будем искать (с) :D


cron
Rambler\'s Top100 Mail.ru counter