roboforum.ru

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

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

Автомат, адаптивный автомат ... разум

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

Сообщение Radist » 26 дек 2010, 22:47

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

Я описал алгоритм до того, как его реализовал. Может вы найдете в нем грубые ошибки и это поможет сохранить мое время. Собираюсь реализовать алгоритм в течение новогодних каникул.
Аватара пользователя
Radist
 
Сообщения: 2254
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

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

Сообщение avr123.nm.ru » 26 дек 2010, 22:53

Настройку можно делать так - поставить датчик прохождения круга трассы и автоматом измерять время круга игнорируя круги на которых в бот передается корректировка коэфов.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

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

Сообщение Radist » 26 дек 2010, 22:58

Не понял каким автоматом и кто должен измерять время круга.
но догадываюсь, что измерять время будет бот.
Раз коэффициенты передаются откуда то, подозреваю что с компа через радиоканал... Это значит что прога нужна для компа, нужна двухсторонняя связь, нужна доработка лайнтрейсера. Задача решится, но возни будет больше.
Аватара пользователя
Radist
 
Сообщения: 2254
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

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

Сообщение vadinator » 26 дек 2010, 23:00

Класно! Самообучающийся робик...
Роботы, уже среди нас...
Прошу прощения за аватар, никак схему динамической индикации не могу настроить :)
Аватара пользователя
vadinator
 
Сообщения: 979
Зарегистрирован: 19 янв 2010, 14:51
Откуда: Петрозаводск
прог. языки: C, FBD, Wiring-Processimg,,,LD, SFC, ST...
ФИО: Вадим

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

Сообщение avr123.nm.ru » 26 дек 2010, 23:14

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

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

Добавлено спустя 2 минуты 17 секунд:
vadinator писал(а):Класно! Самообучающийся робик...
Можно и так, ддя этого надо на длинном прямом участке дистанции нарисовать поперечную черту для затемнения всех датчиков или магнит расположить а на боте датчик холла или иначе дать боту информацию о прохождении круга.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

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 м. Но мой робот не лайнтрейсер в чистом виде - на нем я оттачиваю алгоритмы и испытываю датчики. Робот-многостаночник.
Аватара пользователя
Radist
 
Сообщения: 2254
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

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

Сообщение Michael_K » 28 дек 2010, 01:04

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

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

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

Еще неизвестно, как этот "локальный минимум" в координатах П и Д выглядит - с ходу трудно оценить.
Легко может оказаться, что этот минимум достаточно острый. Может быть вы просто далеко от него, поэтому кривая такая плавная.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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

Сообщение Виталий » 28 дек 2010, 01:42

Просто довольно странно использовать ПИД на 4 или 6 датчиках.
Все новости о моих проектах http://savethebest.ru
Аватара пользователя
Виталий
 
Сообщения: 2114
Зарегистрирован: 08 окт 2004, 16:43
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий

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

Сообщение Michael_K » 28 дек 2010, 01:57

...если они дискретные.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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

Сообщение Виталий » 28 дек 2010, 02:08

Ну а лайнтрейсере вроде дискретные...
Все новости о моих проектах http://savethebest.ru
Аватара пользователя
Виталий
 
Сообщения: 2114
Зарегистрирован: 08 окт 2004, 16:43
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий

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

Сообщение Zeus » 28 дек 2010, 11:49

дискретные

А что мешает завести на аналоговый вход?
«Сон разума рождает чудовищ»
Аватара пользователя
Zeus
 
Сообщения: 862
Зарегистрирован: 28 июл 2009, 10:02
Откуда: Самара
ФИО: Павел Сергеевич

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

Сообщение Radist » 28 дек 2010, 12:09

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

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

На последок повторюсь: здесь мы обсуждаем алгоритм, который не зависит от вида датчика линии.
Аватара пользователя
Radist
 
Сообщения: 2254
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

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.
Аватара пользователя
Radist
 
Сообщения: 2254
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

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

Сообщение Michael_K » 06 янв 2011, 23:05

хм... не такой уж он и "не острый"?
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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

Сообщение Radist » 07 янв 2011, 00:47

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

След.

Вернуться в Алгоритмы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6