2015-10-29 7 views
0

Я использую кодировщик, чтобы получить пройденное расстояние и угол поворота транспортного средства. При повороте он не дает точного угла, автомобиль поворачивается. В моем алгоритме я использую накопление всего угла, чтобы найти полный угол относительно мира (X-O-Y).Соотношение диаметра колеса и расстояния между колесами и колесами оказывает какое-либо влияние на выравнивание и желаемый заголовок транспортного средства?

Имеет ли это какое-либо отношение к соотношению диаметра колеса и расстояния колеса к колесу?

Этот вопрос был поднят в моем сознании, потому что тот же алгоритм работал с другим оборудованием, имеющим различное измерение (диаметр колеса и колеса на расстояние колеса), и он также возвращал точный угол поворота.

Поймите, если предлагается какое-то ценное предложение.

+1

Я не говорю, что это оффтоп, но я думаю, вы можете найти лучший сайт StackExchange для этого вопроса. Например, [Robotics SE] (http://robotics.stackexchange.com/help/on-topic). – Petr

ответ

1

Угол робота зависит от конкретного оборудования, такого как размер колес, размер датчика и ширина транспортного средства. Может быть, вам повезло с другой робот, что изменение диаметра колеса и колеса на колеса расстояние отмененного друг друга, так что уравнения были одинаковы, но, как правило, вы не будете так повезло

![enter image description here

Предполагая, что вы имеют двухколесный робот, то же показание на двух разных установках может дать разные результаты. На моей простой иллюстрации у меня есть ось двухколесного робота, оба бота имеют одинаковые wheel_diameter и используют одни и те же поворотные энкодеры. Один бот имеет расстояние R1 между колесами, расстояние между которыми колеблется R2 Предположим, что оба робота держат колесо неподвижным, а другое колесо движется на 5 кликов вперед по колесиковому кодеру (и оба бота используют один и тот же кодер и колесо такого же размера). Используя простое уравнение для окружности полукруга, мы можем найти расстояние, на котором двигались колеса.

dist_trav = (pi * wheel_diameter) * (#ticks/total ticks on encoder)

Конечно, так как одно колесо находится в неподвижном состоянии, бот фактически поворачиваясь на другой полукруг. Мы можем вычислить новый угол, используя

circumference = 2*pi*dist_between_wheels dist_between_wheels радиус нашего круга

angle = % of circumference traveled * units = (dist_trav/circumference) * 360 мы используем 360, так что угол в градусах, но вы можете использовать радианы, при желании

вы увидите, что даже в этом примере, когда роботы идентичны, за исключением расстояния между колесами, такое же количество тиков будет означать очень разные углы. Если r2=2*r1 мы можем видеть, что dist_trav одинакова для обоих ботов (так как колеса одинакового диаметра), но когда мы выясняем углы мы получаем

черный личинку

angle_black = (dist_traveled/2*pi*R1) * 360

красный бот

angle_black = (dist_traveled/2*pi*2*R1) * 360 
      = (dist_traveled/4*pi *R1) * 360 

так для того же движения колес красный бот будет иметь только 1/2 изменение угла, как это делал черный бот. Это всего лишь игрушечный пример, но вы можете легко увидеть, как разные диаметры колес и расстояние между ними могут иметь огромное значение.

+0

Спасибо за ответ! Расскажите, пожалуйста, как это отношение выбрано для получения точного результата для конкретного оборудования. Btw в выше ответ вы написали окружность = 4 * pi * dist_between_wheels, которые, я считаю, должны быть «2 * pi * dist_between_wheels». Исправьте меня, если я ошибаюсь! –

+0

@ Amit.D Вы правы. Извините за путаницу, я исправил сообщение. Упомянутые мной уравнения работают, если вы ввели правильные измерения. Но если у вас есть оба колеса, то сразу эта модель не будет работать. Чтобы исправить ваш текущий код, найдите какие-либо константы и убедитесь, что они точно соответствуют коэффициентам на вашем боте, вы, вероятно, можете использовать любую логику, которую у вас уже есть, и просто изменить коэффициенты. Я не мог сказать, что именно изменить, не видя кода – andrew