roboforum.ru

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


Skyer's PID Linetracer

Re: Skyer's PID Linetracer

Сообщение Skyer » 12 фев 2012, 16:44

Собрал плату. Робот пока ездит на релейном алгоритме, криво конечно пока. Возникает вопрос как реализовать теперь ПИД? Сам алгоритм я понимаю, но вот как измерить уровень ошибки и как определить бозовое значение ШИМ - это не совсем понятно. Об измерении ошибки читал тут в ветке Алгоритмы и дизайн робота для езды по линии. Там Ruslan предлагал формулу расчета ошибки, которую щас думаю как применить. У кого каие есть предложения?

Radist как вы реализовывали это дело?
Аватара пользователя
Skyer
 
Сообщения: 24
Зарегистрирован: 13 окт 2011, 09:32
Откуда: Ханты-Мансийск
прог. языки: AVR asembler, Delphi, C++, Php

Re: Skyer's PID Linetracer

Сообщение Radist » 13 фев 2012, 09:37

Значит задача такая: узнать от датчиков, где находится центр робота относительно центра линии (шириной 20 мм). Пляшем от датчиков (чаще всего это отражательные оптроны). Есть два способа их использования: в цифровом и аналоговом режиме. Для цифрового режима характерно использование компараторов и подстроечных резисторов (для подстройки датчиков), сигнал выходит черное/белое. Соответственно таких датчиков должно быть много, расположенных с определенным шагом (шаг 10 мм дает разрешение 5 мм). 5 датчиков дадут рабочий диапазон +-20 мм от центра. Хорошо это или плохо? Робот должен ехать по линии, срезать неспортивно (хотя ненадолго покидать линию можно), а значит много датчиков не надо, но при этом шаг отклонения будет большим, что сведет на нет все преимущества ПД регулятора. Гораздо интереснее аналоговые датчики, их и рассмотрим. Там уже не нужны компараторы и подстроечники, но нужен АЦП с несколькими входами. И АЦП должен работать достаточно быстро, поэтому не увлекайтесь с числом датчиков. В аналоговом режиме число датчиков может быть от одного и выше. Если датчик один, то он настраивается на границу линии. Половина пятна темная, половина светлая, код ацп примерно равен половине диапазона. Смещаемся - код ползет. Тут разрешение гораздо выше, нужно только успевать измерять АЦП и не терять линию. А потерять ее легко: сначала перескакиваем на другой край линии, а затем сходим с ума. Поэтому гораздо круче два аналоговых датчика, смотрящие на края линии. Результатом отклонения будет разность показаний - если ноль - мы четко по центру линии. Тут перескоков можно не бояться. Этого количества датчиков уже достаточно для нормального гонщика. Но можно поставить и больше, и подальше от пола. Тогда с каждого датчика придет свой аналоговый сигнал, совокупность которых можно интерпретировать как кадр положения линии. Эту информацию можно математически обработать (гуглим по словам "средневзвешенное, центр масс" или что-то такое), короче получить "субпиксельное разрешение", не забыв при этом отрезать шумы. Ну вот, информация от датчиков получена, осталось перевести ее в отклонение. Это легко, если знать где физически находятся датчики. Вот как-то так...
Аватара пользователя
Radist
 
Сообщения: 2254
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

Re: Skyer's PID Linetracer

Сообщение Skyer » 13 фев 2012, 10:31

У меня 7 датчиков (может лучше будет оставить 5). Датчики опрашиваются посредством АЦП. Кстати проблема с нулевым каналом как показали многократные измерения заключается в самом АЦП. Поэтому встает вопрос о правильной калибровке датчиков. Думаю реализовать это проводя например 10 замеров и беря среднее значение за калибровочное, которое потом будет вычитаться из показаний. В ближайшее время реализую калибровку и расчет ошибки по формуле где в числителе сумма произведений номера канала и показания канала. А в знаменателе сумма показаний всех каналов. Таким образом разброс ошибки должен быть от 3.5 до 4.5 (идеальный случай).

В аттаче лежит видео теста с релейным алгоритмом.
Вложения
Test.rar
(3.51 МиБ) Скачиваний: 0
Аватара пользователя
Skyer
 
Сообщения: 24
Зарегистрирован: 13 окт 2011, 09:32
Откуда: Ханты-Мансийск
прог. языки: AVR asembler, Delphi, C++, Php

Re: Skyer's PID Linetracer

Сообщение Radist » 13 фев 2012, 12:14

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

Re: Skyer's PID Linetracer

Сообщение Michael_K » 13 фев 2012, 13:46

Ну будет центр немножко сдвинут (в пределах зоны чувствительности одного датчика) - ну и ничего страшного.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: Skyer's PID Linetracer

Сообщение Skyer » 25 фев 2012, 13:01

Реализовал примитивный П-регулятор. Для уменьшения влияния помех каждый датчик опрашивается 16 раз и потом показания усредняются. Написал все это еще дней 10 назад, но все руки не доходили отписаться. Также разобрался с дальномером, его думаю использовать для объезда препятствий типа кирпича на трассе. Выкладываю фотки робота и код (П-регулятор, опрос датчиков, шим, работа с дальномером HC-SR04). Код для дальномера выдает результат в ММ. Измерения показали что сам дальномер по показаниям плавает см на 1-2. Сейчас думаю потестить робота на трассе, которую выкладывал Ruslan (до этого ее заменяла изолента на столе).

Фотки делал на телефон, поэтому качество не очень.. :)
Вложения
LFR.pdf
Схемы
(157.43 КиБ) Скачиваний: 0
Files.zip
Код
(13.24 КиБ) Скачиваний: 0
25022012133.jpg
25022012131.jpg
Аватара пользователя
Skyer
 
Сообщения: 24
Зарегистрирован: 13 окт 2011, 09:32
Откуда: Ханты-Мансийск
прог. языки: AVR asembler, Delphi, C++, Php

Re: Skyer's PID Linetracer

Сообщение Skyer » 07 мар 2012, 14:51

Странно.. за две недели ни одного скачивания.. неужели тема потеряла актуальность
Аватара пользователя
Skyer
 
Сообщения: 24
Зарегистрирован: 13 окт 2011, 09:32
Откуда: Ханты-Мансийск
прог. языки: AVR asembler, Delphi, C++, Php

Re: Skyer's PID Linetracer

Сообщение Michael_K » 07 мар 2012, 17:34

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

Re: Skyer's PID Linetracer

Сообщение Skyer » 03 май 2012, 10:49

Реализовал нормальный П-алгоритм (в предыдущем были ошибки). Вообще реализовал его еще в середине марта, но руки дошли написать только щас. Также переделал платформу робота. Прикрутил туда Bluetooth HC-05 и дальномер HC-SR04. Дополнительно накидал на плату кучу мелочи, поэтому эта же плата у меня теперь и как отладочная для AVR-ок. Фотографии выложил на сайте. Щас допиливаю процедуру отладки.

Как можно определять прохождение круга автоматически? Есть идея, если в начале круга сделать прерывистую линию, то можно обрабатывать данную ситуацию датчиками. Хочу реализовать автоматическую настройку П-регулятора.
Аватара пользователя
Skyer
 
Сообщения: 24
Зарегистрирован: 13 окт 2011, 09:32
Откуда: Ханты-Мансийск
прог. языки: AVR asembler, Delphi, C++, Php

Re: Skyer's PID Linetracer

Сообщение Radist » 05 май 2012, 13:03

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

Re: Skyer's PID Linetracer

Сообщение Skyer » 11 май 2012, 00:28

Radist, спасибо, я тоже к этому склонялся (просто думал может кто по-другому делает). А что насчет настройки? Как я понял по вашим сообщениям П-регулятор получилось автоматизировать, а ПД-нет? Не совсем понял мат. обоснование этого. Я планирую сделать так: увеличиваем P-коэфф. и смотрим среднюю за круг ошибку, если она уменьшилась, то продолжаем увеличивать коэфф., иначе уменьшаем к предыдущему. Вроде просто, но в чем может быть подвох?
Аватара пользователя
Skyer
 
Сообщения: 24
Зарегистрирован: 13 окт 2011, 09:32
Откуда: Ханты-Мансийск
прог. языки: AVR asembler, Delphi, C++, Php

Re: Skyer's PID Linetracer

Сообщение Radist » 11 май 2012, 08:32

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

Re: Skyer's PID Linetracer

Сообщение Skyer » 11 май 2012, 22:27

Radist, я тут накопал на Robofreak.ru перевод инструкции по настройке регулятора. Там по сути то же самое. Возникает два вопроса:
1 Стоит ли делать интегральную составляющую? В основном читал что толку от нее нет.
2 Сегодня после кучи прогонов задумался над оптимальным расстоянием между колесами (передним и задними). Так как при текущих параметрах, робот проезжает трассу, которую выложил Ruslan, с ошибками. Хотя сегодня удалось настроить его так, что он без схода с трассы проезжал кругов 5-10. Теперь думаю туда прикручу дифф. составляющую и буду смотреть. Если будет печально, то может придется подрезать робота.

Расстояние между колесами можно прикинуть на фотках. Думаю в скором времени обновить первый пост.
Аватара пользователя
Skyer
 
Сообщения: 24
Зарегистрирован: 13 окт 2011, 09:32
Откуда: Ханты-Мансийск
прог. языки: AVR asembler, Delphi, C++, Php

Re: Skyer's PID Linetracer

Сообщение Radist » 12 май 2012, 03:58

Переведенный алгоритм имеет еще одно название - "метод научного тыка". Вот только науки в нем маловато. Интегральная составляющая в лайнтрейсере не нужна, объясняю почему. Интегральная составляющая - медленно меняющийся параметр, она накапливает ошибку с учетом знака. Хороший робот трассу проезжает очень быстро. А ведь чтоб вернуться на трассу - надо сперва избавиться от того, что накопил. Так что "И" только увеличит болтанку. "И" составляющая нужна в системах с потерями, а у нас система без потерь. А вот что касается расстояния между колесами... Я бы сказал, что важно не расстояние между передними и задними колесами, а расстояние между ведущими колесами и линейкой датчиков. Малое расстояние + большая скорость - робот не успевает реагировать на поворот. Большое расстояние позволяет лучше держать трассу (на маленькой скорости робот "носом" едет по трассе, а зад на поворотах заносит, на средней скорости центр робота держит трассу, а перед и зад на поворотах заносит, на большой скорости зад робота держится на трассе, а перед сильно виляет). Поэтому большому роботу легче жить на трассе. Поэтому чем меньше робот при равных скоростях - тем круче его создатель :) .

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

Re: Skyer's PID Linetracer

Сообщение Skyer » 19 май 2012, 18:26

Radist, у меня расстояние от ведущих колес до передней опоры - 14 см, а до датчиков - 17. Щас при введени диф. составляющей робот ездит намного лучше, иногда вылетает, но я думаю это вылечится донастройкой. Будет ли робот лучше ездить при меньшем расстоянии? Рассматриваю возможность обрезки задней части (где сейчас батарея) и перемещения ведущих колес на 4-5 см вперед
Аватара пользователя
Skyer
 
Сообщения: 24
Зарегистрирован: 13 окт 2011, 09:32
Откуда: Ханты-Мансийск
прог. языки: AVR asembler, Delphi, C++, Php

Пред.След.

Вернуться в Line Tracer

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

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