Технический форум по робототехнике.
Skyer » 12 фев 2012, 16:44
Собрал плату. Робот пока ездит на релейном алгоритме, криво конечно пока. Возникает вопрос как реализовать теперь ПИД? Сам алгоритм я понимаю, но вот как измерить уровень ошибки и как определить бозовое значение ШИМ - это не совсем понятно. Об измерении ошибки читал тут в ветке Алгоритмы и дизайн робота для езды по линии. Там Ruslan предлагал формулу расчета ошибки, которую щас думаю как применить. У кого каие есть предложения?
Radist как вы реализовывали это дело?
Radist » 13 фев 2012, 09:37
Значит задача такая: узнать от датчиков, где находится центр робота относительно центра линии (шириной 20 мм). Пляшем от датчиков (чаще всего это отражательные оптроны). Есть два способа их использования: в цифровом и аналоговом режиме. Для цифрового режима характерно использование компараторов и подстроечных резисторов (для подстройки датчиков), сигнал выходит черное/белое. Соответственно таких датчиков должно быть много, расположенных с определенным шагом (шаг 10 мм дает разрешение 5 мм). 5 датчиков дадут рабочий диапазон +-20 мм от центра. Хорошо это или плохо? Робот должен ехать по линии, срезать неспортивно (хотя ненадолго покидать линию можно), а значит много датчиков не надо, но при этом шаг отклонения будет большим, что сведет на нет все преимущества ПД регулятора. Гораздо интереснее аналоговые датчики, их и рассмотрим. Там уже не нужны компараторы и подстроечники, но нужен АЦП с несколькими входами. И АЦП должен работать достаточно быстро, поэтому не увлекайтесь с числом датчиков. В аналоговом режиме число датчиков может быть от одного и выше. Если датчик один, то он настраивается на границу линии. Половина пятна темная, половина светлая, код ацп примерно равен половине диапазона. Смещаемся - код ползет. Тут разрешение гораздо выше, нужно только успевать измерять АЦП и не терять линию. А потерять ее легко: сначала перескакиваем на другой край линии, а затем сходим с ума. Поэтому гораздо круче два аналоговых датчика, смотрящие на края линии. Результатом отклонения будет разность показаний - если ноль - мы четко по центру линии. Тут перескоков можно не бояться. Этого количества датчиков уже достаточно для нормального гонщика. Но можно поставить и больше, и подальше от пола. Тогда с каждого датчика придет свой аналоговый сигнал, совокупность которых можно интерпретировать как кадр положения линии. Эту информацию можно математически обработать (гуглим по словам "средневзвешенное, центр масс" или что-то такое), короче получить "субпиксельное разрешение", не забыв при этом отрезать шумы. Ну вот, информация от датчиков получена, осталось перевести ее в отклонение. Это легко, если знать где физически находятся датчики. Вот как-то так...
Skyer » 13 фев 2012, 10:31
У меня 7 датчиков (может лучше будет оставить 5). Датчики опрашиваются посредством АЦП. Кстати проблема с нулевым каналом как показали многократные измерения заключается в самом АЦП. Поэтому встает вопрос о правильной калибровке датчиков. Думаю реализовать это проводя например 10 замеров и беря среднее значение за калибровочное, которое потом будет вычитаться из показаний. В ближайшее время реализую калибровку и расчет ошибки по формуле где в числителе сумма произведений номера канала и показания канала. А в знаменателе сумма показаний всех каналов. Таким образом разброс ошибки должен быть от 3.5 до 4.5 (идеальный случай).
В аттаче лежит видео теста с релейным алгоритмом.
- Вложения
-
- Test.rar
- (3.51 МиБ) Скачиваний: 0
Radist » 13 фев 2012, 12:14
Если склероз меня не подводит, то один замер делается около 100 мкс. 10 раз да на 5 датчиков - получается 5 мс. Вроде по времени нормально. Если скорость составляет 20 см/с, то проедет за это время 1 мм. Но это если между каналами не вводить никакой задержки, а часто бывает что она нужна. Видео посмотрел - вроде нормально ездит.
Michael_K » 13 фев 2012, 13:46
Ну будет центр немножко сдвинут (в пределах зоны чувствительности одного датчика) - ну и ничего страшного.
Skyer » 07 мар 2012, 14:51
Странно.. за две недели ни одного скачивания.. неужели тема потеряла актуальность
Michael_K » 07 мар 2012, 17:34
Тут счетчики скачиваний тупо не работают. Давно уже.
Skyer » 03 май 2012, 10:49
Реализовал нормальный П-алгоритм (в предыдущем были ошибки). Вообще реализовал его еще в середине марта, но руки дошли написать только щас. Также переделал платформу робота. Прикрутил туда Bluetooth HC-05 и дальномер HC-SR04. Дополнительно накидал на плату кучу мелочи, поэтому эта же плата у меня теперь и как отладочная для AVR-ок. Фотографии выложил на
сайте. Щас допиливаю процедуру отладки.
Как можно определять прохождение круга автоматически? Есть идея, если в начале круга сделать прерывистую линию, то можно обрабатывать данную ситуацию датчиками. Хочу реализовать автоматическую настройку П-регулятора.
Radist » 05 май 2012, 13:03
У меня это была линия поперек трассы старт/финиш. Все датчики показывают "черное" - это она. Она должна быть достаточной ширины (2 см мне хватало).
Skyer » 11 май 2012, 00:28
Radist, спасибо, я тоже к этому склонялся (просто думал может кто по-другому делает). А что насчет настройки? Как я понял по вашим сообщениям П-регулятор получилось автоматизировать, а ПД-нет? Не совсем понял мат. обоснование этого. Я планирую сделать так: увеличиваем P-коэфф. и смотрим среднюю за круг ошибку, если она уменьшилась, то продолжаем увеличивать коэфф., иначе уменьшаем к предыдущему. Вроде просто, но в чем может быть подвох?
Radist » 11 май 2012, 08:32
С П-регулятором все так и есть. Есть график Т(П) время от коэффициента П. Начинаем с такого П, при котором робот не теряет трассу и способен пройти ее полностью. Затем увеличиваем П до тех пор, пока время, поначалу уменьшающееся, не начнет увеличиваться. Так находится оптимум П. А вот дальше - теоретический затык. Я предполагал так: есть функция двух переменных П и Д. То что мы сделали до этого - делали при Д = 0. Пусть П - это ось х, Д - ось у, а Т - ось z. Я предполагал, что в окресностях точки П;0 найдется точка, в которой время будет еще меньше, переходим в эту новую точку и снова проверяем окресности, и так до тех пор, пока не придем в минимум. Я просчитался. Такой точки в окресности локального минимума не было - во всех точках время было больше
. На этом я и застрял. Сможете пройти дальше - будет здорово.
Skyer » 11 май 2012, 22:27
Radist, я тут накопал на Robofreak.ru
перевод инструкции по настройке регулятора. Там по сути то же самое. Возникает два вопроса:
1 Стоит ли делать интегральную составляющую? В основном читал что толку от нее нет.
2 Сегодня после кучи прогонов задумался над оптимальным расстоянием между колесами (передним и задними). Так как при текущих параметрах, робот проезжает трассу, которую выложил Ruslan, с ошибками. Хотя сегодня удалось настроить его так, что он без схода с трассы проезжал кругов 5-10. Теперь думаю туда прикручу дифф. составляющую и буду смотреть. Если будет печально, то может придется подрезать робота.
Расстояние между колесами можно прикинуть на
фотках. Думаю в скором времени обновить первый пост.
Radist » 12 май 2012, 03:58
Переведенный алгоритм имеет еще одно название - "метод научного тыка". Вот только науки в нем маловато. Интегральная составляющая в лайнтрейсере не нужна, объясняю почему. Интегральная составляющая - медленно меняющийся параметр, она накапливает ошибку с учетом знака. Хороший робот трассу проезжает очень быстро. А ведь чтоб вернуться на трассу - надо сперва избавиться от того, что накопил. Так что "И" только увеличит болтанку. "И" составляющая нужна в системах с потерями, а у нас система без потерь. А вот что касается расстояния между колесами... Я бы сказал, что важно не расстояние между передними и задними колесами, а расстояние между ведущими колесами и линейкой датчиков. Малое расстояние + большая скорость - робот не успевает реагировать на поворот. Большое расстояние позволяет лучше держать трассу (на маленькой скорости робот "носом" едет по трассе, а зад на поворотах заносит, на средней скорости центр робота держит трассу, а перед и зад на поворотах заносит, на большой скорости зад робота держится на трассе, а перед сильно виляет). Поэтому большому роботу легче жить на трассе. Поэтому чем меньше робот при равных скоростях - тем круче его создатель
.
ЗЫ. Робот проезжает трассу с ошибками - проблема в настройке регулятора. Еще одна возможная причина - когда колеса не имеют реверса. Тогда для каждой скорости есть минимальный радиус поворота, который может быть больше радиуса трассы. Я сам с таким сталкивался. Так что у хорошего лайнтрейсера должно быть два Н-моста.
Skyer » 19 май 2012, 18:26
Radist, у меня расстояние от ведущих колес до передней опоры - 14 см, а до датчиков - 17. Щас при введени диф. составляющей робот ездит намного лучше, иногда вылетает, но я думаю это вылечится донастройкой. Будет ли робот лучше ездить при меньшем расстоянии? Рассматриваю возможность обрезки задней части (где сейчас батарея) и перемещения ведущих колес на 4-5 см вперед