Как я могу использовать гироскоп или энкодеры для движения робота по прямой?

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


person Community    schedule 29.07.2016    source источник
comment
Не могли бы вы показать что-нибудь, что поможет читателям понять, чего вы пытаетесь достичь и как?   -  person Khalil Khalaf    schedule 29.07.2016


Ответы (1)


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

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

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

Затем есть возможность заставить его попытаться выяснить, насколько далеко он был отодвинут от проторенного пути, и попытаться вернуться на него. Для этого потребуется либо постоянная ссылка (как это сделал бы робот, следящий за линией), либо несколько датчиков (например, 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);
}

Это предполагает вождение в аркадном стиле; вы можете адаптировать его к приводу бака, поворотному приводу, механическому приводу, H-образному приводу или...

«1» — это просто скорость

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

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

person Altainia    schedule 29.07.2016