2016-07-29 7 views
0

Мне недавно удалось построить мой автономный робот с двигателями постоянного тока, и он работает хорошо. Тем не менее, он не перемещается по прямой линии, когда это нужно. Теперь я изучаю, какой метод следует применять, чтобы робот пошел прямо. Я в значительной степени понимаю, как использовать кодировщики, но я не уверен в гироскопе. Я написал программу для прямого движения с помощью энкодера, но она не движется прямо именно из-за скорости передней щетки, для дальнейшего улучшения я решил использовать гироскоп. Если я использую гироскоп, чтобы сделать прямое движение? или любое предложение?Как я могу использовать гироскоп или энкодеры для перемещения робота по прямой?

+0

Не могли бы вы показать что-нибудь, что поможет читателям понять, чего вы пытаетесь достичь и как? –

ответ

0

Во-первых, убедитесь, что вы концептуально понимаете, что означает, что робот должен двигаться по прямой линии. Вы не получите робота, который отлично движется по прямой. Вы можете заставить его двигаться достаточно прямо (возможно, более совершенный, чем люди могут определить), но всегда будет ошибка.

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

Даже если вы предполагаете идеальные датчики, по-прежнему существует разница между «вождением в прямом направлении» и «поддержанием прямой и узкой». Представьте, что вы закодировали робота, чтобы он двигался так, чтобы он старался держать подшипник как можно более последовательным (прямая передача). Если, пока он двигался, вы немного сбили его, он отклонился бы в сторону, а затем исправился бы до исходного угла. Однако это было бы по другому пути. Конечно, путь будет параллелен оригинальному, но это не будет тот же путь.

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

Это второй вариант звучит немного больше, чем то, что вы делаете, так вот первый вариант делается не в конкретных рамках робототехники:

//initialize 
double angle = gyro.get_heading_degrees(); 
//... 
//logic code that may be looped or fired by events 
{ 
    //this is our error; how far off we are from our target heading 
    double error = angle - gyro.get_heading_degrees() - 360; 

    drive_system.drive_arcade(error/180, 1); 
} 

Это предполагает вождение в аркадной моде; вы можете адаптировать его к приводу бака или отклониться диск или mecanum диска или H-диск или ...

«1» только скорость

«-360» и «180» является значением, чтобы уменьшить угол до значения от -1 до 1. Если ваш метод привода использует другой диапазон для определения угла, это необходимо будет адаптировать.

Наконец, этот пример не является надежным, но он должен заставить вас подумать о том, как исправить ошибки, когда вы их обнаружили.