Специальные цены   новые товары
+ Ответить в теме
Страница 157 из 165 ПерваяПервая ... 147 155 156 157 158 159 ... ПоследняяПоследняя
Показано с 6,241 по 6,280 из 6569

Создание собственной системы стабилизации

Тема раздела Квадрокоптеры. Общие вопросы в категории Квадрокоптеры и мультироторы; Сообщение от rual Хотя математически правильно на выходе иму получить угол +-Пи Это ничем не лучше 0-360. Если угол используется ...

  1. #6241

    Регистрация
    23.08.2011
    Адрес
    Краснодар
    Возраст
    38
    Сообщений
    950
    Записей в дневнике
    2
    Цитата Сообщение от rual Посмотреть сообщение
    Хотя математически правильно на выходе иму получить угол +-Пи
    Это ничем не лучше 0-360. Если угол используется для управления (в ПИД-контроллере, задание цели, и т.д.) то он должен быть непрерывным. Можно завести специальный тип данных, но проще всего во float преобразовать и не париться. Методика называется "phase unwrapping". Обратно в +-180 также просто преобразовать. Ни и эту особенность углов надо всегда помнить. Если угол 10, а команда идет "повернуть на 380" - то это можно сделать двумя способами, длинным и коротким. И однозначно сказать какой "правильный", может только тот, кто команду дает.

  2.  
  3. #6242

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от alexmos Посмотреть сообщение
    он должен быть непрерывным
    Цитата Сообщение от alexmos Посмотреть сообщение
    но проще всего во float преобразовать и не париться
    Непонятно как это сделать практически.. , может формулу или пример дадите ? Если я правильно понял, то как бы угол +/- бесконечность нужно сделать и считать еще и обороты относительно "нуля" ?

  4. #6243

    Регистрация
    23.08.2011
    Адрес
    Краснодар
    Возраст
    38
    Сообщений
    950
    Записей в дневнике
    2
    Выше Александр написал уже: "если разность больше 180, вычитай или прибавляй 360 (т.е. полный оборот)". Только ещё можно учесть, что полных оборотов может быть больше одного, и нужно в начале инициализировать фильтр сырыми данными без этой проверки (начальный угол может быть любым и не надо его сравнивать с нулем). Пример кода не буду давать чтоб не запутать, но там пара строк всего.

  5. #6244

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от alexmos Посмотреть сообщение
    И однозначно сказать какой "правильный", может только тот, кто команду дает.
    Это верно, особо для навигации, но в случае стабилизации не могу представить случай, когда нужно будет идти по большому кругу. К тому же использовать углы для получения сигналов рассогласования, как мне кажется, не правильно, лучше применять матрицы, кватернионы, вектора.

    Публикую свой "велосипед", может кому пригодиться.
    Чтоб работал нужно сделать:

    В проект включить ROSA.c и соответствующие файлы порта для АВР или СТМ32

    в main.c или другом ц,цпп-файле
    #include "ROSA.h"

    void hend0(void)
    {
    ROSA_CallEvent(3);
    }

    void hend1(void)
    {
    //ROSA_CallEvent(2);
    }
    void hend2(void)
    {
    //ROSA_CallEvent(3);
    }

    void hend3(void)
    {
    ROSA_CallEvent(4);
    }

    void hend4(void)
    {
    ROSA_CallEvent(1);
    }

    /* массив обработчиков */
    Event_TypeDef Event_List [] = {

    hend0,hend1,hend2,hend3,hend4
    };

    /* массив приоритетов */
    const Event_Priorety_TypeDef _Ev_Prior[] = {
    0,1,2,3,4 };


    int main(void)
    {
    ROSA_Init(0); /* инициализация РОСА*/

    for(; {

    ROSA_CallEvent(0);
    }
    }
    Ну и в конфиге "ROSA_config.h" прописать определение регистров проца, количество обработчиков, не\использование фиксированных приоритетов, использование механизма очереди. В основной дериктории есть "рыба" "_ROSA_config.h", надо только оставить нужно, лишнее удалить/закомметировать.


    #include "stm32f10x.h" /* заголовочный файл для контроллера STM32 */

    #include <avr/io.h>
    #include <avr/interrupt.h> /* определение внутренних регистров МК */

    #define Event_Count 4 /* количество обработчиков */

    #define ROSA_ConstPriority /* массив приоритетов определяется в пользовательском файле */


    #define ROSA_WaitEvent_QUEUE /* использование очереди, если нет, то простой перебор */

    /* это только для AVR на другое не влияет */
    #define ROSA_AVR_SW_PENDBIT_PORTD3 /* бит вызова прерывания для переключения обработчиков */
    Вложения
    Последний раз редактировалось rual; 23.02.2016 в 20:53.

  6.  
  7. #6245

    Регистрация
    15.09.2011
    Адрес
    Москва
    Возраст
    45
    Сообщений
    5,920
    Записей в дневнике
    22
    нахаляву досталась платка flip32 по случаю затестил горизонт cleanflight визуально вроде бы не валится в ускорениях

  8. #6246

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от alexeykozin Посмотреть сообщение
    по случаю затестил горизонт cleanflight визуально вроде бы не валится в ускорениях
    Каким образом испытывал? Каруселькой?

  9. #6247

    Регистрация
    15.09.2011
    Адрес
    Москва
    Возраст
    45
    Сообщений
    5,920
    Записей в дневнике
    22
    линейно перемещал вдоль поверхности

  10.  
  11. #6248

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от alexeykozin Посмотреть сообщение
    линейно перемещал вдоль поверхности
    Линейно перемещать с ускорением долго нельзя, если постоянная времени коррекции большая, то завал будет не заметен. Лучше все таки крутить.

  12. #6249

    Регистрация
    15.09.2011
    Адрес
    Москва
    Возраст
    45
    Сообщений
    5,920
    Записей в дневнике
    22
    ну в арду даже при резких линейных перемещениях можно зафиксировать приличные отклонения
    сложилось мнение что нужно интегральную составляющую корекции гироскопов добавлять а пропорциональную от акселя уменьшить

  13. #6250

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от alexeykozin Посмотреть сообщение
    линейно перемещал вдоль поверхности
    Только "каруселькой"..

    Цитата Сообщение от alexeykozin Посмотреть сообщение
    сложилось мнение что нужно интегральную составляющую корекции гироскопов добавлять а пропорциональную от акселя уменьшить
    У кого сложилось ? если можно поподробнее.. как то, пока не встречал рабочего решения этой проблемы...

  14. #6251

    Регистрация
    15.09.2011
    Адрес
    Москва
    Возраст
    45
    Сообщений
    5,920
    Записей в дневнике
    22
    тема длинная но интересная https://github.com/cleanflight/cleanflight/issues/791

  15. #6252

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от alexeykozin Посмотреть сообщение
    сложилось мнение что нужно интегральную составляющую корекции гироскопов добавлять а пропорциональную от акселя уменьшить
    Не понял, интегральную коррекцию гиры от акселя или чего?
    У меня например аксель управляет ТОЛЬКО смещением ДУСа, т.е. исправляет интегральную ошибку, никакой пропорциональной составляющей.

  16. #6253

    Регистрация
    15.09.2011
    Адрес
    Москва
    Возраст
    45
    Сообщений
    5,920
    Записей в дневнике
    22
    смещение ДУС - через пропорциональный коэф между нормалью и горизонтом системы,
    а постоянная составляющая - долгосрочное среднее значение от этой компенсации, источником которой является характерное уплывание гироскопов

    в результате за счет уменьшения влияния от моментальной нормали можно достичь мньшей пропорции смещения чтоз пропорциональную и как следствие меньшее отклонение в перегрузках

  17. #6254

    Регистрация
    31.07.2015
    Адрес
    Нижний новгород
    Возраст
    45
    Сообщений
    244
    Борис запилил raceflight под F4 проц. интересно а cleanflight-подобные прошивки пойдут на F4BY? просто по набору датчиков она более продвинута чем KISSFC)))

  18. #6255

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,460
    Записей в дневнике
    8
    пойдут - драйвера для датчиков можно взять тут https://github.com/SergDoc/Nev_Multi...rmware/Release

    Цитата Сообщение от serg2557 Посмотреть сообщение
    Борис запилил raceflight под F4 проц
    там всё есть только подправить прошивку под железо...

  19. #6256

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от rual Посмотреть сообщение
    Публикую свой "велосипед", может кому пригодиться.
    А нельзя коротко пояснить - как ЭТО работает и что может ? (в чём "изюминка", так сказать.. )

  20. #6257

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от oleg70 Посмотреть сообщение
    А нельзя коротко пояснить
    Коротко уже объяснил, это движок программных прерываний с приоритетами, по сути замена замена надстройка над штатной системой прерываний. Т.е. у меня есть набор функций-обработчиков с набором вычислений, которые должны быть выполнены по какому-то событию. Приведу свой пример, нужно сделать следующее:
    Получить данные ДУС - Рассчитать новое положение ИНС - Рассчитать стабилизатор моментов - Рассчитать микшер - Вывалить в ШИМ.
    Можно сделать так:

    ISR_DUS()
    {
    Получить данные ДУС();
    Рассчитать новое положение ИНС();
    Рассчитать стабилизатор моментов();
    Рассчитать микшер ();
    Вывалить в ШИМ();
    }
    Всё хорошо, если больше ничего делать не нужно, но если еще параллельно идет опрос других устройств, то это недопустимо.
    Поэтому лучше сделать так:


    ISR_DUS()
    {
    Получить данные ДУС();
    ВыставимФлаг(ДУСГотов);
    }


    Loop{
    if (ДУСГотов) {
    Рассчитать новое положение ИНС();
    Рассчитать стабилизатор моментов();
    Рассчитать микшер ();
    Вывалить в ШИМ();
    }
    }
    Это способ разделить "железные" прерывания, с "быстрыми" обработчиками, и "медленные" обработчики-вычислители. Собственно для СТМ32 можно было использовать незадействованные "железные" вектора, и вызывать их поднятием бита в регистре прерываний соответствующего устройства. Но хотелось получить более универсальный, простой и управляемый механизм. Собственно в этом и изюминка.

    )) уже не очень коротко. Работает просто, запрос вызывает планировщик и ставит флажок, вызывается прерывание, которое последовательно в соответствии с приоритетами выбирает флажки и запускает обработчики. Всё.

  21. #6258

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от rual Посмотреть сообщение
    запрос вызывает планировщик
    А "запрос" кто, когда и как формирует ?? Это "конечный автомат на прерываниях" получается что ль ??
    Последний раз редактировалось oleg70; 05.03.2016 в 22:01.

  22. #6259

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от oleg70 Посмотреть сообщение
    А "запрос" кто, когда и как формирует ??
    ROSA_CallEvent(0);
    У меня запросы формируют обработчики "железных" прерываний, а дальше, допустим, обработчик расчета ИНС, вызывает обработчик микширов ШИМ, которые имееют более низкий приоритет относительно ИНС и стабилизатора. Так что если микшеры еще не досчитаются, а ДУС даст новые данные, то ИНС их не пропустит, прервет обсчет микширов.

    Собственно я пробные проекты выкладывал, под АВРстудио можно "поиграться" в софтовом симуляторе не прошивая кристал, как впрочем и в проекте под СТМ32Ф1 и кейл
    Вложения
    Последний раз редактировалось rual; 05.03.2016 в 22:08. Причина: добавил обновление РОСы

  23. #6260

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от rual Посмотреть сообщение
    можно "поиграться" в софтовом симуляторе
    крайний вопрос - реальные испытания были ?? А то у меня щас "КоОС" начала внезапно безбожно виснуть по непонятным причинам и надежды нарыть глюк мало... короче вопрос выкинуть ее нафиг остро назрел..

  24. #6261

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от oleg70 Посмотреть сообщение
    крайний вопрос - реальные испытания были ??
    Да, "виртуалка" СТМ32Ф4 и полетник на Ф3. На Ф1 испытывал только на демопроекте, но с ним всё прощще, не нужно контекст ФПУ сохранять. Так что будет работать.

    Цитата Сообщение от oleg70 Посмотреть сообщение
    А то у меня щас "КоОС" начала внезапно безбожно виснуть по непонятным причинам и надежды нарыть глюк мало... короче вопрос выкинуть ее нафиг остро назрел..
    Роса как бы не заменяет типовую ртос, она не может выполнять независимые ЦИКЛИЧЕСКИЕ задачи (хотя возможно зациклить две задачи, которые будут вызывать друг друга).
    Последний раз редактировалось rual; 06.03.2016 в 09:42.

  25. #6262

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    2oleg70
    Дополню кусками из своего проекта:
    hw_config.с - массив ссылок на обработчики и массив приоритетов (макс 254).
    Код:
    const Event_TypeDef _Event_List[] =  {
    	DUSCalc,
    	AccCalc,
    	Rdy_PWM1,
    	Rdy_PWM2,		
    	MagmCalc,
    	BaroCalc,
    	GNSSCalc,
    	Rdy_RC,
    	FrSky_Process,	
    };
    
    const Event_Priorety_TypeDef _Ev_Prior[] = {
    	0,1,2,2,3,4,4,5,6 };
    обработчики вызываются функцией ROSA_CallEvent(<номер обработчика в массиве 0-254>); чтоб не запоминать
    вносим в хедер hw_config.h перечислитель обработчиков,
    Код:
    typedef enum {
    	evDUS,	
    	evAcc,
    	evPWM1,
    	evPWM2,
    	evMag,
    	evBaro,
    	evGNSS,	
    	evRC,
    	evFRSKY,
    	evRXTerm,	
    } ROSA_Events;
    после чего используем вместо номеров названия событий

    Код:
    /*--------- вызовы методов по готовности данных датчиков ---------- */
    /* Аксель */ 
    void AccDataRdy(void)
    {	
    	AP.ГотовДанныхАкселя();
    	ROSA_CallEvent(evAcc);
    	
    #ifndef 	ACC_FILTER
    	Mag_Zapros();
    #endif	
    	
    }
    void AccCalc(void)
    {	
    	AP.РасчетПоАкселю(); 
    }
    
    /* ДУС */
    void DUSDataRdy(void)
    {
    	AP.ГотовДанныхДУС(); 
    	
    	ROSA_CallEvent(evDUS);
    }
    void DUSCalc(void)
    {	
    	AP.РасчетПоДУС(); 
    		
    	ROSA_CallEvent(evPWM1); /* обновим приводы */
    }
    
    /* магнитометр */
    void MagmDataRdy(void)
    {		
    	AP.ГотовДанныхМагнит();	
    	
    	AP.инс.Барометр.ЗапросДанных();
    	
    	ROSA_CallEvent(evMag);
    }
    
    void MagmCalc(void)
    {		
    	AP.РасчетПоМагнит();  
    }  
    
    /* барометр */
    void BaroDataRdy(void)
    {	
    	AP.ГотовДанныхБаро();	
    	
    	ROSA_CallEvent(evBaro);
    }
    
    void BaroCalc(void)
    {		 
    	AP.РасчетПоБаро();
    }
    /* ГНСС */	
    void GNSSCalc(void)
    {
    	glns.FrameRdy();
    }
    
    /* ППМ получен*/ 
    void Rdy_RC(void)
    {
    	ppm.rasch();
    }
    
    /* вывод кадра ШИМ завершен */ 
    void Rdy_PWM1(void)
    {
    	/* суммируем управление на приводы */
    	mixINS1.rasch(AP.инс.Крен*1024.0f,AP.инс.Тангаж*1024.0f,AP.инс.Рыск*1024.0f,AP.цУпрТяга);
    	mixPID1.rasch(AP.цУпрКрен,AP.цУпрТанг,AP.цУпрРыск,AP.цУпрТяга);
    	
    	ROSA_CallEvent(evPWM2);
    }
    
    /* вывод кадра ШИМ завершен */ 
    void Rdy_PWM2(void)
    {
    	/* суммируем управление на приводы */
    	mixINS2.rasch(AP.инс.Крен*1024.0f,AP.инс.Тангаж*1024.0f,AP.инс.Рыск*1024.0f,AP.инс.векРасстоянияИНС.z);
    	mixPID2.rasch(AP.цУпрКрен,AP.цУпрТанг,AP.цУпрРыск,AP.цУпрТяга);
    }
    В консоли для контроля пропусков обработки использую :
    Код:
    const char* str_hndlr[] = { "ДУС","Аксель","ШИМ1","ШИМ2","Магн.","Баро","ГНСС","Р/У","Телем.","Связь"};
    
    .........
    
    
    					t = millis()+1002;	 
    					while (getchar() == EOF){													
    						if (millis()-t > 1000){
    							printf("\r\nСистемное время: %d",millis());
    							printf("\r\nОбработчик \tСост.  \tСч.пропусков\r\n");
    							for (Event_Number_TypeDef i = 0;i<Event_Count;i++)
    							{
    								//char c*[] = {"Стп","Раб","Жд"};
    								char s;
    								switch(ROSA_GetStatEvent(i)){
    									case EVENT_WAIT:				s= 'W'; break;
    									
    									case EVENT_READY: 
    									case EVENT_RUN:					s= 'R'; break;
    									
    									case EVENT_BLOCK:
    									case EVENT_BLOCK_WAIT:	s= 'B'; break;
    									
    									default: s= 'S'; break;										
    								}
    								ROSA_InterruptDisable(); 							
    								int c = ROSA_GetFailCount(i);
    								ROSA_ResetFailCount(i);
    								ROSA_InterruptEnable();		
    								
    								printf("%s:\t\t%c\t%d\r\n",str_hndlr[i],s,c);		
    							}
    							printf("Обработчиков в ожидании: %d\r\n",ROSA_GetWaitingEvent());
    							
    							t = millis();										  	
    						}
    				  }
    Вывод:
    Код:
    Системное время: 412922264
    Обработчик      Сост.   Сч.пропусков
    ДУС:            S       0
    Аксель:         S       0
    ШИМ1:           S       0
    ШИМ2:           S       0
    Магн.:          S       0
    Баро:           S       0
    ГНСС:           S       0
    Р/У:            S       0
    Телем.:         S       40
    Обработчиков в ожидании: 0

  26. #6263

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    2SergDoc Сергей, поделись кодом для настройки МПУ9150, ну и особенностями, если не жалко )
    Решил тут попробовать новый кодогенератор для СТМ32, низы под ТауЛавс Спарки переделываю, ибо на эроплан у меня Ф4Бы не лезет.

  27. #6264

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,460
    Записей в дневнике
    8
    Цитата Сообщение от rual Посмотреть сообщение
    низы под ТауЛавс Спарки переделываю
    мелкую не дождался (
    дык у таулабсов и возьми - там довольно красиво драйвер расписан - спарки 2 на 9250 или у тебя 1-я на ф3?
    https://github.com/SergDoc/TauLabs/b...pios_mpu9150.c
    https://github.com/SergDoc/TauLabs/b..._mpu9250_spi.c
    ну и хедеры там же:
    https://github.com/SergDoc/TauLabs/b...pios_mpu9150.h
    https://github.com/SergDoc/TauLabs/b...pios_mpu9250.h
    только там ещё pios_mpu60x0.h прикручен, в нём дописаны регистры работы с акселем 6500
    https://github.com/SergDoc/TauLabs/b...pios_mpu60x0.h
    как им управлять из мелкой глянь:
    https://github.com/SergDoc/TauLabs/b...s_board.c#L428

    Цитата Сообщение от rual Посмотреть сообщение
    Решил тут попробовать новый кодогенератор для СТМ32
    он кривой - мама не горюй - сразу проверяй, чтобы все порты прописал, теряет порты из конфига....

  28. #6265

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от SergDoc Посмотреть сообщение
    мелкую не дождался (
    Та не... я ж спарки ещё около 2х лет назад купил. Да и
    Цитата Сообщение от SergDoc Посмотреть сообщение
    или у тебя 1-я на ф3?
    так что мелкая мне вполне интересна ) За ссылки спасибо!

    Цитата Сообщение от SergDoc Посмотреть сообщение
    он кривой - мама не горюй - сразу проверяй
    Так мне нужно только распределение ресурсов, вручную лень собирать. Решил немного поупражняться со скуки, ибо на крыло до вступления в силу закона вряд ли успею. Щас всё "пилю" на виртуалке, жаль адекватной модели коптера в ней нету...

  29. #6266

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,460
    Записей в дневнике
    8
    кстати смотрю, а в 9150 один регистр отвечает за фильтры, а не 2 как в 9250...

    Цитата Сообщение от rual Посмотреть сообщение
    так что мелкая мне вполне интересна )
    пошел дорисовывать)))

  30. #6267

    Регистрация
    12.05.2014
    Адрес
    Краснодар
    Возраст
    45
    Сообщений
    38
    Есть вопрос. У меня датчик MPU6050. Гира углы считает отлично. Если наклонять контроллер ( свой ) по осям в разные стороны, углы совпадают с углом акселерометра ( коррекции нет)
    Если вращать вокруг оси x,y на 360 град. и назад то погрешность 1-2 градуса. При движении вдоль стола по 2-м осям нули. Но стоит наклонять плату постепенно
    меняя ось , как бы по сфере но без вращения по оси z , то гиры начинают врать. Угол уходит прилично на 10-20 град. Это влияние осей друг на друга ?

  31. #6268

    Регистрация
    23.08.2011
    Адрес
    Краснодар
    Возраст
    38
    Сообщений
    950
    Записей в дневнике
    2
    Цитата Сообщение от Samer Посмотреть сообщение
    меняя ось , как бы по сфере но без вращения по оси z , то гиры начинают врать. Угол уходит прилично на 10-20 град. Это влияние осей друг на друга ?
    Нет, влияние осей очень незначительно может доли градуса ошибки даст. У вас скорее всего ошибка вычислений (округление или фильтр какой-нибудь), который отбрасывает низкие скорости, или более серьезная ошибка в алгоритме.

  32. #6269

    Регистрация
    12.05.2014
    Адрес
    Краснодар
    Возраст
    45
    Сообщений
    38
    Цитата Сообщение от alexmos Посмотреть сообщение
    Нет, влияние осей очень незначительно может доли градуса ошибки даст. У вас скорее всего ошибка вычислений (округление или фильтр какой-нибудь), который отбрасывает низкие скорости, или более серьезная ошибка в алгоритме.
    Ошибки нет. Также есть влияние оси z на y. Заметил что коптер при развороте вокруг оси уносит в сторону. Положил плату на стол. Углы по акселю и гирам 0.
    Вращаю плату вокруг оси и угол Y по гирам уходит на 5 градусов. Расчитал зависимость и внес в формулу. И теперь при вращении коптер висит в одной точке.

    Угол_гир_х= Угол_гир_х + данные_гир_х *0.00008;
    Угол_гир_y= Угол_гир_y + ( данные_гир_z*0.02 + данные_гир_y) * 0.00008;

    И какое время ставите на коррекцию гир по акселю. У меня стоит примерно 5 сек.
    При резких движениях платы вдоль стола гиры держат углы , если меньше то влияние есть.

  33. #6270

    Регистрация
    09.03.2016
    Адрес
    Новокузнецк
    Возраст
    39
    Сообщений
    30
    Цитата Сообщение от SergDoc Посмотреть сообщение
    Просмотрев множество вариантов систем стабилизации полёта, http://www.kkmulticopter.com/index.p...tics&Itemid=65 - эту штуку собрал сам, немецкие бутерброды не по карману, есть мысли по созданию собственного УНИВЕРСАЛЬНОГО контроллера для многомоторных систем, как пообещал знакомый программист не без исключения зачатков искуственного интеллекта (надеюсь). Преследую цель бесперебойной работы при потере связи с управляющей системой, выполнение задания и возврат на точку старта. Повторяюсь - бюджет очень урезан, каждое устройство будет собиратся вручную. Если есть мнения прошу кидаться помидорами. Старт разработок Июль 2011г.
    ИИ здесь вреден. Интеллект и так есть - это интеллект пилота. Ну ка, качество ручной стабилизации по крену при обычном полёте и когда будете находу выводить формулы вычисления углов отклонения элеронов? А отталкиваться надо от многоканального астатического регулятора. Разнообразные регуляторы и системы автоматического управления - моя профессия и на сколько они на самом деле просты могу рассказать, как специалист. Для универсальности делайте автопилот адаптивным.

  34. #6271

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    36
    Сообщений
    4,460
    Записей в дневнике
    8
    Цитата Сообщение от Samer Посмотреть сообщение
    Угол_гир_х= Угол_гир_х + данные_гир_х *0.00008;
    а что это?
    я так понимаю интегрирование должно быть, тогда что такое 0.00008 - яко бы время между отсчётами? но оно может быть разным....

    Цитата Сообщение от тарас-прогер Посмотреть сообщение
    ИИ здесь вреден. Интеллект и так есть - это интеллект пилота.
    не, не вреден, только в данном узле он не нужен )))

  35. #6272

    Регистрация
    12.05.2014
    Адрес
    Краснодар
    Возраст
    45
    Сообщений
    38
    Цитата Сообщение от SergDoc Посмотреть сообщение
    а что это?
    я так понимаю интегрирование должно быть, тогда что такое 0.00008 - яко бы время между отсчётами? но оно может быть разным....


    Время одинаковое. В секунду у меня проходит 380 считываний датчика. И в зависимости от диапазона измерений гиры это число будет разное.
    Проделал эксперимент. Плата на столе. Поднимаю и медленно вращаю по х на 360 градусов , кладу. Насчитал 365. Далее в обратную сторону и на стол , угол 1 гр.
    И за 4 полных таких цикла угол 0 градусов. Коррекции по акселю убрал.

  36. #6273

    Регистрация
    15.09.2011
    Адрес
    Москва
    Возраст
    45
    Сообщений
    5,920
    Записей в дневнике
    22
    Цитата Сообщение от Samer Посмотреть сообщение
    Время одинаковое. В секунду у меня проходит 380 считываний датчика.
    в поликлинике тоже может быть средняя температура 36,6 но у одних она еще 40 а у других комнатная.
    нужно брать реальное дельта времени за период измерения а не среднее за секунду

  37. #6274

    Регистрация
    12.05.2014
    Адрес
    Краснодар
    Возраст
    45
    Сообщений
    38
    Цитата Сообщение от alexeykozin Посмотреть сообщение
    в поликлинике тоже может быть средняя температура 36,6 но у одних она еще 40 а у других комнатная.
    нужно брать реальное дельта времени за период измерения а не среднее за секунду
    Это не влияет абсолютно на результат. Есть у кого конкретные примеры со
    своего железа.

  38. #6275

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    40
    Сообщений
    1,471
    Цитата Сообщение от Samer Посмотреть сообщение
    Угол_гир_х= Угол_гир_х + данные_гир_х *0.00008;
    Угол_гир_y= Угол_гир_y + ( данные_гир_z*0.02 + данные_гир_y) * 0.00008;
    Методический косяк: линейное интегрирование каждой оси в отдельности правильной ориентации в 3х мерном пространстве не даст никогда! Ну разве что в случае вращения идеально вокруг одной оси. Интегрирование необходимо выполнять через матрицу поворота или кватернион.

  39. #6276

    Регистрация
    23.08.2011
    Адрес
    Краснодар
    Возраст
    38
    Сообщений
    950
    Записей в дневнике
    2
    Цитата Сообщение от Samer Посмотреть сообщение
    Ошибки нет. Также есть влияние оси z на y. Заметил что коптер при развороте вокруг оси уносит в сторону. Положил плату на стол. Углы по акселю и гирам 0.
    У вас нерабочий алгоритм определения ориентации, а вы уже коптером рулите??? Есть же методика разработки, разбиение на изолированные функции. Такой подход как у вас, когда по наблюдению за работой сложной системы, пытаться найти ошибку в ее подсистеме, не даст хороших результатов.

  40. #6277

    Регистрация
    12.05.2014
    Адрес
    Краснодар
    Возраст
    45
    Сообщений
    38
    Цитата Сообщение от alexmos Посмотреть сообщение
    У вас нерабочий алгоритм определения ориентации, а вы уже коптером рулите??? .
    Ошибочное мнение. Коптер отлично держит горизонт, получше всяких готовых прошивок . Могу продемонстрировать , живем в одном городе.
    Для полета задаем угол по оси , с пульта. Коптер наклоняется и автоматом добавляет газ обратно пропорционально COS угла наклона.

    Доб_газ= 70/(COS(угол_наклона)) -70 , например при 30 град. добавляем 11 единиц шим

    Также есть автомат увеличения газа по измерению напряжения батареи , при снижении напряжения на 2 V добавляется примерно 20 единиц. У меня был тока один недочет. При горизонтальном полете ,когда сбрасывал угол , коптер уходил вверх метров на 5-7. На регуляторах стояла прошивка с неработающим торможением Damped и при выравнивании коптера 1-1.5 сек оставались повышенные обороты, больше чем надо для висения.
    Прошил более старой версией и торможение заработало. Пока не проверил , погода у нас фиговая. Ну а вообще управление на 3DR Radio модемах.
    Пульт свой( модернизированная Turnigy 9x ), протокол передачи свой. На пульт приходит информация с коптера ( GPS данные, напряжение батареи) и выводится на олед дисплей 20х4 .
    При разряде батареи на коптере , в пульте пищит зумер.
    Последний раз редактировалось Samer; 20.03.2016 в 01:08.

  41. #6278

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от Samer Посмотреть сообщение
    Но стоит наклонять плату постепенно
    меняя ось , как бы по сфере но без вращения по оси z , то гиры начинают врать. Угол уходит прилично на 10-20 град. Это влияние осей друг на друга ?
    А мне кажется, что ошибка при медленном вращении платы это результат банального шума гиры (так и должно быть), а вот как раз коррекция по акселю для устранения этого шума и нужна, НО не раз в пять секунд !, а каждую итерацию с частотой расчета ИМУ... (А формула связывающая разные оси через линейный коэф. приведет к непредсказуемым результатам на разных режимах полета..)

  42. #6279

    Регистрация
    12.05.2014
    Адрес
    Краснодар
    Возраст
    45
    Сообщений
    38
    Цитата Сообщение от oleg70 Посмотреть сообщение
    а вот как раз коррекция по акселю для устранения этого шума и нужна, НО не раз в пять секунд !, а каждую итерацию с частотой расчета ИМУ...
    Так и происходит формула :
    угол_гир_х = угол_гир_х * 0.999 + угол_акселя_х * 0.001
    Каждое измерение приближает значение угла гиры к углу акселя. Если у меня 380 измерений в сек. то для коррекции за 3 сек надо коэф. 1/(3*380 ) примерно.
    Никакого шума гир нет. Я калибрую их при включении питания. Делаю 4000 измерений , нахожу среднее для каждой оси , и этот коэф. вычитаю при каждом считывании данных.
    Тут все просто. Если мы по Х наклоним на 45 градусов , а потом по Y на 45гр.( относительно оси X ) то для оси земли это уже не 45 гр. Более лучше это понять если наклоним в право или лево на 90 градусов. Тогда ось Y вообще теряет смысл как ось , которая показывает наклон относительно земли., она превращается в Z. Но для отличной стабилизации хватает по PID регулятору на каждую ось.

  43. #6280

    Регистрация
    26.11.2012
    Адрес
    Tambov
    Возраст
    46
    Сообщений
    777
    Цитата Сообщение от Samer Посмотреть сообщение
    угол_гир_х = угол_гир_х * 0.999 + угол_акселя_х * 0.001
    Всё правильно, если так, и больше ничего не нужно.... (старый добрый комплементарный фильтр") ищите косяк в другом месте... начиная с "сырых" данных датчиков и до выходных показаний PIDa...

+ Ответить в теме

Похожие темы

  1. Система стабилизации гиро+акселерометр
    от Фантомас в разделе Полеты по камере, телеметрия
    Ответов: 32
    Последнее сообщение: 25.01.2011, 14:47
  2. Продам Продам Клона Trex 450SEV2 + Аппаратура + Запчасти+ система стабилизации RTF
    от omegapraim в разделе Барахолка. Вертолеты
    Ответов: 1
    Последнее сообщение: 12.01.2011, 18:16
  3. Продам Трёхосевую систему стабилизации Turnigy V-Bar 600
    от avi@tor в разделе Барахолка. Аппаратура
    Ответов: 1
    Последнее сообщение: 08.11.2010, 13:02
  4. Продам Gaui система стабилизации GU365, дёшево.
    от avi@tor в разделе Барахолка. Вертолеты
    Ответов: 3
    Последнее сообщение: 03.08.2010, 11:13
  5. Системы стабилизации
    от max815 в разделе Фото и видеосъемка, системы стабилизации
    Ответов: 16
    Последнее сообщение: 11.03.2010, 03:14

Метки этой темы

Ваши права

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