Плавное трогание с места
- Войдите на сайт для отправки комментариев
Добрый день всем!
Так вот занимаюсь я своим роботом http://arduino.ru/forum/proekty/moi-pervyi-robot
И чуть чуть застрял на одном месте.. Хоть и задача не сложна, не как не могу найти идеальное решение.
Сама задача в том, как заставить плавно трогаться и разгоняться робота?
Какие сведения имеются:
1. Запрашиваемая скорость(по сериалу отсылается информация с какой скоростью должен ехать робот = сантиметров в секунду. В коде это значение называется SPEEDO.
Минимальная скорость ≈ 10см/сек (SPEEDO = 10;) Максимальная скорость ≈ 150см/сек (SPEEDO = 150;)
2. Информация с энкодера колес - каждые 100 m, приходит информация о нынешней скорости робота - см/сек(ROBOT_SPEED). Минимальная скорость которую мне удалось измерить ≈ 20 см/сек(ROBOT_SPEED = 20;), Максимальная скорость которую мне удалось измерить ≈ 145 см/сек(ROBOT_SPEED = 145;)
3. Также энкодеры колес позволяют вычислить расстояние.
Методы контроля робота:
Можно управлять ходовыми моторами робота по отдельности:
1.analogWrite (MOTORAF, leftspeedo); // Левый мотор вперед. Leftspeedo - с какой скоростью крутиться мотору. Минимальное значение leftspeedo = 70;,
максимальное leftspeedo = 255;
2.analogWrite (MOTORBF, rightspeedo); // Правый мотор вперед. Rightspeedo - с какой скоростью крутиться мотору. Минимальное значение rightspeedo = 70;,
максимальное rightspeedo = 255;
Как видете задача не сложна, но никак не могу придумать что нибудь разумное.. Может у кого нибудь появится мысль?
каждые 100 ms, приходит информация о нынешней скорости робота
Не понятна проблема.
Т.е. вы выдаете аналоговый сигнал а скорость не меняется ?
Куда вы выдаете этот сигнал ?
Или проблема с генерацией аналогового сигнала ?
Проблема в том, что если SPEEDO = 150;, a ROBOT_SPEED < 20; колеса будут буксовать сначала. Так как в данный момент rightspeedo и leftspeedo напрямую связаны с SPEEDO(if(SPEEDO == 150) { rightspeedo = 255;, leftspeedo = 255;}.
По этому надо как то придумать чтобы все выглядело как то так:
- команда ехать в период со скоростью 80см в сек.
* смотри какая у нас сейчас скорость?
если наша скорость 0, постепенно увеличиваем "педаль газа" до тех пор пока не разгоняется до 80см в сек.
если наша скорость больше чем 80см в сек. отпускаем "педаль газа".
Вот как то так, только без dealy.
Если с нуля нужно , плавно , разогнаться до 80 , то оператор for вам в помощь.
Примерно вот так.