Ну чтож .. все равно, всем спасибо. Завтра наступает время "Ч" проверки всех попыток разогнать тележку. Сегодняшний, "тренировочный день" прошел с "переменным успехом". Наше узкое место - датчики. Не думаю, что его допустят к старту "с отверткой в руках" для подстройки датчиков, но периодически они таки работают достаточно устойчиво .. бум надеятся на "авось" .. сваять самопал, как у остальных - нет ни деталек ни времени. ;)
А никак. Первое выступление, по графику перед началом соревнований было 1.5 часа тренировок. Первое что у нас случилось - это оторвался проводок от сигнала trig HCSR-04, подсказал ему зачистить проводок и воткнуть в разъем Ардуинки и зажать там разъемом из которого проводок оторвался. Получилось. Потом он очень долго настраивал датчики линии .. поставили FC-51 (KY-032), который с одним резистором регулировки .. промучался минут 20 или с полчаса, но так и не смог толком их настроить, посоветовал ему их заменить .. но тут они внезапно у него поехали. Ну и пока он оббегал пару стоящих у стола ребятишек, датчик глукнул и тележка покатилась со стола .. ребятишки, вместо того чтобы поймать робота (инструктировали всех перед началом, что столы без бордюров, надо ловить каждого) .. они взяли и отошли дав роботу свалиться со стола прямо у меня на глазах. Ребенок в этот момент как раз был за их спинами. Благо дело, что сборка из Лего деталек .. он его пересобрал, но тележка стала двигаться по трассе "рывками" и он обнаружил что один из моторов "прокручивается" .. сам мотор работает, а колесо может и не крутится .. в присутствии судьи показал мне, я посмотрел и решил что при падении сломал зуб в шестеренке редуктора, вот и дергается на трассе и прокручивается.
В результате, снялись с соревнований, даже не успев поучаствовать. Я расстроился похоже даже больше ребенка.
По приезду домой, обнаружилось что при пересборке робота он третье колесо (оставили трехколесный вариант, вариант с рулевыми передними колесами плохо проходил крутые повороты) с опоным шарикомпоставил впопыхах "задом наперед" и похоже что потерял доп. крепежную детальку .. её так и не нашли потом. Ну и .. в результате, опорный шарик "болтался" и цеплял своим креплением за трассу, от этого и дергалась тележка. Вполне можно было заменить и переставить (было чем и как), но .. реденок просто растерялся в той толчее что там творилась. Ну а с редуктором тоже оказалось все нормально в итоге. Просто он, дабы перестраховаться выкрутил скорость моторов до минимальной, вот они и стали "прокручивать" .. на самом деле мотор останавливался при удержании колеса рукой, а ШИМ на 122гц (1/256) издавал рык .. ну очень похожий на "мотор работает" создавалась полная иллюзия что мотор крутится, а редуктор проскальзывает .. в полевых условиях, разглядеть на собранной тележке крутится ли мотор на самом деле - было ну никак. А вот когда его сняли .. тут-то все и выяснилось.
В общем, наши замеры показывали, что на реальной трассе тележка была вполне способна развивать скорость по прямой до 75см/сек и успевала тормозить перед поворотами .. средняя скорость прохождения трассы у нас была зафиксена в районе 38-45см/сек, что было примерно втрое выше всех конкурентов, кроме одного. Там была похожая средняя скорость и шел он гораздо равномернее по трассе, практически без разгонов/торможений .. но на тренировке периодически терял линию. Но у него стояли пиковские датчики линии и работали куда как кучерявее наших. У остальных были исключительно самоделки.
А вот "насколько" и кто был из нас лучше в реальности и прошел таки этот конкурент всю трассу .. увы мы уже не узнали. Дома же, как назло, датчики настроились на раз-два и всю домашнюю трассу тележка проехала на 9.5сек. (у нас поле примерно в 2 раза меньше по габаритам, соответственно все повороты - круче).. обидно.
Как вывод: датчики линии на базе TSOP приборов - фигня полная. Простой ИК-светодиод + ИК приемник и аналоговый вход Ардуино .. это всё что надо. Была мысль спаять .. но когда кинулся, оказалось что у нас только 1 ИК-приемник.
Поскольку отборочный тур мы не прошли, и соответственно на следующий этап скорее всего уже не попадаем (да, и рановато ещё ему), то выкладываю алгоритм того, что позволяло нам на тренировочных заездах проходить круг за 19-21сек. (лучший результат оказался 30.7сек):
Принят был модифицированный конечный автомат, с учетом того что цикл анализа и принятия решений на моей либе выполняется примерно за 0.5мсек, и соответственно на предельной скорости в 75см/сек тележка могла даже в перпендикулярном направлении отработать не менее 25 циклов контроля трассы при 100% эффективности датчиков.
Эффективность датчиков была загрублена до 50%, и стат. наработка показаний для усреднения делалась в 2 приема по 10 замеров. Что позволило уверенно принимать трассу на тренировочных заездах даже на "вытертой" линии. При условии настройки датчиков на стабильную работу.
Автомат имет 3 главных состояния: "прямо", "налево" и "направо". Каждое из состояний имеет свои модификации от текущей ситуации (аналог предсказателя переходов в конвеерных ЦПУ):
"вперед": пропускаем первые два состояния как преждевременные.
а) если это третье, то проверяем разницу скоростей моторов и плавно выравниваем ШИМ на моторах к среднему состоянию. За 3-5 проходов.
б) если более третьего: до этого ехали вперед, то пробуем увеличивать скорость движения. Медленно и по чуть-чуть, учитывая высокую скорость обработки данных. Получалось что разгон от мин. до макс. занимает около 1.5сек.
"влево","вправо": считаем текущую сумму скоростей моторов (ШИМ).
Первый сигнал к повороту:
а) Если скорость мала (меньше заданного порога), то пытаемся изменить ШИМ на моторах на небольшую величину. Вариант "съезжания" с трассы по выходу из поворотов. Выставляем небольшую паузу для следующего анализа поворота на исполнение команды моторами;
б) Если скорость высока (выше второго порога), то "тормозим лаптей с заносом" - останавливаем свой мотор (влево - левый) И одновременно сильно понижаем скорость второго мотора. Пауза на исполнение максимальна. Это основная реакция на входе в повороты;
в) Если скорость средняя, то как и в п."а" изменяем ШИМ моторов, но с общим и существенным понижением скорости обоих моторов. Компенсация кривизны поворота с текущей скоростью движения. Пауза для исполнения след. команды - средняя. Часто сюда попадаем на плавном кривом участке, где надо периодически корректировать направление движения.
Повторный сигнал к повороту (через заданную паузу):
г) Принудительно устанавливаем ШИМ моторов в режим "типового" поворота: внутренний мотор остановлен, внешний определяет радиус типового поворота (чуть меньше самого крутого поворота трассы). Далее - типовая и небольшая пауза.
д) Последующие довороты: плавный разгон внешнего двигателя для уверенного поворота внутрь трассы.
последовательность работы на стартовой "почти" прямой: "как ровно поставишь, так и поедет".. быстрый разгон до макс. скорости с корректировками .. визуально тележка плавно заворачивает согласно кривизне трассы выдерживая оч. высокую скорость.
вход в поворот большого радиуса: быстрый останов внутр. колеса на очень короткое время с небольшим заносом заднего шарового колеса, после чего постоянное движение на внутреннем датчике, ибо срабатывает или "поворот" или "прямо" но практически незаметно глазом.
выход из поворота: быстрое выравнивание на трассе с набором скорости.
вход в крутой поворот согласно трассе происходил после небольшого поворота в обратную сторону .. никаких проблем, разворачиваемся на внутр. колесе.
выход из крутого поворота шел на прямую .. думаю понятно. :)
Собственно класс алгоритма относится к конечным автоматам с памятью..
Ну чтож .. все равно, всем спасибо. Завтра наступает время "Ч" проверки всех попыток разогнать тележку. Сегодняшний, "тренировочный день" прошел с "переменным успехом". Наше узкое место - датчики. Не думаю, что его допустят к старту "с отверткой в руках" для подстройки датчиков, но периодически они таки работают достаточно устойчиво .. бум надеятся на "авось" .. сваять самопал, как у остальных - нет ни деталек ни времени. ;)
Удачи! :))
Как успехи?
А никак. Первое выступление, по графику перед началом соревнований было 1.5 часа тренировок. Первое что у нас случилось - это оторвался проводок от сигнала trig HCSR-04, подсказал ему зачистить проводок и воткнуть в разъем Ардуинки и зажать там разъемом из которого проводок оторвался. Получилось. Потом он очень долго настраивал датчики линии .. поставили FC-51 (KY-032), который с одним резистором регулировки .. промучался минут 20 или с полчаса, но так и не смог толком их настроить, посоветовал ему их заменить .. но тут они внезапно у него поехали. Ну и пока он оббегал пару стоящих у стола ребятишек, датчик глукнул и тележка покатилась со стола .. ребятишки, вместо того чтобы поймать робота (инструктировали всех перед началом, что столы без бордюров, надо ловить каждого) .. они взяли и отошли дав роботу свалиться со стола прямо у меня на глазах. Ребенок в этот момент как раз был за их спинами. Благо дело, что сборка из Лего деталек .. он его пересобрал, но тележка стала двигаться по трассе "рывками" и он обнаружил что один из моторов "прокручивается" .. сам мотор работает, а колесо может и не крутится .. в присутствии судьи показал мне, я посмотрел и решил что при падении сломал зуб в шестеренке редуктора, вот и дергается на трассе и прокручивается.
В результате, снялись с соревнований, даже не успев поучаствовать. Я расстроился похоже даже больше ребенка.
По приезду домой, обнаружилось что при пересборке робота он третье колесо (оставили трехколесный вариант, вариант с рулевыми передними колесами плохо проходил крутые повороты) с опоным шарикомпоставил впопыхах "задом наперед" и похоже что потерял доп. крепежную детальку .. её так и не нашли потом. Ну и .. в результате, опорный шарик "болтался" и цеплял своим креплением за трассу, от этого и дергалась тележка. Вполне можно было заменить и переставить (было чем и как), но .. реденок просто растерялся в той толчее что там творилась. Ну а с редуктором тоже оказалось все нормально в итоге. Просто он, дабы перестраховаться выкрутил скорость моторов до минимальной, вот они и стали "прокручивать" .. на самом деле мотор останавливался при удержании колеса рукой, а ШИМ на 122гц (1/256) издавал рык .. ну очень похожий на "мотор работает" создавалась полная иллюзия что мотор крутится, а редуктор проскальзывает .. в полевых условиях, разглядеть на собранной тележке крутится ли мотор на самом деле - было ну никак. А вот когда его сняли .. тут-то все и выяснилось.
В общем, наши замеры показывали, что на реальной трассе тележка была вполне способна развивать скорость по прямой до 75см/сек и успевала тормозить перед поворотами .. средняя скорость прохождения трассы у нас была зафиксена в районе 38-45см/сек, что было примерно втрое выше всех конкурентов, кроме одного. Там была похожая средняя скорость и шел он гораздо равномернее по трассе, практически без разгонов/торможений .. но на тренировке периодически терял линию. Но у него стояли пиковские датчики линии и работали куда как кучерявее наших. У остальных были исключительно самоделки.
А вот "насколько" и кто был из нас лучше в реальности и прошел таки этот конкурент всю трассу .. увы мы уже не узнали. Дома же, как назло, датчики настроились на раз-два и всю домашнюю трассу тележка проехала на 9.5сек. (у нас поле примерно в 2 раза меньше по габаритам, соответственно все повороты - круче).. обидно.
Как вывод: датчики линии на базе TSOP приборов - фигня полная. Простой ИК-светодиод + ИК приемник и аналоговый вход Ардуино .. это всё что надо. Была мысль спаять .. но когда кинулся, оказалось что у нас только 1 ИК-приемник.
Поскольку отборочный тур мы не прошли, и соответственно на следующий этап скорее всего уже не попадаем (да, и рановато ещё ему), то выкладываю алгоритм того, что позволяло нам на тренировочных заездах проходить круг за 19-21сек. (лучший результат оказался 30.7сек):
Принят был модифицированный конечный автомат, с учетом того что цикл анализа и принятия решений на моей либе выполняется примерно за 0.5мсек, и соответственно на предельной скорости в 75см/сек тележка могла даже в перпендикулярном направлении отработать не менее 25 циклов контроля трассы при 100% эффективности датчиков.
Эффективность датчиков была загрублена до 50%, и стат. наработка показаний для усреднения делалась в 2 приема по 10 замеров. Что позволило уверенно принимать трассу на тренировочных заездах даже на "вытертой" линии. При условии настройки датчиков на стабильную работу.
Автомат имет 3 главных состояния: "прямо", "налево" и "направо". Каждое из состояний имеет свои модификации от текущей ситуации (аналог предсказателя переходов в конвеерных ЦПУ):
"вперед": пропускаем первые два состояния как преждевременные.
а) если это третье, то проверяем разницу скоростей моторов и плавно выравниваем ШИМ на моторах к среднему состоянию. За 3-5 проходов.
б) если более третьего: до этого ехали вперед, то пробуем увеличивать скорость движения. Медленно и по чуть-чуть, учитывая высокую скорость обработки данных. Получалось что разгон от мин. до макс. занимает около 1.5сек.
"влево","вправо": считаем текущую сумму скоростей моторов (ШИМ).
Первый сигнал к повороту:
а) Если скорость мала (меньше заданного порога), то пытаемся изменить ШИМ на моторах на небольшую величину. Вариант "съезжания" с трассы по выходу из поворотов. Выставляем небольшую паузу для следующего анализа поворота на исполнение команды моторами;
б) Если скорость высока (выше второго порога), то "тормозим лаптей с заносом" - останавливаем свой мотор (влево - левый) И одновременно сильно понижаем скорость второго мотора. Пауза на исполнение максимальна. Это основная реакция на входе в повороты;
в) Если скорость средняя, то как и в п."а" изменяем ШИМ моторов, но с общим и существенным понижением скорости обоих моторов. Компенсация кривизны поворота с текущей скоростью движения. Пауза для исполнения след. команды - средняя. Часто сюда попадаем на плавном кривом участке, где надо периодически корректировать направление движения.
Повторный сигнал к повороту (через заданную паузу):
г) Принудительно устанавливаем ШИМ моторов в режим "типового" поворота: внутренний мотор остановлен, внешний определяет радиус типового поворота (чуть меньше самого крутого поворота трассы). Далее - типовая и небольшая пауза.
д) Последующие довороты: плавный разгон внешнего двигателя для уверенного поворота внутрь трассы.
последовательность работы на стартовой "почти" прямой: "как ровно поставишь, так и поедет".. быстрый разгон до макс. скорости с корректировками .. визуально тележка плавно заворачивает согласно кривизне трассы выдерживая оч. высокую скорость.
вход в поворот большого радиуса: быстрый останов внутр. колеса на очень короткое время с небольшим заносом заднего шарового колеса, после чего постоянное движение на внутреннем датчике, ибо срабатывает или "поворот" или "прямо" но практически незаметно глазом.
выход из поворота: быстрое выравнивание на трассе с набором скорости.
вход в крутой поворот согласно трассе происходил после небольшого поворота в обратную сторону .. никаких проблем, разворачиваемся на внутр. колесе.
выход из крутого поворота шел на прямую .. думаю понятно. :)
Собственно класс алгоритма относится к конечным автоматам с памятью..