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

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

Сообщение ALHIMIK » 16 фев 2009, 23:09

Вопрос к строителям лайнтрейсеров
Хочу построить лайнтрейсера-бим идея токава-
ИК светики кпитанию через резюк
фототранзистор подключены ко входу кампоратора
выход компаратора на элимент НЕ
к ин1 и ин2 лдшки подключается выход компаратора и инвертированный сигнал
Понимаю что это будет ездить :)
Сам вопрос - сможет ли он пройти трасу соревнований(которые OFFline)
PS
лайнтрейсера делаю в первые
Аватара пользователя
ALHIMIK
 
Сообщения: 997
Зарегистрирован: 05 окт 2008, 14:41
Откуда: СПб
прог. языки: C,Python

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

Сообщение Ruslan » 17 фев 2009, 03:07

ALHIMIK писал(а):Сам вопрос - сможет ли он пройти трасу соревнований(которые OFFline)

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

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

Сообщение =DeaD= » 17 фев 2009, 09:51

А я тут на днях собрал бима на ошмётках от платы GATE-A8D8M2 - там как раз площадка под L293D была, разъемы аккума, движков, только датчики линии припаял и всё, так вот не проходит он линию, где она под углом сворачивает :( слишком инертные редукторы TAMIYA сдвоенные, пока они выключаются, чтобы повернуться - робот уже пролетает линию.

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

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

Сообщение Ruslan » 17 фев 2009, 10:18

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

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

Сообщение =DeaD= » 17 фев 2009, 10:51

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

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

Сообщение sergy1976 » 10 мар 2010, 17:47

Коллеги!
Подскажите по поводу алгоритмов для трэйсера. Если увеличивается кол-во датчиков, то простой алгоритм перебора комбинаций уже не подойдет. Например, 6 датчиков, то теоретически комбинаций сигналов 2 в 6. Это уже много. :shock: Конечно, не все комбинации использовать (есть запрещенные), но все равно их слишком. В старом варианте с 4-мя датчиками, конструкция switch работала отлично.
Может в начале сравнивать значение сенсоров с определённым числом. Если, напр. = 110011, 111011, 110111, то движение вперед (активный уровень на линии лог.0). Если больше 000001, но меньше 101111, то значит линия уходит и нужно поворачивать влево. Здесь появляются грабли. Крутизна поворота получится одна для всех (нафих тогда столько датчиков). Второй баг, нет правильной реакции на запрещенные комбинации (напр, сработали крайние датчики, для непрерывной линии такое очень маловероятно, кроме натыкания на дугу).
Help!
sergy1976
 
Сообщения: 27
Зарегистрирован: 13 ноя 2009, 18:12
Откуда: Ярославль

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

Сообщение Ruslan » 10 мар 2010, 20:00

Советую вычислять позицию по формуле:

LaTeX: pos = \frac{d_1 \cdot 1000 + d_2 \cdot 2000 + d_3 \cdot 3000 + \ldots}{d_1 + d_2 + d_3 + \ldots} = \frac{\sum_{i=1}^n 1000 i d_i}{\sum_{i=1}^n d_i}
где d1,2,3 = показания соответствующего сенсора.
После этого применяем ПИД.
Последний раз редактировалось Vooon 10 мар 2010, 21:21, всего редактировалось 1 раз.
Причина: tex :)
Аватара пользователя
Ruslan
 
Сообщения: 603
Зарегистрирован: 03 июн 2007, 22:32
Откуда: Москва
ФИО: Руслан

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

Сообщение sergy1976 » 10 мар 2010, 21:06

RiO, не совсем въехал в формулу. Речь идет о логических уровнях или об абсолютных значениях (напр, складываем две единцы в логике, это опять "1", или 1+1=2)? Показания сенсоров могут быть "0" или "1". В числителе получим какое-то число, а если в знаменателе все нули, то как делить на ноль? :crazy:
sergy1976
 
Сообщения: 27
Зарегистрирован: 13 ноя 2009, 18:12
Откуда: Ярославль

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

Сообщение Michael_K » 10 мар 2010, 21:30

По формуле - абсолютные значения.
Чем больше, тем более "датчик над линией"
Могут быть дискретные или аналоговые - пофиг.
Если в знаменателе ноль, то и в числителе, очевидно ноль.
Это будет означать, что "истина линия где-то рядом"
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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

Сообщение Ruslan » 10 мар 2010, 22:38

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

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

Сообщение =DeaD= » 10 мар 2010, 22:41

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

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

Сообщение sergy1976 » 11 мар 2010, 10:27

Спасибо, "буду подумать"
sergy1976
 
Сообщения: 27
Зарегистрирован: 13 ноя 2009, 18:12
Откуда: Ярославль

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

Сообщение Andrei_SPb » 19 янв 2011, 00:41

Позволю себе поделиться с уважаемым сообществом некоторыми соображениями по поводу алгоритма лайнтрейсера. Почему бы не закладывать в робота конфигурацию трассы заранее? Правилами, ведь, это не запрещено? Или, если угодно, так: на соревнованиях на прохождение трассы дается две попытки; первую проезжаем медленно и аккуратно, записывая конфигурацию трассы в память. Пишем по данным энкодера в следующем виде - прямая, протяжённость x; дуга, радиус r, протяжённость x; прямая, протяжённость x... и так далее. Во второй попытке используем полученную информацию, т.е. держаться за линию продолжаем датчиками линии, но робот уже будет знать, где он находится. Это даёт возможность ускоряться на прямых и тормозить перед поворотами. И другая идея - поставить не одну линию датчиков, а две: одну на уровне колёс, другую - вынесенную вперёд. Это позволит роботу определять крутизну (радиус) поворота, что даст возможность реагировать на изгибы трассы с некоторым упреждением.
Аватара пользователя
Andrei_SPb
 
Сообщения: 45
Зарегистрирован: 27 дек 2010, 02:50
Откуда: Санкт-Петербург

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

Сообщение Radist » 19 янв 2011, 05:12

Идея не нова, на робофоруме уже встречалась. То, что вы предлагаете, сделать теоретически можно. Представим, что трасса в голове робота уже есть (полученная как вы описали - к этому мы еще вернемся). Весь вопрос в том, как этими данными воспользоваться. Вот вы говорите: на прямых ехать быстро. Моторы робота не абсолютно идентичны, будет увод, его надо компенсировать, нет гарантии, что на очень большой скорости это удастся. Скоро поворот - максимальная скорость снижается. А за какое время она снизится? Нужно знать динамические характеристики робота. Некоторые делали так: каждое отклонение от линии соответствует своему разбалансу скоростей моторов. Практика показала, что такой метод проигрывает ПД регулированию.
Теперь насчет получения линии. Чтобы проехать первый круг - уже нужен какой-то регулятор, причем желательно именно тот, который будет работать на высоких скоростях. Допустим пишем в память примерно так: едем ровно столько то импульсов энкодера, вот отклонение на 1, при нем проехали столько то, при таком отклонении проехали столько то. Мне кажется, что когда поедем второй раз - путь будет уже другим: будут и заносы, и небольшие вылеты с трассы. Все данные рассинхронозируются.
Может быть я ошибаюсь, но мне кажется, что лучше ПД регулятора для лайнтрейса ничего не придумать. Но я вас не отговариваю, опыт - критерий истины. Попробуйте ваш алгоритм, а потом ПД регулятор (настроенный, конечно). А результаты опыта - сюда. Вот и узнаем, кто прав :)
Аватара пользователя
Radist
 
Сообщения: 2253
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

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

Сообщение Andrei_SPb » 19 янв 2011, 22:36

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

Пред.След.

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

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

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