Приветствую, в прошлой статье я рассказывал о том, как написал П-регулятор для умной линии, то есть для следования по линии при помощи машинного зрения. А сегодня расскажу про то, что было дальше, то есть про создание самого робота.
Для тех кто читал прошлую статью, в конце нее я говорил про значение зависящее от угла наклона линии и только сейчас понимаю, что это слишком размытая фраза. На самом деле я ищу косинус угла наклона. Думаю, тепер прошлая статья стала немного понятней.
Улучшения в программе есть. После написания прошлой программы, я начал думать о том, что линия может уйти с центра поля зрения и тогда, нужно будет поворачивать в одну из сторон, иначе робот сойдет с линии. Как я это исправил? Теперь я дополнительно ищу процент отклонения линии, от центра поля зрения камеры(в долях). После, складываю косинус и этот процент и получаю ошибку. (Ошибку не в коде, а для ПИД — регулятора.)
Что такое ПИД-регулятор? Тема относительно легкая, но лучше 1 раз увидеть, мне во всем помогло разобраться видео АлексаГайвера. Советую посмотреть, чтоб понимать что это такое.
Все, алгоритм написан, теперь практика. Начал я с отрисовки корпуса робота. Идея была в том, чтоб я всегда мог поправит камеру в несколько движений и ширина должна быть максимально регламентированная. С второй задачей разобраться легко, а для камеры пришлось напечатать несколько тестовых моделек, в качестве двигателей взял старые двигатели сумоиста. Т.е. 6v 600rpm. Сначала корпус выглядел так:
В итоге добавился болтик для легкого скольжения, ремешок для удержания аккумулятора, немного проводов и колеса. В итоге робот выглядит вот так:
Теперь мы все спаяли, алгоритм написан. Что дальше? На мое удивление, проблемы вызвало управление движками. Сначала думал, что неправильно управляю пинами камеры или что подключаюсь к пинам без шим сигнала, но проблема была в необычной загрузке кода в камеру. Когда я писал алгоритм, то думал, что заливаю код, но на самом деле лишь компилировал его и запускал через камеру. Т.е. код не сохранялся на камеру и при включении через аккумулятор код не запускался(т.к. его просто не было). На решение этой проблемы я потратил примерно 2 дня. Решается через панель инструментов. А обнаружил случайно, пока играл со светодиодом на камере, при подключении через провод он светился, а через аккум нет.
Дальше дело было за малым, написать функцию для управления движками и настроить ПИД-регулятор.
Функция написана, осталось настроить ПИД-регулятор, когда писал пост про LF робота, говорил, что дело долгое, поэтому сразу результат.
Скорость слишком мала и я это понимаю, но проблему тут в самой лини, опора робота(болтик), имеет слишком большое трение с изолентой, а колеса проскальзывают на линолеуме. Из-за этого скорость падает, решается нормальным полем.
Теперь те, кто читал прошлую статью скажут, где тут отрывистая линия, но по причине описанной выше, из изоленты я такую линию сделать не могу, а банера нет. Поэтому пока протестить в реальных условиях не вышло. Надеюсь потом смогу это сделать. А пока займусь еще каким-нибудь проектом.