Недавно мне удалось построить мой автономный робот с двигателями постоянного тока, и он работает хорошо. Однако, пока он не должен двигаться по прямой линии. Сейчас я изучаю, какой метод я должен реализовать, чтобы робот двигался прямо. Я очень хорошо понимаю, как использовать кодировщики, но я не уверен насчет гироскопа. Я написал программу для прямолинейного движения с использованием энкодера, но она не движется прямо из-за скорости передней щетки, для дальнейшего улучшения я решил использовать гироскоп. Если я использую гироскоп, можно ли делать прямые движения? или еще какое-нибудь предложение?
Во-первых, убедитесь, что вы концептуально понимаете, что значит для робота двигаться по прямой. Вы не получите робота, который движется идеально по прямой линии. Вы можете заставить его двигаться достаточно прямо (возможно, более совершенно, чем могут определить люди), но всегда будет ошибка.
Гироскоп, возможно, не сможет определить, что вы отклоняетесь от курса, если он достаточно постепенный, и в зависимости от качества вашего гироскопа он может накапливать дрейф, заставляя его думать, что он слегка поворачивается, когда сидит совершенно неподвижно , Чем дороже вы приобретаете гироскоп, тем меньше это будет, но все же.
Даже если вы предполагаете идеальные датчики, все равно есть разница между «ехать прямо» и «держать на прямой и узкой». Представьте, что вы запрограммировали робота на движение таким образом, чтобы он пытался сохранять свою опору как можно более устойчивой (ехать прямо). Если, пока он двигался, вы немного его ударили, он немного отклонится в сторону, а затем отрегулирует себя до исходного угла. Однако это было бы на другом пути. Конечно, путь будет параллелен исходному, но это не будет тот же путь.
Тогда есть возможность заставить его попытаться выяснить, насколько далеко от проторенного пути он прошел, и попытаться вернуться на него. Для этого потребуется либо постоянное задание (как это сделает робот, следящий за линиями), либо большее количество датчиков (например, 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. Если в вашем методе привода используется другой диапазон для определения угла, его необходимо адаптировать.
Наконец, этот пример не является надежным, но он должен заставить вас задуматься о том, как исправить ошибки, когда вы их обнаружили.
Других решений пока нет …