roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 09:28

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Робот балансер
СообщениеДобавлено: 07 авг 2012, 01:01 
Не в сети
Аватара пользователя

Зарегистрирован: 05 фев 2008, 15:33
Сообщения: 2687
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович
Датчики на какой чувствительности работают?
Задержка в цикле 10мсек сильно нужна?

_________________
Никто кроме нас!!!
4Robots.ru - Все для роботов!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Робот балансер
СообщениеДобавлено: 07 авг 2012, 01:02 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
шутка про неваляшку? хм.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Робот балансер
СообщениеДобавлено: 07 авг 2012, 01:03 
Не в сети
Аватара пользователя

Зарегистрирован: 11 май 2009, 17:39
Сообщения: 20
Откуда: Москва
Skype: spin7ion
прог. языки: Java, PHP, C++
ФИО: Александр 7ion
SkyStorm писал(а):
Датчики на какой чувствительности работают?
Задержка в цикле 10мсек сильно нужна?


Гироскоп на низкой, аксель пробовал на высокой и низкой, не помогает. Задержка для серийного вывода


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Робот балансер
СообщениеДобавлено: 07 авг 2012, 01:04 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Какой отклик всей системы со всеми этими флоатами и "Serial.print("D:");" в цикле подсчета?
Ардуина ни разу не комп на 1000 мипс.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Робот балансер
СообщениеДобавлено: 07 авг 2012, 01:11 
Не в сети
Аватара пользователя

Зарегистрирован: 11 май 2009, 17:39
Сообщения: 20
Откуда: Москва
Skype: spin7ion
прог. языки: Java, PHP, C++
ФИО: Александр 7ion
Не замерял к сожалению. На что заменить флоат? И действительно ли сильно это на стаб льности скажется?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Робот балансер
СообщениеДобавлено: 07 авг 2012, 01:19 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Так замерь :)
оставь только "Serial.print("D") и осциллом замерь время между пачками на serial out.
Если задержка больше 100 мс. так и не будет нормально балансировать


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Робот балансер
СообщениеДобавлено: 07 авг 2012, 01:27 
Не в сети
Аватара пользователя

Зарегистрирован: 11 май 2009, 17:39
Сообщения: 20
Откуда: Москва
Skype: spin7ion
прог. языки: Java, PHP, C++
ФИО: Александр 7ion
Понятно, осцила нету,придется компом. Есть ли у вас общие советы по оптимизации?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Робот балансер
СообщениеДобавлено: 07 авг 2012, 01:39 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Пока совет один: убрать все задержки и принты, соотв. подкрутить пид и посмотреть что стало


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Робот балансер
СообщениеДобавлено: 07 авг 2012, 12:40 
Не в сети
Аватара пользователя

Зарегистрирован: 11 май 2009, 17:39
Сообщения: 20
Откуда: Москва
Skype: spin7ion
прог. языки: Java, PHP, C++
ФИО: Александр 7ion
Скажите, а код pid вообще правильный?
Код:
float lastError=0;

float integral=0;

float updatePID(float current, float target){
   float dt=millis()-lastTime;
 
   float error=target-current;
        if(error>0.01){
        integral+=error*dt/1000;
        }
        integral=constrain(integral,-255,255);
   float derivative = (error - lastError)*1000/dt;

   float output=coeffP*error+coeffI*integral+coeffD*derivative;

   lastError=error;

   return constrain(coeffPID*output, -255, 255);
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Робот балансер
СообщениеДобавлено: 07 авг 2012, 14:56 
Не в сети
Аватара пользователя

Зарегистрирован: 18 ноя 2010, 21:27
Сообщения: 96
Откуда: Ростов-на-Дону
Spin7ion писал(а):
Скажите, а код pid вообще правильный?
Код:
float lastError=0;

float integral=0;

float updatePID(float current, float target){
   float dt=millis()-lastTime;
 
   float error=target-current;
        if(error>0.01){
        integral+=error*dt/1000;
        }
        integral=constrain(integral,-255,255);
   float derivative = (error - lastError)*1000/dt;

   float output=coeffP*error+coeffI*integral+coeffD*derivative;

   lastError=error;

   return constrain(coeffPID*output, -255, 255);
}


Тут должно быть два ПИД-регулятора: один для удержания равновесия, другой для удержания робота в заданной точке (что бы не укатывался). Результаты обоих ПИД суммируются. Разумеется, на колесах должны быть энкодеры.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Робот балансер
СообщениеДобавлено: 07 авг 2012, 15:04 
Не в сети
Аватара пользователя

Зарегистрирован: 11 май 2009, 17:39
Сообщения: 20
Откуда: Москва
Skype: spin7ion
прог. языки: Java, PHP, C++
ФИО: Александр 7ion
vvk писал(а):
Тут должно быть два ПИД-регулятора: один для удержания равновесия, другой для удержания робота в заданной точке (что бы не укатывался). Результаты обоих ПИД суммируются. Разумеется, на колесах должны быть энкодеры.


К сожалению в конструкции не заложено использование энкодеров. Неужели без них нельзя балансировать? Пока только балансировать, без удержания точки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Робот балансер
СообщениеДобавлено: 07 авг 2012, 15:28 
Не в сети
Аватара пользователя

Зарегистрирован: 18 ноя 2010, 21:27
Сообщения: 96
Откуда: Ростов-на-Дону
vvk писал(а):
Тут должно быть два ПИД-регулятора: один для удержания равновесия, другой для удержания робота в заданной точке (что бы не укатывался). Результаты обоих ПИД суммируются. Разумеется, на колесах должны быть энкодеры.


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Робот балансер
СообщениеДобавлено: 07 авг 2012, 18:52 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2254
Откуда: Екатеринбург
прог. языки: асемблер AVR
За моторчики переплатили вдвое. Реклама вроде запрещена, намекну: внизу главной страницы есть список интернет-магазинов. А по настройке сказать мне нечего. Но видел я на ютубе ролик: два колеса, один мотор, аккум на шесте, а в качестве датчика - микрик с грузиком. Он инвертировал питание моторчика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Робот балансер
СообщениеДобавлено: 07 авг 2012, 19:41 
Не в сети
Аватара пользователя

Зарегистрирован: 11 май 2009, 17:39
Сообщения: 20
Откуда: Москва
Skype: spin7ion
прог. языки: Java, PHP, C++
ФИО: Александр 7ion
Я заменил фильтр на калмана, убрал задержки и поигрался с пид, не получается, что-то стоять. Может действительно на шесте груз повесить?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Робот балансер
СообщениеДобавлено: 07 авг 2012, 19:49 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
врямя замеряли?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO