roboforum.ru

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

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




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

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


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

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
если в коде не накосячили, тогда остаётся только механика. посмотрите исходники http://sebastiannilsson.com/en/k/projekt/selfbalancing-robot/, может сможете адаптировать.


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

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


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

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Spin7ion писал(а):
Скажите, а код pid вообще правильный?

А откуда вообще код взят? Чужие исходники? или свое?

Spin7ion писал(а):
if(error>0.01){
        integral+=error*dt/1000;
        }

Как это можно интегральную составляющую менять только при ошибке > опред. значения?
В том и прикол интегрирования, чтоб видеть минимальные отклонения, если это ради фильтрации шумов, то нахненадо, ибо интегрирование есть фильтр низких частот.
Это прикл номер раз :)


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

Зарегистрирован: 18 ноя 2010, 21:27
Сообщения: 96
Откуда: Ростов-на-Дону
Почти по теме.

Вот что делают китайцы, когда не могут добиться устойчивости от своего сигвея.
Четырехколесный сигвей:

http://anapa2.mypage.ru/


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

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Spin7ion писал(а):
Скорость регулируется PID регулятором, зависит от отклонения от положения равновесия. Разве не так надо?


Нет. Скорость не регулируется - твоим пидом наоборот регулируется положение равновесия при помощи скорости, а вернее даже даже не скорости, а ШИМа. Поэтому скорость и получается какая попало. Попробуй вот так, balanceAt преврати в переменную:

Код:
balanceAt = updatePID(last_speed, speedAt);
pid=updatePID(actualAngle,balanceAt);
lMotorSpeed=-pid;
rMotorSpeed=-pid;
last_speed=-pid;


Это не совсем корректно, но должно помочь от беспорядочного укатывания. Первый PID должен быть сильно медленнее второго, добавь в параметры updatePID ссылочку на набор коэффициентов, чтоб функция одна, а регуляторов было два разных. И следи за периодом цикла - для ПИД это очень важно.


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

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Не могу не кинуть ссылку: forum16/topic9781.html

Когда у меня ничего не получается и мне грустно - перечитываю от корки до корки по несколько раз

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


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

Зарегистрирован: 11 май 2009, 17:39
Сообщения: 20
Откуда: Москва
Skype: spin7ion
прог. языки: Java, PHP, C++
ФИО: Александр 7ion
Поменял пид по рекомендациям книги с этого форума:
Код:
float coeffP=80,coeffI=30,coeffD=8;

float prevError=0;
float prevError2=0;

float lastPid=0;

float updatePID(float current, float target){
//   float dt=millis()-lastTime;
 
   float error=target-current;
     
   float ret=lastPid+coeffP*(error-prevError)+coeffI*(error+prevError)/2+coeffD*(error-2*prevError+prevError2);
   
   ret=constrain(ret, -255, 255);
   lastPid=ret;
   prevError2=prevError;
   prevError=error;
   return ret;
}


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

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Фигня какая-то
coeffP*(error-prevError)
это странно!
почитай ветку, ссылку выше давал. там boez все разжевал - даже я понял!

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


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

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


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

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


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

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