Алгоритмы и дизайн робота для езды по линии

Re: Алгоритмы и дизайн робота для езды по линии

Сообщение Radist » 20 янв 2011, 10:00

Я тут как критик-скептик. Покажу места, которые мне показались слабыми.

Andrei_SPb писал(а):Собственно, запоминание трассы не отменяет ПД регулятор, а лишь дополняет его. Не нужно пытаться проехать по данным энкодера 1 в 1, как в прошлый раз. Конфигурация трассы в памяти нужна только для того, чтобы знать, где разгоняться, а где тормозить.


Если второй раз мы не едем 1 в 1, то узнать где поворот, а где прямая можно с погрешностью, зависящей от рассогласования первой и второй траектории. Как ее оценить - я не знаю, это все полностью зависит от робота и его регулятора.

Andrei_SPb писал(а):По поводу получения трассы. Я потому и предложил сделать не одну, а две линейки датчиков линии, чтобы иметь возможность чётко определить начало поворота (и даже, может быть, его примерный радиус).


Допустим, обе линейки аналоговые (на дискретных точно ничего не получится), шаг линии 1 мм. Можно теоретически узнать радиус поворота (погрешность будет зависеть от шага и расстояния между линейками). Но как воспользоваться этой информацией? Чтобы робот ехал по дуге - на колеса нужно подать разный шим. Знаем радиус - знаем какой шим на какое колесо. А регулятор? Отключить пока? Так радиус у нас с погрешностью - уведет. Не отключать? Так регулятор сам выставит нужные шимы.

Andrei_SPb писал(а):Если линия на вынесенной вперёд линейке датчиков начала уходить в сторону, а линейка датчиков, расположенная на уровне колёс показывает, что мы продолжаем идти по линии, значит мы имеем поворот линии, а не просто небольшое отклонение робота от траектории.


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

Давайте на минуту представим себя верхом на лайнтрейсере. У нас есть руль и газ/тормоз. Что нам нужно, чтобы максимально быстро пройти трассу? На прямых гнать со всей дури, видеть повороты издалека, успевать снизить скорость настолько, чтобы вписаться в поворот. То есть задача пилота - в нужные моменты ехать с нужной скоростью. Первое, что отсюда вытекает: датчики должны быть вынесены как можно дальше вперед. Нужно знать зависимость скорости при входе в поворот от радиуса поворота - по вашему алгоритму узнать это можно. Вроде бы все в вашем алгоритме хорошо, на первый взгляд, но вот чтобы его реализовать - тут я вижу сплошные подводные камни. На словах все понятно, но если формализовать алгоритм.... Давайте попробуем.

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

Re: Алгоритмы и дизайн робота для езды по линии

Сообщение Ruslan » 20 янв 2011, 15:25

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

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

В части запоминания трассы можно отслеживать средний угол поворота за последние (100) циклов и когда он снижается ниже порога - записывать в памятьначало прямого участка.
Аватара пользователя
Ruslan
 
Сообщения: 603
Зарегистрирован: 03 июн 2007, 22:32
Откуда: Москва
ФИО: Руслан

Re: Алгоритмы и дизайн робота для езды по линии

Сообщение Andrei_SPb » 21 янв 2011, 02:38

Проблем тут, действительно, много и Radist очень хорошо озвучил наиболее существенные из них. Я не готов сейчас дать исчерпывающий ответ на все вопросы, попробую сейчас ответить лишь на некоторые. Однако, уверен, что все перечисленные проблемы имеют решения.
Radist писал(а):Если второй раз мы не едем 1 в 1, то узнать где поворот, а где прямая можно с погрешностью, зависящей от рассогласования первой и второй траектории.

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

Radist писал(а):Допустим, обе линейки аналоговые (на дискретных точно ничего не получится), шаг линии 1 мм. Можно теоретически узнать радиус поворота (погрешность будет зависеть от шага и расстояния между линейками). Но как воспользоваться этой информацией? Чтобы робот ехал по дуге - на колеса нужно подать разный шим. Знаем радиус - знаем какой шим на какое колесо. А регулятор? Отключить пока? Так радиус у нас с погрешностью - уведет. Не отключать? Так регулятор сам выставит нужные шимы.


Радиус поворота, по большому счёту нам не важен. Всё, что нам нужно - знать место начала поворота, чтобы успеть своевременно затормозить перед ним. Регулятор же, работает всё время - всю трассу мы проходим опираясь только на него. Конфигурацию трассы (места начала и конца поворотов) мы используем только для управления скоростью, чтобы знать, где разгоняться, а где тормозить.

Radist писал(а):Я могу поставить робота на прямом отрезке так, что на одной линейке он будет по центру, а на другой - нет. Скажете такая ситуация не возможна? А когда робот выходит из поворота на прямую - у него есть небольшие перелеты - а ваш робот подумает, что это начало поворотов. То есть первый круг робот должен практически проползти, чтобы не было в его памяти ложных поворотов. Наверное стоит ввести еще критерий прямой линии, чтобы кучу малых радиусов считать прямой.

Да, это, на мой взгляд самая существенная проблема - однозначно отличить по чему мы едем, по линии или по дуге. Об этом стоит подумать. Очень интересные предложения высказал RiO в предыдущем посте.
Radist писал(а):То есть первый круг робот должен практически проползти, чтобы не было в его памяти ложных поворотов.

Да, именно так, ведь основная цель на первом круге - записать трассу.
RiO писал(а):простейший алгоритм - запоминать начало и длину прямого участка по энкодерам

Да, это как раз то, что я и предлагаю. Использование компаса - очень интересная и оригинальная мысль. Вопрос ещё в том, как компас будет себя вести в условиях электромагнитных помех от двигателя(ей).

Подводя итог, ещё раз хочу сформулировать основную мысль, которую хотел донести: запомненная трасса в памяти робота используется исключительно для управления скоростью движения робота, следование по трассе происходит целиком и полностью за счёт регулятора.
Аватара пользователя
Andrei_SPb
 
Сообщения: 45
Зарегистрирован: 27 дек 2010, 02:50
Откуда: Санкт-Петербург

Re: Алгоритмы и дизайн робота для езды по линии

Сообщение Radist » 21 янв 2011, 07:46

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

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

Компас тоже использовать бы не хотелось по нескольким причинам. Сразу скажу - с компасами не работал, так что могу ошибаться.
- компас удоражает робота примерно на тыщу, его неудобно паять, приходится брать с платкой;
- получение данных с компаса занимает время (правда не знаю какое);
- если электронный компас ведет себя так же как обычный, то возможно на него будут влиять собственные помехи, а также помехи окружения.

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

Re: Алгоритмы и дизайн робота для езды по линии

Сообщение Andrei_SPb » 22 янв 2011, 03:44

Ну всё, готовимся к существенному снижению времени круга у всех роботов на следующих соревнованиях :)
Аватара пользователя
Andrei_SPb
 
Сообщения: 45
Зарегистрирован: 27 дек 2010, 02:50
Откуда: Санкт-Петербург

Re: Алгоритмы и дизайн робота для езды по линии

Сообщение boez » 29 янв 2011, 19:37

Здесь же на форуме было видео машинки, запоминающей трассу. Скорость отличалась раз в 5 между первым и вторым проходами. Вот токо я фиг найду щас этот ролик...
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: Алгоритмы и дизайн робота для езды по линии

Сообщение Michael_K » 29 янв 2011, 20:31

Andrei_SPb писал(а):Ну всё, готовимся к существенному снижению времени круга у всех роботов на следующих соревнованиях :)

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

Re: Алгоритмы и дизайн робота для езды по линии

Сообщение Andrei_SPb » 30 янв 2011, 05:33

Да, я видел ролики в интернете, и в быстроте роботов RiO не сомневаюсь. Но, всё же, думаю, на трассе подобной трассе Политехнического музея, робот "с памятью" способен выиграть 1-2 секунды у самого лучшего робота без таковой. Как увеличить скорость на поворотах приемлимыми средствами, не выходя за рамки здравого смысла, не вижу, но некоторый запас по времени, вероятно, ещё можно извлечь из прямых. Думаю, бесколлекторный двигатель на несколько сотен Ватт и Li-Po аккумулятор решат проблему мощности и скорости и обеспечат необходимую динамику разгона роботу. Всё будет упираться только в силу сцепления колёс с поверхностью. Откалибровать темп разгона (чтобы не было пробуксовки) под конкретную поверхность может помочь дополнительное свободновращающееся колесо с энкодером. В общем-то, робот может произвести подобную калибровку автоматически: поставил робота на поверхность, робот попробовал разгоняться с разным темпом - и выбрал наилучший вариант без пробуксовки. Сравнение показаний двух энкодеров позволит определить пробуксовку.

На последних соревнованиях в Москве результаты ощутимо выросли по сравнению с прошлогодними. Видео с соревнований, к сожалению, пока нигде не видел, интересно было бы посмотреть. Думаю, по крайней мере, в России роботов с запоминанием трассы и мощным двигателем пока нет. Поэтому, считаю, что время можно ещё улучшить.
Аватара пользователя
Andrei_SPb
 
Сообщения: 45
Зарегистрирован: 27 дек 2010, 02:50
Откуда: Санкт-Петербург

Re: Алгоритмы и дизайн робота для езды по линии

Сообщение Ruslan » 03 фев 2011, 16:29

Согласен с Андреем, потенциал для роста скорости ещё есть.
В дополнение к его списку резервов предложу:
- оптимизация параметров ПИД
- вакуум для повышение силы прижатия
- выбор материала колёс,
- чистота поверхности трассы для повышения сцепления
- видеокамера для раннего обнаружения поворотов.
Аватара пользователя
Ruslan
 
Сообщения: 603
Зарегистрирован: 03 июн 2007, 22:32
Откуда: Москва
ФИО: Руслан

Re: Алгоритмы и дизайн робота для езды по линии

Сообщение Кита » 26 апр 2012, 15:14

Подскажите, как датчик линии лучше использовать, и алгоритм. Где можно посмотреть пример ПИД регулятора для езды по линии?
Кита
 
Сообщения: 92
Зарегистрирован: 26 апр 2012, 15:07

Re: Алгоритмы и дизайн робота для езды по линии

Сообщение Кита » 27 апр 2012, 18:28

Ну кто направит в нужное русло то? Что именно сейчас применяется. Какое железо, алгоритм. Поискал в интернете, все статьи старые и не полные
Кита
 
Сообщения: 92
Зарегистрирован: 26 апр 2012, 15:07

Re: Алгоритмы и дизайн робота для езды по линии

Сообщение Кита » 28 апр 2012, 18:30

Схема и ПП QTR-8A Reflectance Sensor Array есть у кого нить? Или похожее что то
Кита
 
Сообщения: 92
Зарегистрирован: 26 апр 2012, 15:07

Re: Алгоритмы и дизайн робота для езды по линии

Сообщение =DeaD= » 28 апр 2012, 22:16

Вроде у пололу выложены?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Алгоритмы и дизайн робота для езды по линии

Сообщение Кита » 28 апр 2012, 23:21

Платы не нашел там
А еще там используются в качестве светодиода/фототранзистора QRE1113GR. Его можно заменить на чт-нибудь другое?
И в чем отличие Вашего датчика линии от пололушного?
Кита
 
Сообщения: 92
Зарегистрирован: 26 апр 2012, 15:07

Re: Алгоритмы и дизайн робота для езды по линии

Сообщение =DeaD= » 28 апр 2012, 23:38

У меня KTIR0721ds вроде, ну или из этой линейки. Платы развести не проблема вроде для такой простой задачи?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Пред.След.

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

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

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

cron