roboforum.ru

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

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




Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Система автоматического полета по компасу для дирижабля.
СообщениеДобавлено: 14 июл 2015, 01:04 
Не в сети

Зарегистрирован: 13 июл 2015, 23:16
Сообщения: 14
Откуда: Украина
прог. языки: C++, C#, Java
Добрый день. Разрабатываю систему управления беспилотным дирижаблем, в т.ч. и автопилот. Сейчас стоит задача сделать автоматическое поддержания курса по датчику-компасу путем изменения мощности левого-правого двигателя. Я написал для этих целей ПИД регулятор. Однако когда взялся за настройку возникли проблемы. Начал я с пропорциональной части, при любых коэффициентах дирижабль "входит в резонанс" и в конце-концов начинает крутиться вокруг своей оси. Может сможете дать совет, как лучше реализовать и настроить подобную систему?
Вот кусок кода для регулятора:

Код:

//Функция масштабирования значений
private double ScaleValue(double value, double valuemin,
            double valuemax, double scalemin, double scalemax)
    {
        double vPerc = (value - valuemin) / (valuemax - valuemin);
        double bigSpan = vPerc * (scalemax - scalemin);

        double retVal = scalemin + bigSpan;

        return retVal;
    }

  //Определение мин-макс границ 
  private double Clamp(double value, double min, double max)
    {
        if (value > max)
            return max;
        if (value < min)
            return min;
        return value;
    }

//Собственно регулятор 
private void Compute()
    {
        //Значение компаса
        double pv = GlobalData.Azimuth;
        //Задание автопилота
        double sp = GlobalData.Auto_Azimuth;

       
        pv = Clamp(pv, pvMin, pvMax);
        //Масштабируем текущее состояние
        pv = ScaleValue(pv, pvMin, pvMax, -1.0f, 1.0f);

        //..И задание
        sp = Clamp(sp, pvMin, pvMax);
        sp = ScaleValue(sp, pvMin, pvMax, -1.0f, 1.0f);

        //Теперь значение ошибки в процентах
        double err = sp - pv;

        //Начальные значения для временных переменных коэффициентов, считаем пропорциональную часть
        double pTerm = err * kp;
        double iTerm = 0.0f;
        double dTerm = 0.0f;

        double partialSum = 0.0f;
        //Запоминаем текущее время
        Date nowTime = new Date();

        if (lastUpdate != null)
        {
            double dT = ((double)nowTime.getTime() - (double)lastUpdate.getTime())/1000;

            //Compute the integral if we have to...
            if (pv >= pvMin && pv <= pvMax)
            {
                //Если нужно, считаем интегральную часть
                if (ki>0)
                {
                   partialSum = errSum + dT * err;
                   iTerm = ki * partialSum;
                }
            }
                //..и дифференциальную
                if (kd>0)
                {
                   if (dT != 0.0f)
                      dTerm = kd * (pv - lastPV) / dT;
                }
        }
        //обновляем время
        lastUpdate = nowTime;
        errSum = partialSum;
        lastPV = pv;

        //Расчет результата
        double outReal = pTerm + iTerm + dTerm;

        outReal = Clamp(outReal, -1.0f, 1.0f);
        outReal = ScaleValue(outReal, -1.0f, 1.0f, outMin, outMax);

        //Выводим результат
        GlobalData.Auto_PID = outReal;
    }

//Вывод на двигатели, Auto_MedPowe- задаваемое значение, с какой средней мощностью должны работать двигатели
double temp;

//Левый  двигатель
temp=Auto_MedPower+GlobalData.Auto_PID;                              
GlobalData.Engine1=(byte)temp;

//правый двигатель                                 
temp=Auto_MedPower-GlobalData.Auto_PID;                                 
GlobalData.Engine2=(byte)temp;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система автоматического полета по компасу для дирижабля.
СообщениеДобавлено: 14 июл 2015, 11:30 
Не в сети

Зарегистрирован: 23 июл 2012, 15:24
Сообщения: 1480
Я так понимаю крутиться он начинает при попытке лететь курсом 0 или 360? :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система автоматического полета по компасу для дирижабля.
СообщениеДобавлено: 14 июл 2015, 11:41 
Не в сети

Зарегистрирован: 13 июл 2015, 23:16
Сообщения: 14
Откуда: Украина
прог. языки: C++, C#, Java
Да, знаю прикол насчет этого участка :) Я пока что специально выбираю направление среднее 180 град, но даже если "успокоить" его рукой в этом направлении, его постепенно начинает носить влево-вправо с увеличивающейся амплитудой. Думаю, что так быть не должно


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система автоматического полета по компасу для дирижабля.
СообщениеДобавлено: 14 июл 2015, 15:32 
Не в сети

Зарегистрирован: 23 июл 2012, 15:24
Сообщения: 1480
А пробовали просто платформу на нитке подвесить?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система автоматического полета по компасу для дирижабля.
СообщениеДобавлено: 14 июл 2015, 15:41 
Не в сети

Зарегистрирован: 13 июл 2015, 23:16
Сообщения: 14
Откуда: Украина
прог. языки: C++, C#, Java
а у меня так и сделано (см фото во вложении)


Вложения:
IMAG0188.jpg
IMAG0188.jpg [ 1.27 МиБ | Просмотров: 2555 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система автоматического полета по компасу для дирижабля.
СообщениеДобавлено: 14 июл 2015, 20:18 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
Ну если регулятор без ошибок, то ясное дело - механическая инерция платформы - мощная И составляющая. Решение - зафигачить мощную Д составляющую для гашения колебаний. Потом потихоньку ее уменьшать, чтобы оно все-таки со внятной скоростью вертелось.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система автоматического полета по компасу для дирижабля.
СообщениеДобавлено: 15 июл 2015, 01:18 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Не ПИД вам нужен, этожжеж не инкубатор. ПИД - физика термостата...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система автоматического полета по компасу для дирижабля.
СообщениеДобавлено: 15 июл 2015, 01:20 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
Думаю ПИДом тоже можно, но настройка ПИДа - веселое занятие:)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система автоматического полета по компасу для дирижабля.
СообщениеДобавлено: 15 июл 2015, 01:26 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Брушлесы вижу я, безсенсорные, нелинейный элемент это. Драйвер там значит хоббийный - штука с характером, раскручивает брушлесы в 2 этапа, 1-й этап вообще не поддается ПИДированию...

Добавлено спустя 4 минуты 1 секунду:
elmot писал(а):
Думаю ПИДом тоже можно, но настройка ПИДа - веселое занятие:)

Изучен он давно, веселое занятие до 25 лет возраста инженера, включая среднюю школу и детсад, если не прошло - значит маструбация, извините за мой французский. :roll:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система автоматического полета по компасу для дирижабля.
СообщениеДобавлено: 15 июл 2015, 07:13 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
ну так предлагайте структуру регулятора..

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система автоматического полета по компасу для дирижабля.
СообщениеДобавлено: 15 июл 2015, 10:25 
Не в сети

Зарегистрирован: 13 июл 2015, 23:16
Сообщения: 14
Откуда: Украина
прог. языки: C++, C#, Java
Странно, перелопатил кучу инфы, в основном по коптерам, там тоже брушлес, тоже хоббийные регуляторы, используют ПИД и довольно успешно для стабилизации в воздухе. У меня вроде как задача проще, просто примерно +-5 градусов держать курс...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система автоматического полета по компасу для дирижабля.
СообщениеДобавлено: 15 июл 2015, 14:11 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
dotzz писал(а):
Странно, перелопатил кучу инфы, в основном по коптерам, там тоже брушлес, тоже хоббийные регуляторы, используют ПИД и довольно успешно для стабилизации в воздухе.

У них система нагруженная, обороты двигателей всегда выше 50%, чуть убавил - коптер падает. Т.е. у них полностью выбрана нелинейность брушлеса на старте. Да еще в коптерах перешивают контроллеры на управление по и2ц 400гц., ибо штатный контроллер с ppm 50 гц. плохо управляется. А у тебя, минимальный импульс мощности десятикратно выше минимального требуемого значения. Представь себе иголку растянутую на нитках. И ты пытаешься стабилизировать ее положение щелчками :)
Нужно замерить минимальный импульс мощности системы: дать 50% мощности ppm сигналом, как можно короче по времени (чтоб стабильно запускался двигатель). И только после этого делать выводы...
Duhas писал(а):
ну так предлагайте структуру регулятора..

Все просто, как можно ближе к физике конкретного процесса. Например, когда делал свою серву, учитывал срыв коллекторника с точки покоя (кста, похожая ситуация), а сверху ПИД :roll: Ну и интеграл обязательно отключать при больших рассогласованиях, но это уже есть и в описании разных ПИД. Ссылку где-то давал...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система автоматического полета по компасу для дирижабля.
СообщениеДобавлено: 15 июл 2015, 20:49 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
ТС, ставь коллекторный импеллер поперек движения, им и рули, как вертолет хвостовым винтом. и будет щастье.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система автоматического полета по компасу для дирижабля.
СообщениеДобавлено: 15 июл 2015, 21:17 
Не в сети

Зарегистрирован: 13 июл 2015, 23:16
Сообщения: 14
Откуда: Украина
прог. языки: C++, C#, Java
elmot писал(а):
ТС, ставь коллекторный импеллер поперек движения, им и рули, как вертолет хвостовым винтом. и будет щастье.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система автоматического полета по компасу для дирижабля.
СообщениеДобавлено: 16 июл 2015, 01:00 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
Тогда попробуй по-другому. Не пытайся ПИДить мощность моторов, подгазовывай их мощно, но на короткие периоды. И управляй длительностью этих периодов.


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

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


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

Сейчас этот форум просматривают: Google [Bot] и гости: 9


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

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