Найти в Дзене
RCRoboLab

интерполяция (метод средневзвешенного)

Оглавление

Важная информация!

для начала предупреждение!
эта статья является адаптацией
вот этой англоязычной статьи!

Собственно сама статья является логическим продолжением вот этой статьи, но вполне может восприниматься отдельно. Там мы калибровали сенсор линии, а тут уже будем ориентироваться, благодаря нему, в пространстве. В статье УМЫШЛЕННО ничего не будет адаптироваться для сенсора QTR-8A о котором уже есть статья на канале. Почему? Чтобы повторить нашего робота, вам придется потрудиться и получить опыт и знания. В общем, учитесь думать, а не копировать.

Для чего нам это нужно? Да все просто, скорость робота напрямую зависит от точности позиционирования. Когда у вас "робот по линии" с одним сенсором - о скорости и говорить не приходится, 2 - лучше, 3, 4, 5 - уже хорошо, а у нас аж целых 8! Но что если я вам скажу, что мы из наших 8 сенсоров можем при помощи кода сделать линейку из (условно) бесконечного количества сенсоров?

Для этого нам и нужна "интерполяция"! Что это и как читайте сами, а вот как это применить в роботе, расскажу я.

Поехали!

У нас с вами есть массив сенсоров в виде модуля из 6 аналоговых сенсоров линии. Цель робота ехать ровно по линии, то есть наш робот должен стремиться к тому чтобы центр линии был между 2-м и 3-м сенсором. Отклонение от сенсора мы будем называть - ошибка! Отклонение в одну сторону - это положительная ошибка, отклонение в другую сторону - это отрицательная ошибка. (смотри рисунок №1) При этом, чем больше отклонение, тем больше ошибка. Ошибка выражается в условных единицах, но для понимания я буду выражать ее в миллиметрах!
К примеру, на рисунке, у сенсора №0 ошибка = +20.

рис. №1 "Немного художества".
рис. №1 "Немного художества".

Таким образом, если середина линии находится ровно между 2-м и 3-м сенсором то ошибка будет 0, если середина линии находится ровно под центром сенсором №1 то ошибка будет равна +12. А теперь вопрос, какая ошибка будет если середина линии будет ровно посередине между 3-м и 4-м сенсором? Правильный ответ -8, если вы посчитали так же, то поздравляю, вы интерполировали ошибку! Только это была линейная интерполяция, а у нас будет интерполяция методом средневзвешенного.

Давайте представим что сенсоры на черное передают нам сигнал 0, а на белое 1023. При этом сенсоры 0, 1, 2, 5 передают нам сигнал 0, а 3-й и 4-й по 512. Где находится центр линии? Верно все там же, но тут мы поняли это только при помощи логики! А если так: 0-й = 0, 1-й = 0, 2-й = 100, 3-й = 1023, 4-й = 500, 5-й = 0. Где центр линии? Вот тут то нам и нужно интерполировать при помощи метода "средневзвешенное". И как не удивительно тут есть формула, которая нам поможет =)

Для сенсора с шестью аналоговыми датчиками формула будет выглядеть так:

рис. №2 "поиск ошибки"
рис. №2 "поиск ошибки"

в данной формуле: "X" - ошибка сенсора, а точнее расстояние от центра робота до середины сенсора. Для сенсора №5 на нашей схеме X = -20. А "Y" - это значение, передаваемое аналоговым сенсором. Тот же 5-й сенсор по последнему условию возвращает нам сигнал "0".

Далее все просто, подставляем все в формулу и считаем ошибку. Я совмещу приятное с полезным, напишу код на Python и посчитаю ошибку (рис. №3)

рис. №3 "поиск ошибки"
рис. №3 "поиск ошибки"

Итог!

В итоге мы с вами имеем "ошибку" или отклонение робота от траектории, а это уже то что можно легко и просто скормить PID-регулятору, о котором, с вашего позволения, я писать не буду, уж и так про него информации в сети уйма.

Если есть вопросы, милости прошу в комментарии.

Другие интересные статьи вы можете найти тут!

Наука
7 млн интересуются