Специальные цены   новые товары
Закрытая тема
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 40 из 48

Уголок коптер-программиста

Тема раздела Квадрокоптеры. Общие вопросы в категории Квадрокоптеры и мультироторы; Предлагаю здесь складывать полезные ссылки, наработки, решения (стандартные и оригинальные) связанные с программированием коптеров и подвесов. Очень хотелось бы видеть ...

  1. #1

    Регистрация
    04.08.2012
    Адрес
    Бруклин, США
    Возраст
    46
    Сообщений
    435

    Уголок коптер-программиста

    Предлагаю здесь складывать полезные ссылки, наработки, решения (стандартные и оригинальные) связанные с программированием коптеров и подвесов. Очень хотелось бы видеть компактно, в одном месте, что-то типа склада информации по следующим темам:

    алгоритмы полета и стабилизации
    снятие и обработка показаний датчиков
    организация управления
    трехмерные расчеты
    оптимизация кода для различных платформ
    и т.д. в том же духе.

    (А то сегодня убил 3 часа, пытаясь найти одну ссылку, которую я видел на форуме месяц назад, но не помню где и по какому поводу...)

    Внесу первую лепту:

    интересный документ об аппроксимации основных тригонометрических функций.

  2.  
  3. #2

    Регистрация
    17.06.2011
    Адрес
    Минск
    Возраст
    40
    Сообщений
    1,941
    Последний раз редактировалось Sir Alex; 10.01.2013 в 12:04.

  4. #3

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    39
    Сообщений
    2,299
    Записей в дневнике
    19
    Последний раз редактировалось mahowik; 10.01.2013 в 21:50.

  5. #4

    Регистрация
    04.08.2012
    Адрес
    Бруклин, США
    Возраст
    46
    Сообщений
    435
    Александр, мне Ваша тема не попалась на глаза, прошу прощения... В любом случае, хотелось бы не только о новостях и передовых технологиях, а вообще обо всем, связанным с программированием коптеров. Скажем, есть вещи, очевидные для Вас, но далеко не очевидные для чайника вроде меня

    Кстати, именно Ваши ссылки, шедро разбросанные по всему форуму, особенно хотелось бы свести в кучку...

  6.  
  7. #5

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    39
    Сообщений
    2,299
    Записей в дневнике
    19
    я не к тому, что тема не правильная, а то что там тоже ссылки полезные есть...

    upd: да и сам я новичек во многих вопросах... классика: чем больше знаем, тем больше не знаем

  8. #6

    Регистрация
    06.07.2012
    Адрес
    DP
    Возраст
    28
    Сообщений
    370
    приветствую, самого очень интересует тема программирования "под коптеры"

    может у кого либо есть наработки крайне простого контроллера только на гироскопах написанного на С? или исходники "раннего" мультивия
    т.е. чтобы была простейшая связь - приемника - гироскоп - моторы, без каких либо других фич

  9. #7

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    39
    Сообщений
    2,299
    Записей в дневнике
    19
    так это лучше взять из свежей версии, но только то, что к акро моду относится... посмотрите MultiWii.ino, снизу конечный пид регулятор, на "сырых" (но слегка усредненных) показаниях гиры...

  10.  
  11. #8

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    37
    Сообщений
    4,528
    Записей в дневнике
    9
    Цитата Сообщение от sergebezborodov Посмотреть сообщение
    т.е. чтобы была простейшая связь - приемника - гироскоп - моторы, без каких либо других фич
    Кук http://kkmulticopter.com/index.php?o...layout=default есть на Си и на Ассеме...

  12. #9

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    39
    Сообщений
    2,299
    Записей в дневнике
    19
    самые внятные толкования из того что читал пока:
    1) Комплементарный фильтр http://we.easyelectronics.ru/quadro_...nyy-filtr.html
    правда к моменту прочтения, я уже досконально понял его из mwii...
    2) фильтр Кальмана - кратко, но хотя бы чутка стало понятно что это такое..

  13. #10

    Регистрация
    19.04.2010
    Адрес
    Ханты
    Возраст
    41
    Сообщений
    1,497
    Ну и я добавлю http://www.gamedev.ru/code/articles/?id=4215&page=2
    Лигбез о кватернионам , мой проект на них плолностью построен.

  14. #11
    DVE
    DVE вне форума

    Регистрация
    16.06.2008
    Адрес
    EU
    Возраст
    38
    Сообщений
    4,392
    Пол дня потратил чтобы нормально подключить Crius LCD, оказалось 2 подводных камня:
    - встроенная i2c-библиотека Wire для Arduino почему-то так и не заработала, код скопированный из Multiwii работает нормально. Хз в чем там разница, разбираться стало влом.
    - экранчику нужно 2 подтягивающих резистора на i2c, иначе вообще не запускается, и кондер на питание к разъему, иначе на экране мусор.

    Результат - вполне удобное средство отладки за 7$, всего с 4 проводами
    Миниатюры Миниатюры Нажмите на изображение для увеличения
Название: CriusLCD.jpg‎
Просмотров: 87
Размер:	13.2 Кб
ID:	739065  

  15. #12

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    39
    Сообщений
    2,299
    Записей в дневнике
    19
    там проблема в цепи питания... 5в ему много, надо 3.3в
    а подтяжки можно и ардуиновские врубить, но я не трогал...

  16. #13
    DVE
    DVE вне форума

    Регистрация
    16.06.2008
    Адрес
    EU
    Возраст
    38
    Сообщений
    4,392
    Да, про это я читал, но резать дорожки точно влом, кондер на питание спасает нормально от просадок. Больше интересно почему штатная библиотека не заработала, а код скопипастенный из Wii работает.

    Вот этот код например не работает, а по сути вроде то же самое. Единственное что приходит в голову, скорости i2c может разные.

  17. #14

    Регистрация
    17.09.2012
    Адрес
    Санкт-Петербург
    Возраст
    37
    Сообщений
    202
    http://www.colibrys.com/e/page/300/ хорошие аксели и прочие мемс сенсоры.

  18. #15

    Регистрация
    04.08.2012
    Адрес
    Бруклин, США
    Возраст
    46
    Сообщений
    435
    Стыдно Сам открыл тему и ничего практически не написал... Вот хочу поделиться такими замечательными аппроксимациями (надергал в разных местах, малость адаптировал под ардуину, вовсю применяю в софте своего подвеса):

    Синус и косинус. Четыре или пять умножений, несколько сложений, на выходе результат, отличимый от настоящего только под микроскопом. Магия-с!

    Код:
     
    float _sin (float x) { 
    x = x * 0.31831f;
    float y = x - x * abs(x); 
    return y * (3.1f + 3.6f * abs(y)); 
    }
     
    float _cos (float x) { 
    x = x * 0.31831f + 0.5f;
    float z = (x + 25165824.0f); 
    x = x - (z - 25165824.0f); 
    float y = x - x * abs(x); 
    return y * (3.1f + 3.6f * abs(y)); 
    }
    Арктангенс. Прошу заметить -- не atan2, и не целочисленный, а самый обычный, с плавающей точкой, полностью заменяющий родной atan:

    Код:
     
    float _atan( float x )
    {
        uint32_t ux_s  = 0x80000000 & (uint32_t &)x;
        float bx_a = ::fabs( 0.596227f * x ); 
        float num = bx_a + x * x;
        float atan_1q = num / ( 1.f + bx_a + num );
        uint32_t atan_2q = ux_s | (uint32_t &)atan_1q;
        return (float &)atan_2q * 1.5708f;
    }
    Ну и на закуску, инвертированнный квадратный корень 1/sqrt(x) с аутентичным комментарием Джона Кармака в самом интересном месте:

    Код:
     
    float isqrt( float y )
    {
    float x2 = y * 0.5f;
    long i = * ( long * ) &y;    //evil floating point bit level hacking
    i = 0x5f3759df - ( i >> 1 ); //what the fuck?
    y = * ( float * ) &i;
    y = y * ( 1.5f - ( x2 * y * y ) );
    return y;
    }

  19. #16

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    39
    Сообщений
    2,299
    Записей в дневнике
    19
    Цитата Сообщение от Gene Посмотреть сообщение
    инвертированнный квадратный корень 1/sqrt(x)
    а вот виевский вариант схожий
    Код:
    float InvSqrt (float x){ 
      union{  
        int32_t i;  
        float   f; 
      } conv; 
      conv.f = x; 
      conv.i = 0x5f3759df - (conv.i >> 1); 
      return 0.5f * conv.f * (3.0f - x * conv.f * conv.f);
    }
    Цитата Сообщение от Gene Посмотреть сообщение
    не atan2, и не целочисленный
    целочисленный тоже может быть полезен
    Код:
    int16_t _atan2(float y, float x){
      #define fp_is_neg(val) ((((uint8_t*)&val)[3] & 0x80) != 0)
      float z = y / x;
      int16_t zi = abs(int16_t(z * 100)); 
      int8_t y_neg = fp_is_neg(y);
      if ( zi < 100 ){
        if (zi > 10) 
         z = z / (1.0f + 0.28f * z * z);
       if (fp_is_neg(x)) {
         if (y_neg) z -= PI;
         else z += PI;
       }
      } else {
       z = (PI / 2.0f) - z / (z * z + 0.28f);
       if (y_neg) z -= PI;
      }
      z *= (180.0f / PI * 10); 
      return z;
    }
    ну и простейшие аппроксимации для малых углов
    Код:
    // Small angle approximation
    #define ssin(val) (val)
    #define scos(val) 1.0f

  20. #17

    Регистрация
    27.12.2000
    Адрес
    С-Петербург
    Возраст
    42
    Сообщений
    1,747
    Цитата Сообщение от Sir Alex Посмотреть сообщение
    Сказали, А, говорите и В в смысле, register map..
    Увы, я свой выложить не могу, лицензионное соглашение сдуру на себя подписал.

  21. #18

    Регистрация
    04.08.2012
    Адрес
    Бруклин, США
    Возраст
    46
    Сообщений
    435
    Цитата Сообщение от mahowik Посмотреть сообщение
    целочисленный тоже может быть полезен
    Конечно же, я просто думал, мультивиевский код и так у каждого всегда есть в виде справочника
    И кстати его можно немного убыстрить, имхо, введя пару констант (например, зачем каждый раз заново вычислять (180.0f / PI * 10)?)

  22. #19

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    39
    Сообщений
    2,299
    Записей в дневнике
    19
    Цитата Сообщение от Gene Посмотреть сообщение
    зачем каждый раз заново вычислять (180.0f / PI * 10)
    такие штуки компилятор оптимизирует обычно...

    на работе быстро накидал на java тестик... в аппроксимированной _sin(x), в сравнении с библиотечной sin(x), точность примерно 2 знака после запятой (иногда 3)... корректно работает только в диапазоне -180..180, т.е. надо приводить к этому диапазону...
    Код:
    static float _sin (float x) {
            x = x * 0.31831f;
            float y = x - x * Math.abs(x);
            return y * (3.1f + 3.6f * Math.abs(y));
        }
    
        public static void main(String[] args) {
            for(int i=-180; i<=180; i++) {
                System.out.println("angle=" + i + ", _sin=" + _sin((float)(i*Math.PI/180.0f))+ ", sin=" + Math.sin((float)(i*Math.PI/180.0f)));
            }
        }
    Код:
    angle=-180, _sin=1.1086468E-6, sin=8.742278000372475E-8
    angle=-179, _sin=-0.01723531, sin=-0.017452458569748835
    angle=-178, _sin=-0.034495354, sin=-0.03489945001597251
    angle=-177, _sin=-0.051771555, sin=-0.05233604896389903
    angle=-176, _sin=-0.0690567, sin=-0.06975646775156666
    angle=-175, _sin=-0.086343676, sin=-0.08715563828410712
    angle=-174, _sin=-0.10362564, sin=-0.10452849777816209
    angle=-173, _sin=-0.12089543, sin=-0.121869279728557
    angle=-172, _sin=-0.13814639, sin=-0.139173175634592
    angle=-171, _sin=-0.15537152, sin=-0.15643444188190603
    angle=-170, _sin=-0.17256433, sin=-0.17364829201905368
    angle=-169, _sin=-0.18971775, sin=-0.19080901232021316
    angle=-168, _sin=-0.20682546, sin=-0.20791161100620165
    angle=-167, _sin=-0.22388165, sin=-0.22495111082672528
    angle=-166, _sin=-0.24087885, sin=-0.24192185592737964
    angle=-165, _sin=-0.25781164, sin=-0.25881914041658916
    angle=-164, _sin=-0.27467316, sin=-0.2756373556449271
    angle=-163, _sin=-0.29145747, sin=-0.29237161001566847
    angle=-162, _sin=-0.3081592, sin=-0.3090170329201147
    angle=-161, _sin=-0.3247713, sin=-0.3255680993082677
    angle=-160, _sin=-0.34128875, sin=-0.3420202196630839
    angle=-159, _sin=-0.35770506, sin=-0.3583679330967232
    angle=-158, _sin=-0.37401477, sin=-0.37460648542290864
    angle=-157, _sin=-0.39021266, sin=-0.3907311497427947
    angle=-156, _sin=-0.4062925, sin=-0.40673657385973994
    angle=-155, _sin=-0.4222493, sin=-0.42261831956021456
    angle=-154, _sin=-0.4380774, sin=-0.4383711152786025
    angle=-153, _sin=-0.45377177, sin=-0.45399059285379917
    angle=-152, _sin=-0.46932665, sin=-0.4694715677738196
    angle=-151, _sin=-0.4847377, sin=-0.4848095387263436
    angle=-150, _sin=-0.49999925, sin=-0.5000000401463156
    angle=-149, _sin=-0.51510644, sin=-0.5150380299101248
    angle=-148, _sin=-0.5300546, sin=-0.5299193380683128
    angle=-147, _sin=-0.54483837, sin=-0.5446390251265764
    angle=-146, _sin=-0.55945355, sin=-0.5591928117410372
    angle=-145, _sin=-0.57389545, sin=-0.5735764600386035
    angle=-144, _sin=-0.5881591, sin=-0.5877851957112599
    angle=-143, _sin=-0.6022406, sin=-0.6018150787570143
    angle=-142, _sin=-0.61613524, sin=-0.6156614522917649
    angle=-141, _sin=-0.6298385, sin=-0.6293204767944899
    angle=-140, _sin=-0.64334637, sin=-0.6427876184787104
    angle=-139, _sin=-0.6566547, sin=-0.6560589630454696
    angle=-138, _sin=-0.6697596, sin=-0.6691306451399875
    angle=-137, _sin=-0.68265647, sin=-0.6819983259300492
    angle=-136, _sin=-0.69534194, sin=-0.6946584372805921
    angle=-135, _sin=-0.70781195, sin=-0.7071067769704655
    angle=-134, _sin=-0.72006273, sin=-0.7193397275260623
    angle=-133, _sin=-0.7320911, sin=-0.7313537253154444
    angle=-132, _sin=-0.7438928, sin=-0.7431447825794036
    angle=-131, _sin=-0.75546485, sin=-0.7547096297244889
    angle=-130, _sin=-0.7668034, sin=-0.7660444280763049
    angle=-129, _sin=-0.7779053, sin=-0.7771460345594151
    angle=-128, _sin=-0.78876746, sin=-0.788010764261082
    angle=-127, _sin=-0.7993865, sin=-0.7986354609693695
    angle=-126, _sin=-0.80975956, sin=-0.8090170284743339
    angle=-125, _sin=-0.8198833, sin=-0.8191520208629542
    angle=-124, _sin=-0.8297553, sin=-0.8290376277591972
    angle=-123, _sin=-0.83937204, sin=-0.8386705678723035
    angle=-122, _sin=-0.8487313, sin=-0.8480480436999007
    angle=-121, _sin=-0.85783035, sin=-0.8571673215990291
    angle=-120, _sin=-0.8666663, sin=-0.8660253746435105
    angle=-119, _sin=-0.875237, sin=-0.8746197465453652
    angle=-118, _sin=-0.8835396, sin=-0.8829475846084057
    angle=-117, _sin=-0.8915722, sin=-0.8910064713304968
    angle=-116, _sin=-0.8993323, sin=-0.8987940564403286
    angle=-115, _sin=-0.90681773, sin=-0.906307755035292
    angle=-114, _sin=-0.9140264, sin=-0.9135454351225024
    angle=-113, _sin=-0.9209564, sin=-0.9205048397714333
    angle=-112, _sin=-0.9276055, sin=-0.9271838490750671
    angle=-111, _sin=-0.93397224, sin=-0.9335804285377239
    angle=-110, _sin=-0.9400546, sin=-0.9396926296947897
    angle=-109, _sin=-0.945851, sin=-0.9455185907062396
    angle=-108, _sin=-0.95135975, sin=-0.9510565000860774
    angle=-107, _sin=-0.9565795, sin=-0.9563047465779703
    angle=-106, _sin=-0.9615086, sin=-0.9612616927007172
    angle=-105, _sin=-0.9661457, sin=-0.9659258285169886
    angle=-104, _sin=-0.9704895, sin=-0.9702957332825187
    angle=-103, _sin=-0.9745392, sin=-0.9743700758788791
    angle=-102, _sin=-0.9782931, sin=-0.9781475904339476
    angle=-101, _sin=-0.98175067, sin=-0.9816271778787736
    angle=-100, _sin=-0.98491067, sin=-0.9848077514785853
    angle=-99, _sin=-0.98777235, sin=-0.9876883423975937
    angle=-98, _sin=-0.9903349, sin=-0.9902680731778534
    angle=-97, _sin=-0.9925977, sin=-0.9925461580065456
    angle=-96, _sin=-0.99455994, sin=-0.9945218904945822
    angle=-95, _sin=-0.9962212, sin=-0.9961946958020256
    angle=-94, _sin=-0.9975811, sin=-0.9975640498470272
    angle=-93, _sin=-0.9986391, sin=-0.9986295355101066
    angle=-92, _sin=-0.999395, sin=-0.9993908282332523
    angle=-91, _sin=-0.99984866, sin=-0.9998476961187852
    angle=-90, _sin=-1.0, sin=-0.999999999999999
    angle=-89, _sin=-0.9998488, sin=-0.9998476955640354
    angle=-88, _sin=-0.99939513, sin=-0.9993908271239197
    angle=-87, _sin=-0.99863917, sin=-0.9986295338465291
    angle=-86, _sin=-0.9975811, sin=-0.9975640476297116
    angle=-85, _sin=-0.9962213, sin=-0.9961946930316474
    angle=-84, _sin=-0.99456, sin=-0.9945218996327513
    angle=-83, _sin=-0.99259776, sin=-0.9925461541327456
    angle=-82, _sin=-0.9903351, sin=-0.9902680687540267
    angle=-81, _sin=-0.9877725, sin=-0.9876883374250879
    angle=-80, _sin=-0.98491085, sin=-0.9848077459589151
    angle=-79, _sin=-0.9817509, sin=-0.9816271945598252
    angle=-78, _sin=-0.9782934, sin=-0.978147608610166
    angle=-77, _sin=-0.97453934, sin=-0.9743700687284713
    angle=-76, _sin=-0.9704898, sin=-0.9702957255926664
    angle=-75, _sin=-0.96614593, sin=-0.9659258202900343
    angle=-74, _sin=-0.9615088, sin=-0.9612616839391669
    angle=-73, _sin=-0.9565797, sin=-0.9563047721379165
    angle=-72, _sin=-0.9513601, sin=-0.9510565271012029
    angle=-71, _sin=-0.9458514, sin=-0.9455185803575653
    angle=-70, _sin=-0.94005495, sin=-0.9396926188231635
    angle=-69, _sin=-0.9339726, sin=-0.9335804171464573
    angle=-68, _sin=-0.9276059, sin=-0.9271838371676302
    angle=-67, _sin=-0.92095673, sin=-0.9205048739302341
    angle=-66, _sin=-0.9140268, sin=-0.9135454706805514
    angle=-65, _sin=-0.90681815, sin=-0.9063077919817579
    angle=-64, _sin=-0.8993327, sin=-0.8987940425060401
    angle=-63, _sin=-0.89157265, sin=-0.891006511019614
    angle=-62, _sin=-0.88354015, sin=-0.8829475696855424
    angle=-61, _sin=-0.8752374, sin=-0.8746197311349614
    angle=-60, _sin=-0.86666685, sin=-0.8660254183549017
    angle=-59, _sin=-0.8578308, sin=-0.8571673052277671
    angle=-58, _sin=-0.84873194, sin=-0.84804809002692
    angle=-57, _sin=-0.83937275, sin=-0.8386705830231456
    angle=-56, _sin=-0.8297557, sin=-0.8290375766539163
    angle=-55, _sin=-0.81988394, sin=-0.8191520368187817
    angle=-54, _sin=-0.80976015, sin=-0.8090170097906934
    angle=-53, _sin=-0.7993872, sin=-0.7986355135817145
    angle=-52, _sin=-0.7887682, sin=-0.7880107446913527
    angle=-51, _sin=-0.77790606, sin=-0.7771459770451031
    angle=-50, _sin=-0.76680404, sin=-0.7660444459574578
    angle=-49, _sin=-0.7554653, sin=-0.7547095697664989
    angle=-48, _sin=-0.74389344, sin=-0.7431448410766628
    angle=-47, _sin=-0.7320918, sin=-0.7313537036370974
    angle=-46, _sin=-0.7200635, sin=-0.7193397882550321
    angle=-45, _sin=-0.70781267, sin=-0.7071067966408575
    angle=-44, _sin=-0.6953426, sin=-0.6946583715393003
    angle=-43, _sin=-0.6826571, sin=-0.6819983462749459
    angle=-42, _sin=-0.66976017, sin=-0.6691306215180083
    angle=-41, _sin=-0.6566555, sin=-0.6560590290242818
    angle=-40, _sin=-0.6433472, sin=-0.6427875941288312
    angle=-39, _sin=-0.6298393, sin=-0.6293204057702271
    angle=-38, _sin=-0.616136, sin=-0.6156614742127549
    angle=-37, _sin=-0.6022415, sin=-0.6018150057687945
    angle=-36, _sin=-0.58816016, sin=-0.587785266437776
    angle=-35, _sin=-0.5738963, sin=-0.5735764340006195
    angle=-34, _sin=-0.5594545, sin=-0.5591928842178098
    angle=-33, _sin=-0.5448393, sin=-0.5446390484568276
    angle=-32, _sin=-0.53005534, sin=-0.5299192605642203
    angle=-31, _sin=-0.51510733, sin=-0.5150380537549213
    angle=-30, _sin=-0.5000001, sin=-0.5000000126183913
    angle=-29, _sin=-0.4847386, sin=-0.48480961518803195
    angle=-28, _sin=-0.46932775, sin=-0.46947156602188633
    angle=-27, _sin=-0.4537726, sin=-0.45399051142368685
    angle=-26, _sin=-0.43807837, sin=-0.4383711402813771
    angle=-25, _sin=-0.42225024, sin=-0.42261826374177747
    angle=-24, _sin=-0.40629345, sin=-0.40673665372442463
    angle=-23, _sin=-0.39021346, sin=-0.3907311204831585
    angle=-22, _sin=-0.3740158, sin=-0.37460659411213343
    angle=-21, _sin=-0.35770595, sin=-0.3583679590671898
    angle=-20, _sin=-0.34128952, sin=-0.34202013378349166
    angle=-19, _sin=-0.32477233, sin=-0.32556815378948123
    angle=-18, _sin=-0.30816013, sin=-0.3090170026893479
    angle=-17, _sin=-0.2914587, sin=-0.2923716936184902
    angle=-16, _sin=-0.2746742, sin=-0.27563735373760395
    angle=-15, _sin=-0.2578126, sin=-0.25881905213951417
    angle=-14, _sin=-0.24087997, sin=-0.2419218973777306
    angle=-13, _sin=-0.22388259, sin=-0.2249510508164115
    angle=-12, _sin=-0.20682673, sin=-0.20791169651858482
    angle=-11, _sin=-0.18971878, sin=-0.19080899574509624
    angle=-10, _sin=-0.1725652, sin=-0.17364817266677937
    angle=-9, _sin=-0.15537256, sin=-0.1564344693575539
    angle=-8, _sin=-0.13814743, sin=-0.13917309988899462
    angle=-7, _sin=-0.12089655, sin=-0.12186934431456582
    angle=-6, _sin=-0.1036267, sin=-0.10452846616578243
    angle=-5, _sin=-0.08634476, sin=-0.0871557402186753
    angle=-4, _sin=-0.06905769, sin=-0.06975647320464423
    angle=-3, _sin=-0.051772516, sin=-0.05233595769799333
    angle=-2, _sin=-0.034496363, sin=-0.03489949643226648
    angle=-1, _sin=-0.01723643, sin=-0.017452406302104498
    angle=0, _sin=0.0, sin=0.0
    angle=1, _sin=0.01723643, sin=0.017452406302104498
    angle=2, _sin=0.034496363, sin=0.03489949643226648
    angle=3, _sin=0.051772516, sin=0.05233595769799333
    angle=4, _sin=0.06905769, sin=0.06975647320464423
    angle=5, _sin=0.08634476, sin=0.0871557402186753
    angle=6, _sin=0.1036267, sin=0.10452846616578243
    angle=7, _sin=0.12089655, sin=0.12186934431456582
    angle=8, _sin=0.13814743, sin=0.13917309988899462
    angle=9, _sin=0.15537256, sin=0.1564344693575539
    angle=10, _sin=0.1725652, sin=0.17364817266677937
    angle=11, _sin=0.18971878, sin=0.19080899574509624
    angle=12, _sin=0.20682673, sin=0.20791169651858482
    angle=13, _sin=0.22388259, sin=0.2249510508164115
    angle=14, _sin=0.24087997, sin=0.2419218973777306
    angle=15, _sin=0.2578126, sin=0.25881905213951417
    angle=16, _sin=0.2746742, sin=0.27563735373760395
    angle=17, _sin=0.2914587, sin=0.2923716936184902
    angle=18, _sin=0.30816013, sin=0.3090170026893479
    angle=19, _sin=0.32477233, sin=0.32556815378948123
    angle=20, _sin=0.34128952, sin=0.34202013378349166
    angle=21, _sin=0.35770595, sin=0.3583679590671898
    angle=22, _sin=0.3740158, sin=0.37460659411213343
    angle=23, _sin=0.39021346, sin=0.3907311204831585
    angle=24, _sin=0.40629345, sin=0.40673665372442463
    angle=25, _sin=0.42225024, sin=0.42261826374177747
    angle=26, _sin=0.43807837, sin=0.4383711402813771
    angle=27, _sin=0.4537726, sin=0.45399051142368685
    angle=28, _sin=0.46932775, sin=0.46947156602188633
    angle=29, _sin=0.4847386, sin=0.48480961518803195
    angle=30, _sin=0.5000001, sin=0.5000000126183913
    angle=31, _sin=0.51510733, sin=0.5150380537549213
    angle=32, _sin=0.53005534, sin=0.5299192605642203
    angle=33, _sin=0.5448393, sin=0.5446390484568276
    angle=34, _sin=0.5594545, sin=0.5591928842178098
    angle=35, _sin=0.5738963, sin=0.5735764340006195
    angle=36, _sin=0.58816016, sin=0.587785266437776
    angle=37, _sin=0.6022415, sin=0.6018150057687945
    angle=38, _sin=0.616136, sin=0.6156614742127549
    angle=39, _sin=0.6298393, sin=0.6293204057702271
    angle=40, _sin=0.6433472, sin=0.6427875941288312
    angle=41, _sin=0.6566555, sin=0.6560590290242818
    angle=42, _sin=0.66976017, sin=0.6691306215180083
    angle=43, _sin=0.6826571, sin=0.6819983462749459
    angle=44, _sin=0.6953426, sin=0.6946583715393003
    angle=45, _sin=0.70781267, sin=0.7071067966408575
    angle=46, _sin=0.7200635, sin=0.7193397882550321
    angle=47, _sin=0.7320918, sin=0.7313537036370974
    angle=48, _sin=0.74389344, sin=0.7431448410766628
    angle=49, _sin=0.7554653, sin=0.7547095697664989
    angle=50, _sin=0.76680404, sin=0.7660444459574578
    angle=51, _sin=0.77790606, sin=0.7771459770451031
    angle=52, _sin=0.7887682, sin=0.7880107446913527
    angle=53, _sin=0.7993872, sin=0.7986355135817145
    angle=54, _sin=0.80976015, sin=0.8090170097906934
    angle=55, _sin=0.81988394, sin=0.8191520368187817
    angle=56, _sin=0.8297557, sin=0.8290375766539163
    angle=57, _sin=0.83937275, sin=0.8386705830231456
    angle=58, _sin=0.84873194, sin=0.84804809002692
    angle=59, _sin=0.8578308, sin=0.8571673052277671
    angle=60, _sin=0.86666685, sin=0.8660254183549017
    angle=61, _sin=0.8752374, sin=0.8746197311349614
    angle=62, _sin=0.88354015, sin=0.8829475696855424
    angle=63, _sin=0.89157265, sin=0.891006511019614
    angle=64, _sin=0.8993327, sin=0.8987940425060401
    angle=65, _sin=0.90681815, sin=0.9063077919817579
    angle=66, _sin=0.9140268, sin=0.9135454706805514
    angle=67, _sin=0.92095673, sin=0.9205048739302341
    angle=68, _sin=0.9276059, sin=0.9271838371676302
    angle=69, _sin=0.9339726, sin=0.9335804171464573
    angle=70, _sin=0.94005495, sin=0.9396926188231635
    angle=71, _sin=0.9458514, sin=0.9455185803575653
    angle=72, _sin=0.9513601, sin=0.9510565271012029
    angle=73, _sin=0.9565797, sin=0.9563047721379165
    angle=74, _sin=0.9615088, sin=0.9612616839391669
    angle=75, _sin=0.96614593, sin=0.9659258202900343
    angle=76, _sin=0.9704898, sin=0.9702957255926664
    angle=77, _sin=0.97453934, sin=0.9743700687284713
    angle=78, _sin=0.9782934, sin=0.978147608610166
    angle=79, _sin=0.9817509, sin=0.9816271945598252
    angle=80, _sin=0.98491085, sin=0.9848077459589151
    angle=81, _sin=0.9877725, sin=0.9876883374250879
    angle=82, _sin=0.9903351, sin=0.9902680687540267
    angle=83, _sin=0.99259776, sin=0.9925461541327456
    angle=84, _sin=0.99456, sin=0.9945218996327513
    angle=85, _sin=0.9962213, sin=0.9961946930316474
    angle=86, _sin=0.9975811, sin=0.9975640476297116
    angle=87, _sin=0.99863917, sin=0.9986295338465291
    angle=88, _sin=0.99939513, sin=0.9993908271239197
    angle=89, _sin=0.9998488, sin=0.9998476955640354
    angle=90, _sin=1.0, sin=0.999999999999999
    angle=91, _sin=0.99984866, sin=0.9998476961187852
    angle=92, _sin=0.999395, sin=0.9993908282332523
    angle=93, _sin=0.9986391, sin=0.9986295355101066
    angle=94, _sin=0.9975811, sin=0.9975640498470272
    angle=95, _sin=0.9962212, sin=0.9961946958020256
    angle=96, _sin=0.99455994, sin=0.9945218904945822
    angle=97, _sin=0.9925977, sin=0.9925461580065456
    angle=98, _sin=0.9903349, sin=0.9902680731778534
    angle=99, _sin=0.98777235, sin=0.9876883423975937
    angle=100, _sin=0.98491067, sin=0.9848077514785853
    angle=101, _sin=0.98175067, sin=0.9816271778787736
    angle=102, _sin=0.9782931, sin=0.9781475904339476
    angle=103, _sin=0.9745392, sin=0.9743700758788791
    angle=104, _sin=0.9704895, sin=0.9702957332825187
    angle=105, _sin=0.9661457, sin=0.9659258285169886
    angle=106, _sin=0.9615086, sin=0.9612616927007172
    angle=107, _sin=0.9565795, sin=0.9563047465779703
    angle=108, _sin=0.95135975, sin=0.9510565000860774
    angle=109, _sin=0.945851, sin=0.9455185907062396
    angle=110, _sin=0.9400546, sin=0.9396926296947897
    angle=111, _sin=0.93397224, sin=0.9335804285377239
    angle=112, _sin=0.9276055, sin=0.9271838490750671
    angle=113, _sin=0.9209564, sin=0.9205048397714333
    angle=114, _sin=0.9140264, sin=0.9135454351225024
    angle=115, _sin=0.90681773, sin=0.906307755035292
    angle=116, _sin=0.8993323, sin=0.8987940564403286
    angle=117, _sin=0.8915722, sin=0.8910064713304968
    angle=118, _sin=0.8835396, sin=0.8829475846084057
    angle=119, _sin=0.875237, sin=0.8746197465453652
    angle=120, _sin=0.8666663, sin=0.8660253746435105
    angle=121, _sin=0.85783035, sin=0.8571673215990291
    angle=122, _sin=0.8487313, sin=0.8480480436999007
    angle=123, _sin=0.83937204, sin=0.8386705678723035
    angle=124, _sin=0.8297553, sin=0.8290376277591972
    angle=125, _sin=0.8198833, sin=0.8191520208629542
    angle=126, _sin=0.80975956, sin=0.8090170284743339
    angle=127, _sin=0.7993865, sin=0.7986354609693695
    angle=128, _sin=0.78876746, sin=0.788010764261082
    angle=129, _sin=0.7779053, sin=0.7771460345594151
    angle=130, _sin=0.7668034, sin=0.7660444280763049
    angle=131, _sin=0.75546485, sin=0.7547096297244889
    angle=132, _sin=0.7438928, sin=0.7431447825794036
    angle=133, _sin=0.7320911, sin=0.7313537253154444
    angle=134, _sin=0.72006273, sin=0.7193397275260623
    angle=135, _sin=0.70781195, sin=0.7071067769704655
    angle=136, _sin=0.69534194, sin=0.6946584372805921
    angle=137, _sin=0.68265647, sin=0.6819983259300492
    angle=138, _sin=0.6697596, sin=0.6691306451399875
    angle=139, _sin=0.6566547, sin=0.6560589630454696
    angle=140, _sin=0.64334637, sin=0.6427876184787104
    angle=141, _sin=0.6298385, sin=0.6293204767944899
    angle=142, _sin=0.61613524, sin=0.6156614522917649
    angle=143, _sin=0.6022406, sin=0.6018150787570143
    angle=144, _sin=0.5881591, sin=0.5877851957112599
    angle=145, _sin=0.57389545, sin=0.5735764600386035
    angle=146, _sin=0.55945355, sin=0.5591928117410372
    angle=147, _sin=0.54483837, sin=0.5446390251265764
    angle=148, _sin=0.5300546, sin=0.5299193380683128
    angle=149, _sin=0.51510644, sin=0.5150380299101248
    angle=150, _sin=0.49999925, sin=0.5000000401463156
    angle=151, _sin=0.4847377, sin=0.4848095387263436
    angle=152, _sin=0.46932665, sin=0.4694715677738196
    angle=153, _sin=0.45377177, sin=0.45399059285379917
    angle=154, _sin=0.4380774, sin=0.4383711152786025
    angle=155, _sin=0.4222493, sin=0.42261831956021456
    angle=156, _sin=0.4062925, sin=0.40673657385973994
    angle=157, _sin=0.39021266, sin=0.3907311497427947
    angle=158, _sin=0.37401477, sin=0.37460648542290864
    angle=159, _sin=0.35770506, sin=0.3583679330967232
    angle=160, _sin=0.34128875, sin=0.3420202196630839
    angle=161, _sin=0.3247713, sin=0.3255680993082677
    angle=162, _sin=0.3081592, sin=0.3090170329201147
    angle=163, _sin=0.29145747, sin=0.29237161001566847
    angle=164, _sin=0.27467316, sin=0.2756373556449271
    angle=165, _sin=0.25781164, sin=0.25881914041658916
    angle=166, _sin=0.24087885, sin=0.24192185592737964
    angle=167, _sin=0.22388165, sin=0.22495111082672528
    angle=168, _sin=0.20682546, sin=0.20791161100620165
    angle=169, _sin=0.18971775, sin=0.19080901232021316
    angle=170, _sin=0.17256433, sin=0.17364829201905368
    angle=171, _sin=0.15537152, sin=0.15643444188190603
    angle=172, _sin=0.13814639, sin=0.139173175634592
    angle=173, _sin=0.12089543, sin=0.121869279728557
    angle=174, _sin=0.10362564, sin=0.10452849777816209
    angle=175, _sin=0.086343676, sin=0.08715563828410712
    angle=176, _sin=0.0690567, sin=0.06975646775156666
    angle=177, _sin=0.051771555, sin=0.05233604896389903
    angle=178, _sin=0.034495354, sin=0.03489945001597251
    angle=179, _sin=0.01723531, sin=0.017452458569748835
    angle=180, _sin=-1.1086468E-6, sin=-8.742278000372475E-8
    надо будет еще на ардуине прогнать и посмотреть выигрышь в производительности... если хотябы в 2-3 раза, то уже можно будет и матрицы крутить на AVR-ке с частотой 150-200гц...
    Последний раз редактировалось mahowik; 08.03.2013 в 21:24.

  23. #20

    Регистрация
    04.08.2012
    Адрес
    Бруклин, США
    Возраст
    46
    Сообщений
    435
    Цитата Сообщение от mahowik Посмотреть сообщение
    такие штуки компилятор оптимизирует обычно...
    Не знал. Это показывает, насколько я чайник в программировании

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

  24. #21

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    39
    Сообщений
    2,299
    Записей в дневнике
    19
    для косинуса картинка еще лучше... практически стабильные 3 знака после запятой...
    Код:
    angle=-180, _cos=-1.0, cos=-0.9999999999999962
    angle=-179, _cos=-0.9998488, cos=-0.9998476942464143
    angle=-178, _cos=-0.99939513, cos=-0.9993908286494242
    angle=-177, _cos=-0.99863917, cos=-0.9986295298952702
    angle=-176, _cos=-0.9975812, cos=-0.9975640506788648
    angle=-175, _cos=-0.99622136, cos=-0.9961947072311165
    angle=-174, _cos=-0.99456006, cos=-0.9945218917410721
    angle=-173, _cos=-0.9925978, cos=-0.9925461594598222
    angle=-172, _cos=-0.99033517, cos=-0.9902680582467471
    angle=-171, _cos=-0.9877726, cos=-0.9876883442630557
    angle=-170, _cos=-0.9849109, cos=-0.9848077328488366
    angle=-169, _cos=-0.98175097, cos=-0.9816271801541483
    angle=-168, _cos=-0.9782936, cos=-0.9781476176982725
    angle=-167, _cos=-0.97453946, cos=-0.9743700517451377
    angle=-166, _cos=-0.97049, cos=-0.9702957361674079
    angle=-165, _cos=-0.966146, cos=-0.9659258007497356
    angle=-164, _cos=-0.961509, cos=-0.9612616959876598
    angle=-163, _cos=-0.9565799, cos=-0.9563047849178868
    angle=-162, _cos=-0.9513603, cos=-0.9510565037710687
    angle=-161, _cos=-0.9458515, cos=-0.9455185945886003
    angle=-160, _cos=-0.94005513, cos=-0.939692593001358
    angle=-159, _cos=-0.9339728, cos=-0.9335804328112187
    angle=-158, _cos=-0.92760617, cos=-0.9271838981987857
    angle=-157, _cos=-0.92095685, cos=-0.9205048444308557
    angle=-156, _cos=-0.91402704, cos=-0.9135454884595733
    angle=-155, _cos=-0.90681833, cos=-0.906307760074965
    angle=-154, _cos=-0.89933294, cos=-0.8987940616678518
    angle=-153, _cos=-0.89157283, cos=-0.8910064767442805
    angle=-152, _cos=-0.8835404, cos=-0.8829475902067981
    angle=-151, _cos=-0.87523764, cos=-0.8746197523266611
    angle=-150, _cos=-0.86666703, cos=-0.8660253806059512
    angle=-149, _cos=-0.85783106, cos=-0.8571673277407961
    angle=-148, _cos=-0.8487321, cos=-0.8480480500191255
    angle=-147, _cos=-0.839373, cos=-0.8386705743670589
    angle=-146, _cos=-0.8297561, cos=-0.8290376344275047
    angle=-145, _cos=-0.8198843, cos=-0.819152027702785
    angle=-144, _cos=-0.8097606, cos=-0.809017035483602
    angle=-143, _cos=-0.79938745, cos=-0.7986354681459424
    angle=-142, _cos=-0.7887684, cos=-0.7880107716027712
    angle=-141, _cos=-0.77790624, cos=-0.7771458920223127
    angle=-140, _cos=-0.76680434, cos=-0.7660444357414705
    angle=-139, _cos=-0.7554658, cos=-0.7547096375479136
    angle=-138, _cos=-0.7438938, cos=-0.7431447905587066
    angle=-137, _cos=-0.7320921, cos=-0.731353733448193
    angle=-136, _cos=-0.7200638, cos=-0.7193397358097812
    angle=-135, _cos=-0.707813, cos=-0.7071067854026294
    angle=-134, _cos=-0.6953431, cos=-0.6946584458586323
    angle=-133, _cos=-0.6826574, cos=-0.681998334651355
    angle=-132, _cos=-0.6697606, cos=-0.6691306540019003
    angle=-131, _cos=-0.65665585, cos=-0.6560589720452918
    angle=-130, _cos=-0.64334756, cos=-0.6427876276136986
    angle=-129, _cos=-0.6298397, cos=-0.6293203007758262
    angle=-128, _cos=-0.6161365, cos=-0.6156614616886991
    angle=-127, _cos=-0.602242, cos=-0.6018150882806468
    angle=-126, _cos=-0.5881605, cos=-0.5877852053586913
    angle=-125, _cos=-0.5738969, cos=-0.5735764698068935
    angle=-124, _cos=-0.5594549, cos=-0.5591928216272118
    angle=-123, _cos=-0.54483974, cos=-0.5446390351276227
    angle=-122, _cos=-0.530056, cos=-0.5299193481811844
    angle=-121, _cos=-0.51510775, cos=-0.5150380401317427
    angle=-120, _cos=-0.50000066, cos=-0.5000000504735647
    angle=-119, _cos=-0.48473898, cos=-0.48480954915607954
    angle=-118, _cos=-0.46932822, cos=-0.469471578302864
    angle=-117, _cos=-0.45377323, cos=-0.4539906034789449
    angle=-116, _cos=-0.4380788, cos=-0.4383711259966142
    angle=-115, _cos=-0.42225078, cos=-0.42261833036782626
    angle=-114, _cos=-0.406294, cos=-0.40673669365676585
    angle=-113, _cos=-0.39021397, cos=-0.39073116071970493
    angle=-112, _cos=-0.37401626, cos=-0.3746066070083963
    angle=-111, _cos=-0.35770637, cos=-0.35836794422955826
    angle=-110, _cos=-0.34128994, cos=-0.34202011884871736
    angle=-109, _cos=-0.32477286, cos=-0.32556811058346385
    angle=-108, _cos=-0.3081606, cos=-0.30901704426134974
    angle=-107, _cos=-0.2914592, cos=-0.2923717354199002
    angle=-106, _cos=-0.27467465, cos=-0.27563736710785786
    angle=-105, _cos=-0.25781316, cos=-0.25881903678780893
    angle=-104, _cos=-0.24088049, cos=-0.2419218674980403
    angle=-103, _cos=-0.22388309, cos=-0.22495100629200873
    angle=-102, _cos=-0.20682737, cos=-0.20791173927477583
    angle=-101, _cos=-0.1897194, cos=-0.19080902402599992
    angle=-100, _cos=-0.17256577, cos=-0.173648186364537
    angle=-99, _cos=-0.15537308, cos=-0.15643445365997144
    angle=-98, _cos=-0.13814792, cos=-0.13917306939426774
    angle=-97, _cos=-0.120896995, cos=-0.1218692915645513
    angle=-96, _cos=-0.10362731, cos=-0.10452850963771676
    angle=-95, _cos=-0.08634533, cos=-0.08715576891927246
    angle=-94, _cos=-0.06905822, cos=-0.0697564796473987
    angle=-93, _cos=-0.051773004, cos=-0.05233594182651971
    angle=-92, _cos=-0.03449681, cos=-0.034899461933588664
    angle=-91, _cos=-0.017236838, cos=-0.017452351301679672
    angle=-90, _cos=-5.543232E-7, cos=-4.371139000186241E-8
    angle=-89, _cos=0.017235914, cos=0.017452383083348
    angle=-88, _cos=0.034495886, cos=0.03489949370073475
    angle=-87, _cos=0.051771987, cos=0.05233597356946695
    angle=-86, _cos=0.0690572, cos=0.06975651135647787
    angle=-85, _cos=0.08634432, cos=0.08715580058482462
    angle=-84, _cos=0.10362611, cos=0.10452842269384792
    angle=-83, _cos=0.12089599, cos=0.12186932311412917
    angle=-82, _cos=0.1381469, cos=0.13917310087143323
    angle=-81, _cos=0.15537207, cos=0.1564344850551363
    angle=-80, _cos=0.17256477, cos=0.1736482176681379
    angle=-79, _cos=0.18971822, cos=0.19080893820942238
    angle=-78, _cos=0.2068262, cos=0.20791165376239343
    angle=-77, _cos=0.22388208, cos=0.22495103726383234
    angle=-76, _cos=0.24087942, cos=0.24192189834035474
    angle=-75, _cos=0.25781208, cos=0.25881906749121936
    angle=-74, _cos=0.27467373, cos=0.2756373976630117
    angle=-73, _cos=0.29145822, cos=0.29237165181707964
    angle=-72, _cos=0.30815953, cos=0.3090169611173454
    angle=-71, _cos=0.3247718, cos=0.3255681406381994
    angle=-70, _cos=0.34128907, cos=0.3420201487182659
    angle=-69, _cos=0.3577055, cos=0.3583679739048213
    angle=-68, _cos=0.3740154, cos=0.37460663648033443
    angle=-67, _cos=0.39021292, cos=0.39073108024661135
    angle=-66, _cos=0.40629297, cos=0.4067366137920827
    angle=-65, _cos=0.42224976, cos=0.42261825113588114
    angle=-64, _cos=0.43807787, cos=0.43837115456613984
    angle=-63, _cos=0.45377216, cos=0.4539905255846804
    angle=-62, _cos=0.46932733, cos=0.4694716063686856
    angle=-61, _cos=0.48473802, cos=0.48480957695718824
    angle=-60, _cos=0.49999964, cos=0.499999974763217
    angle=-59, _cos=0.5151069, cos=0.5150380673780998
    angle=-58, _cos=0.5300549, cos=0.5299192740424647
    angle=-57, _cos=0.5448388, cos=0.5446390117973712
    angle=-56, _cos=0.559454, cos=0.5591928973939153
    angle=-55, _cos=0.57389593, cos=0.5735764470196116
    angle=-54, _cos=0.58815974, cos=0.5877852310745185
    angle=-53, _cos=0.60224116, cos=0.6018150184617123
    angle=-52, _cos=0.61613566, cos=0.6156614867368104
    angle=-51, _cos=0.6298389, cos=0.6293203718000968
    angle=-50, _cos=0.6433468, cos=0.6427876063037709
    angle=-49, _cos=0.65665513, cos=0.6560590410190733
    angle=-48, _cos=0.6697597, cos=0.6691305890341149
    angle=-47, _cos=0.68265676, cos=0.6819983578985368
    angle=-46, _cos=0.6953423, cos=0.6946583829719509
    angle=-45, _cos=0.70781225, cos=0.7071067657322372
    angle=-44, _cos=0.72006327, cos=0.7193397992954146
    angle=-43, _cos=0.7320913, cos=0.731353714476271
    angle=-42, _cos=0.7438932, cos=0.7431448118280339
    angle=-41, _cos=0.7554651, cos=0.7547095801934123
    angle=-40, _cos=0.7668037, cos=0.7660444561734449
    angle=-39, _cos=0.77790564, cos=0.7771459495366342
    angle=-38, _cos=0.78876776, cos=0.7880107544762174
    angle=-37, _cos=0.7993869, cos=0.7986355231465139
    angle=-36, _cos=0.8097599, cos=0.8090169840977831
    angle=-35, _cos=0.81988376, cos=0.8191520459347782
    angle=-34, _cos=0.8297555, cos=0.8290375855413114
    angle=-33, _cos=0.83937234, cos=0.8386705592162165
    angle=-32, _cos=0.8487317, cos=0.8480480984490619
    angle=-31, _cos=0.8578306, cos=0.8571673134133982
    angle=-30, _cos=0.8666665, cos=0.8660253964992068
    angle=-29, _cos=0.87523717, cos=0.8746197099432601
    angle=-28, _cos=0.88353986, cos=0.8829475911383176
    angle=-27, _cos=0.8915725, cos=0.8910065182350011
    angle=-26, _cos=0.8993324, cos=0.8987940494731845
    angle=-25, _cos=0.90681785, cos=0.9063077861035319
    angle=-24, _cos=0.9140266, cos=0.9135454529015278
    angle=-23, _cos=0.92095655, cos=0.9205048568508346
    angle=-22, _cos=0.92760575, cos=0.9271838542854957
    angle=-21, _cos=0.9339724, cos=0.9335804228420908
    angle=-20, _cos=0.94005483, cos=0.9396926242589767
    angle=-19, _cos=0.94585115, cos=0.945518575829216
    angle=-18, _cos=0.9513599, cos=0.9510565135936411
    angle=-17, _cos=0.95657957, cos=0.9563047593579442
    angle=-16, _cos=0.9615087, cos=0.9612616965345758
    angle=-15, _cos=0.9661458, cos=0.9659258244035116
    angle=-14, _cos=0.97048974, cos=0.9702957258326756
    angle=-13, _cos=0.9745393, cos=0.974370065599612
    angle=-12, _cos=0.97829324, cos=0.9781475995220578
    angle=-11, _cos=0.9817507, cos=0.9816271833760248
    angle=-10, _cos=0.9849108, cos=0.9848077538938695
    angle=-9, _cos=0.98777246, cos=0.987688339911341
    angle=-8, _cos=0.990335, cos=0.9902680688920995
    angle=-7, _cos=0.9925977, cos=0.9925461515296595
    angle=-6, _cos=0.99455994, cos=0.9945218950636677
    angle=-5, _cos=0.9962212, cos=0.9961946983130029
    angle=-4, _cos=0.9975811, cos=0.9975640502975485
    angle=-3, _cos=0.99863917, cos=0.9986295346783179
    angle=-2, _cos=0.99939513, cos=0.9993908270285325
    angle=-1, _cos=0.9998488, cos=0.9998476951587508
    angle=0, _cos=1.0, cos=1.0
    angle=1, _cos=0.99984866, cos=0.9998476951587508
    angle=2, _cos=0.999395, cos=0.9993908270285325
    angle=3, _cos=0.9986391, cos=0.9986295346783179
    angle=4, _cos=0.9975811, cos=0.9975640502975485
    angle=5, _cos=0.9962212, cos=0.9961946983130029
    angle=6, _cos=0.99455994, cos=0.9945218950636677
    angle=7, _cos=0.9925977, cos=0.9925461515296595
    angle=8, _cos=0.9903351, cos=0.9902680688920995
    angle=9, _cos=0.98777246, cos=0.987688339911341
    angle=10, _cos=0.9849108, cos=0.9848077538938695
    angle=11, _cos=0.98175085, cos=0.9816271833760248
    angle=12, _cos=0.97829324, cos=0.9781475995220578
    angle=13, _cos=0.9745392, cos=0.974370065599612
    angle=14, _cos=0.9704897, cos=0.9702957258326756
    angle=15, _cos=0.9661458, cos=0.9659258244035116
    angle=16, _cos=0.9615086, cos=0.9612616965345758
    angle=17, _cos=0.9565796, cos=0.9563047593579442
    angle=18, _cos=0.95136005, cos=0.9510565135936411
    angle=19, _cos=0.94585115, cos=0.945518575829216
    angle=20, _cos=0.9400548, cos=0.9396926242589767
    angle=21, _cos=0.93397236, cos=0.9335804228420908
    angle=22, _cos=0.9276058, cos=0.9271838542854957
    angle=23, _cos=0.92095655, cos=0.9205048568508346
    angle=24, _cos=0.91402656, cos=0.9135454529015278
    angle=25, _cos=0.90681785, cos=0.9063077861035319
    angle=26, _cos=0.8993324, cos=0.8987940494731845
    angle=27, _cos=0.8915725, cos=0.8910065182350011
    angle=28, _cos=0.88353986, cos=0.8829475911383176
    angle=29, _cos=0.87523717, cos=0.8746197099432601
    angle=30, _cos=0.86666656, cos=0.8660253964992068
    angle=31, _cos=0.85783064, cos=0.8571673134133982
    angle=32, _cos=0.8487317, cos=0.8480480984490619
    angle=33, _cos=0.8393723, cos=0.8386705592162165
    angle=34, _cos=0.82975554, cos=0.8290375855413114
    angle=35, _cos=0.81988364, cos=0.8191520459347782
    angle=36, _cos=0.8097599, cos=0.8090169840977831
    angle=37, _cos=0.7993869, cos=0.7986355231465139
    angle=38, _cos=0.78876776, cos=0.7880107544762174
    angle=39, _cos=0.7779055, cos=0.7771459495366342
    angle=40, _cos=0.7668037, cos=0.7660444561734449
    angle=41, _cos=0.7554651, cos=0.7547095801934123
    angle=42, _cos=0.7438931, cos=0.7431448118280339
    angle=43, _cos=0.73209137, cos=0.731353714476271
    angle=44, _cos=0.72006327, cos=0.7193397992954146
    angle=45, _cos=0.7078122, cos=0.7071067657322372
    angle=46, _cos=0.6953422, cos=0.6946583829719509
    angle=47, _cos=0.6826567, cos=0.6819983578985368
    angle=48, _cos=0.6697598, cos=0.6691305890341149
    angle=49, _cos=0.6566552, cos=0.6560590410190733
    angle=50, _cos=0.6433466, cos=0.6427876063037709
    angle=51, _cos=0.62983906, cos=0.6293203718000968
    angle=52, _cos=0.6161355, cos=0.6156614867368104
    angle=53, _cos=0.60224116, cos=0.6018150184617123
    angle=54, _cos=0.5881598, cos=0.5877852310745185
    angle=55, _cos=0.573896, cos=0.5735764470196116
    angle=56, _cos=0.559454, cos=0.5591928973939153
    angle=57, _cos=0.5448389, cos=0.5446390117973712
    angle=58, _cos=0.53005487, cos=0.5299192740424647
    angle=59, _cos=0.515107, cos=0.5150380673780998
    angle=60, _cos=0.49999952, cos=0.499999974763217
    angle=61, _cos=0.48473817, cos=0.48480957695718824
    angle=62, _cos=0.4693274, cos=0.4694716063686856
    angle=63, _cos=0.453772, cos=0.4539905255846804
    angle=64, _cos=0.43807787, cos=0.43837115456613984
    angle=65, _cos=0.42224976, cos=0.42261825113588114
    angle=66, _cos=0.40629297, cos=0.4067366137920827
    angle=67, _cos=0.3902129, cos=0.39073108024661135
    angle=68, _cos=0.37401545, cos=0.37460663648033443
    angle=69, _cos=0.35770553, cos=0.3583679739048213
    angle=70, _cos=0.34128898, cos=0.3420201487182659
    angle=71, _cos=0.32477176, cos=0.3255681406381994
    angle=72, _cos=0.30815944, cos=0.3090169611173454
    angle=73, _cos=0.29145816, cos=0.29237165181707964
    angle=74, _cos=0.27467382, cos=0.2756373976630117
    angle=75, _cos=0.25781208, cos=0.25881906749121936
    angle=76, _cos=0.2408795, cos=0.24192189834035474
    angle=77, _cos=0.22388208, cos=0.22495103726383234
    angle=78, _cos=0.2068261, cos=0.20791165376239343
    angle=79, _cos=0.18971837, cos=0.19080893820942238
    angle=80, _cos=0.17256494, cos=0.1736482176681379
    angle=81, _cos=0.15537193, cos=0.1564344850551363
    angle=82, _cos=0.138147, cos=0.13917310087143323
    angle=83, _cos=0.12089583, cos=0.12186932311412917
    angle=84, _cos=0.10362623, cos=0.10452842269384792
    angle=85, _cos=0.08634446, cos=0.08715580058482462
    angle=86, _cos=0.069057085, cos=0.06975651135647787
    angle=87, _cos=0.05177213, cos=0.05233597356946695
    angle=88, _cos=0.034495924, cos=0.03489949370073475
    angle=89, _cos=0.017235871, cos=0.017452383083348
    angle=90, _cos=-7.390978E-7, cos=-4.371139000186241E-8
    angle=91, _cos=-0.01723662, cos=-0.017452351301679672
    angle=92, _cos=-0.03449687, cos=-0.034899461933588664
    angle=93, _cos=-0.05177328, cos=-0.05233594182651971
    angle=94, _cos=-0.06905825, cos=-0.0697564796473987
    angle=95, _cos=-0.08634505, cos=-0.08715576891927246
    angle=96, _cos=-0.10362723, cos=-0.10452850963771676
    angle=97, _cos=-0.12089703, cos=-0.1218692915645513
    angle=98, _cos=-0.1381478, cos=-0.13917306939426774
    angle=99, _cos=-0.15537316, cos=-0.15643445365997144
    angle=100, _cos=-0.17256598, cos=-0.173648186364537
    angle=101, _cos=-0.18971942, cos=-0.19080902402599992
    angle=102, _cos=-0.20682715, cos=-0.20791173927477583
    angle=103, _cos=-0.22388336, cos=-0.22495100629200873
    angle=104, _cos=-0.24088056, cos=-0.2419218674980403
    angle=105, _cos=-0.25781295, cos=-0.25881903678780893
    angle=106, _cos=-0.27467492, cos=-0.27563736710785786
    angle=107, _cos=-0.29145926, cos=-0.2923717354199002
    angle=108, _cos=-0.30816033, cos=-0.30901704426134974
    angle=109, _cos=-0.3247729, cos=-0.32556811058346385
    angle=110, _cos=-0.34128988, cos=-0.34202011884871736
    angle=111, _cos=-0.3577062, cos=-0.35836794422955826
    angle=112, _cos=-0.37401637, cos=-0.3746066070083963
    angle=113, _cos=-0.3902143, cos=-0.39073116071970493
    angle=114, _cos=-0.4062939, cos=-0.40673669365676585
    angle=115, _cos=-0.4222507, cos=-0.42261833036782626
    angle=116, _cos=-0.43807906, cos=-0.4383711259966142
    angle=117, _cos=-0.45377344, cos=-0.4539906034789449
    angle=118, _cos=-0.46932814, cos=-0.469471578302864
    angle=119, _cos=-0.48473912, cos=-0.48480954915607954
    angle=120, _cos=-0.5000008, cos=-0.5000000504735647
    angle=121, _cos=-0.5151077, cos=-0.5150380401317427
    angle=122, _cos=-0.5300558, cos=-0.5299193481811844
    angle=123, _cos=-0.54483986, cos=-0.5446390351276227
    angle=124, _cos=-0.5594548, cos=-0.5591928216272118
    angle=125, _cos=-0.57389677, cos=-0.5735764698068935
    angle=126, _cos=-0.5881606, cos=-0.5877852053586913
    angle=127, _cos=-0.60224193, cos=-0.6018150882806468
    angle=128, _cos=-0.61613625, cos=-0.6156614616886991
    angle=129, _cos=-0.62983984, cos=-0.6293203007758262
    angle=130, _cos=-0.6433476, cos=-0.6427876276136986
    angle=131, _cos=-0.6566557, cos=-0.6560589720452918
    angle=132, _cos=-0.66976064, cos=-0.6691306540019003
    angle=133, _cos=-0.68265754, cos=-0.681998334651355
    angle=134, _cos=-0.695343, cos=-0.6946584458586323
    angle=135, _cos=-0.707813, cos=-0.7071067854026294
    angle=136, _cos=-0.7200638, cos=-0.7193397358097812
    angle=137, _cos=-0.7320922, cos=-0.731353733448193
    angle=138, _cos=-0.7438939, cos=-0.7431447905587066
    angle=139, _cos=-0.75546587, cos=-0.7547096375479136
    angle=140, _cos=-0.7668042, cos=-0.7660444357414705
    angle=141, _cos=-0.7779061, cos=-0.7771458920223127
    angle=142, _cos=-0.7887686, cos=-0.7880107716027712
    angle=143, _cos=-0.79938745, cos=-0.7986354681459424
    angle=144, _cos=-0.8097606, cos=-0.809017035483602
    angle=145, _cos=-0.8198843, cos=-0.819152027702785
    angle=146, _cos=-0.82975614, cos=-0.8290376344275047
    angle=147, _cos=-0.839373, cos=-0.8386705743670589
    angle=148, _cos=-0.8487321, cos=-0.8480480500191255
    angle=149, _cos=-0.8578312, cos=-0.8571673277407961
    angle=150, _cos=-0.86666715, cos=-0.8660253806059512
    angle=151, _cos=-0.8752375, cos=-0.8746197523266611
    angle=152, _cos=-0.8835404, cos=-0.8829475902067981
    angle=153, _cos=-0.89157283, cos=-0.8910064767442805
    angle=154, _cos=-0.8993329, cos=-0.8987940616678518
    angle=155, _cos=-0.9068184, cos=-0.906307760074965
    angle=156, _cos=-0.91402715, cos=-0.9135454884595733
    angle=157, _cos=-0.9209568, cos=-0.9205048444308557
    angle=158, _cos=-0.9276061, cos=-0.9271838981987857
    angle=159, _cos=-0.9339729, cos=-0.9335804328112187
    angle=160, _cos=-0.940055, cos=-0.939692593001358
    angle=161, _cos=-0.94585145, cos=-0.9455185945886003
    angle=162, _cos=-0.95136034, cos=-0.9510565037710687
    angle=163, _cos=-0.9565799, cos=-0.9563047849178868
    angle=164, _cos=-0.9615089, cos=-0.9612616959876598
    angle=165, _cos=-0.9661461, cos=-0.9659258007497356
    angle=166, _cos=-0.97049, cos=-0.9702957361674079
    angle=167, _cos=-0.97453946, cos=-0.9743700517451377
    angle=168, _cos=-0.9782936, cos=-0.9781476176982725
    angle=169, _cos=-0.98175097, cos=-0.9816271801541483
    angle=170, _cos=-0.9849109, cos=-0.9848077328488366
    angle=171, _cos=-0.9877726, cos=-0.9876883442630557
    angle=172, _cos=-0.9903352, cos=-0.9902680582467471
    angle=173, _cos=-0.9925978, cos=-0.9925461594598222
    angle=174, _cos=-0.99456006, cos=-0.9945218917410721
    angle=175, _cos=-0.99622136, cos=-0.9961947072311165
    angle=176, _cos=-0.9975811, cos=-0.9975640506788648
    angle=177, _cos=-0.9986393, cos=-0.9986295298952702
    angle=178, _cos=-0.9993952, cos=-0.9993908286494242
    angle=179, _cos=-0.99984884, cos=-0.9998476942464143
    angle=180, _cos=-1.0, cos=-0.9999999999999962

  25. #22

    Регистрация
    04.08.2012
    Адрес
    Бруклин, США
    Возраст
    46
    Сообщений
    435
    Цитата Сообщение от mahowik Посмотреть сообщение
    корректно работает только в диапазоне -180..180, т.е. надо приводить к этому диапазону...
    каюсь. я специально вырезал приведение к диапазону, ибо для моих задач (подвес) они не нужны... Ибо если подвес, а с ним и коптер, вышел из диапазона -180..180, задача стабилизации -- как бы это помягче сказать -- отходит на второй план

    Цитата Сообщение от mahowik Посмотреть сообщение
    надо будет еще на ардуине прогнать и посмотреть выигрышь в производительности... если хотябы в 2-3 раза, то уже можно будет и матрицы крутить на AVR-ке с частотой 150-200гц...
    Александр, расскажите пожалуйста здесь о результатах теста, у меня никах руки не доходят...

  26. #23

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    39
    Сообщений
    2,299
    Записей в дневнике
    19
    Цитата Сообщение от Gene Посмотреть сообщение
    расскажите пожалуйста здесь о результатах теста, у меня никах руки не доходят...
    обещаю!

    p.s. меня все не покидает идея улучшения качества удержания позиции по гпс с применением акселя , где аксель будет основноый и быстрый сенсор, а гпс лишь корректор...
    на AVR-ке конечно же, т.е. на AIOP... и там как раз нужны быстрые sin/cos, чеб привести вектор акселя в глобальную систему координат, т.е. в которой живет гпс...

  27. #24

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    37
    Сообщений
    4,528
    Записей в дневнике
    9
    Цитата Сообщение от mahowik Посмотреть сообщение
    angle=90, _cos=-7.390978E-7, cos=-4.371139000186241E-8
    Саш, чёт с математикой не слишком срослось? я конечно понимаю что нулей впереди до дури но всёже?

  28. #25

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    39
    Сообщений
    2,299
    Записей в дневнике
    19
    Цитата Сообщение от SergDoc Посмотреть сообщение
    чёт с математикой не слишком срослось? я конечно понимаю что нулей впереди до дури но всёже?
    Цитата Сообщение от mahowik Посмотреть сообщение
    для косинуса картинка еще лучше... практически стабильные 3 знака после запятой...
    т.е. с точностью до 3-х знаков и там и там ноль ))
    + надо учесть, что еще на входе погрешность, где угол в радианы переводится... т.е. (float)(i*Math.PI/180.0f)

  29. #26

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    37
    Сообщений
    4,528
    Записей в дневнике
    9
    а я как всегда со своей колокольни +-0 напрягает, можно невзначай и через 180 повернуть?

  30. #27

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    39
    Сообщений
    2,299
    Записей в дневнике
    19
    Цитата Сообщение от Gene Посмотреть сообщение
    Но вообще мне и сейчас кажется, что спокойнее все же посчитать константы самому
    глянул... в свежей версии так и сделали...

    Код:
    int16_t _atan2(int32_t y, int32_t x){
      float z = (float)y / x;
      int16_t a;
      if ( abs(y) < abs(x) ){
         a = 573 * z / (1.0f + 0.28f * z * z);
       if (x<0) {
         if (y<0) a -= 1800;
         else a += 1800;
       }
      } else {
       a = 900 - 573 * z / (z * z + 0.28f);
       if (y<0) a -= 1800;
      }
      return a;
    }
    вот еще в ardu нашел... самый быстрый sin/cos и сразу с углом на входе...
    Код:
    static const uint16_t     pgm_sinLUT[91] PROGMEM = {0, 17, 35, 52, 70, 87, 105, 122, 139, 156, 174, 191, 208, 225, 242, 259, 276, 292, 309, 326, 342, 358, 375, 391, 407, 423, 438, 454, 469, 485, 500, 515, 530, 545, 559, 574, 588, 602, 616, 629, 643, 656, 669, 682, 695, 707, 719, 731, 743, 755, 766, 777, 788, 799, 809, 819, 829, 839, 848, 857, 866, 875, 883, 891, 899, 906, 914, 921, 927, 934, 940, 946, 951, 956, 961, 966, 970, 974, 978, 982, 985, 988, 990, 993, 995, 996, 998, 999, 999, 1000, 1000};
    
    float
    Trig_LUT::sin_lut(int16_t angle)
    {
        int8_t m,n;
        int16_t _sin;
    
        if (angle < 0){
            m         = -1;
            angle     = -angle;
        }else{
            m         = 1;
        }
    
        // 0 - 360 only
        angle %= 360;
    
        // check quadrant
        if (angle <= 90){
            n = 1; // first quadrant
        } else if ((angle > 90) && (angle <= 180)) {
            angle = 180 - angle;
            n = 1;    // second quadrant
        } else if ((angle > 180) && (angle <= 270)) {
            angle = angle - 180;
            n = -1; // third quadrant
        } else {
            angle = 360 - angle;
            n = -1;
        }         // fourth quadrant
    
        // get lookup value
        _sin = pgm_read_word(&pgm_sinLUT[angle]);
    
        // calculate sinus value
        return (float)(_sin * m * n) / 1000;
    }
    
    float
    Trig_LUT::cos_lut(int16_t angle)
    {
        return (sin_lut(90 - angle));
    }
    Последний раз редактировалось mahowik; 09.03.2013 в 01:33.

  31. #28

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    39
    Сообщений
    2,299
    Записей в дневнике
    19
    Цитата Сообщение от mahowik Посмотреть сообщение
    обещаю!
    Написал сегодня тестик. Подрюкался с загадками компиллятора
    Если sin/cos считать в цикле и результат функции не присваивать, либо присваивать, но не использовать вне тела цикла, то компиллер считает что "а нах. тогда функцию вообще вызывать" )) Пришлось в цикле контрольную сумму считать...

    Результаты:
    1) _sin() быстрее библиотечного sin() на 84%
    2) _cos() быстрее библ. cos() всего на 23%

    3) sin_lut() быстрее библ. sin() на 96%
    4) cos_lut() быстрее библ. cos() на 88%

    Таким образом, если точность угла на входе с дискретностью в 1-цу устраивает (а также точность результата три знака после запятой), то табличный sin/cos имеет смысл...

    Код теста:
    Код:
    void setup() {
      Serial.begin(115200);
      Serial.println("Start performance test:");
    }
    
    static float rad[181];
    
    void loop() {
      uint32_t totalTimeOrig = 0, totalTimeApprox = 0;
      float summ = 0.0f;
      
      // prepare input data in radians
      for (int i = 0; i <= 180; i++) {
        rad[i] = i*PI/180.0f;
      }
    
      uint32_t currentTime = micros();
      for (int k = 0; k < 100; k++) {
        for (int i = 0; i <= 180; i++) {
          summ += sin(rad[i]);
          summ += sin(-rad[i]);
        }
      }
      totalTimeOrig = micros() - currentTime;
      Serial.println(summ);
    
      currentTime = micros();
      for (int k = 0; k < 100; k++) {
        /*for (int i = 0; i <= 180; i++) {
          summ += sin_lut(i);
          summ += sin_lut(-i);
        }*/
        for (int i = 0; i <= 180; i++) {
          summ += _sin(rad[i]);
          summ += _sin(-rad[i]);
        }
      }  
      totalTimeApprox = micros() - currentTime;
      Serial.println(summ);
    
      Serial.print("totalTimeOrig = ");
      Serial.println(totalTimeOrig);
      Serial.print("totalTimeApprox = ");
      Serial.println(totalTimeApprox);
      Serial.print("performance = ");
      Serial.println((float)totalTimeOrig/totalTimeApprox);
      Serial.println();
    
      delay(2000);
    }
    
    float _sin (float x) { 
      x = x * 0.31831f;
      float y = x - x * abs(x); 
      return y * (3.1f + 3.6f * abs(y)); 
    }
    
    float _cos (float x) { 
      x = x * 0.31831f + 0.5f;
      float z = (x + 25165824.0f); 
      x = x - (z - 25165824.0f); 
      float y = x - x * abs(x); 
      return y * (3.1f + 3.6f * abs(y)); 
    }
    
    
    float _atan( float x )
    {
      uint32_t ux_s  = 0x80000000 & (uint32_t &)x;
      float bx_a = ::fabs( 0.596227f * x ); 
      float num = bx_a + x * x;
      float atan_1q = num / ( 1.f + bx_a + num );
      uint32_t atan_2q = ux_s | (uint32_t &)atan_1q;
      return (float &)atan_2q * 1.5708f;
    }
    
    
    float isqrt( float y )
    {
      float x2 = y * 0.5f;
      long i = * ( long * ) &y;    //evil floating point bit level hacking
      i = 0x5f3759df - ( i >> 1 ); //what the fuck?
      y = * ( float * ) &i;
      y = y * ( 1.5f - ( x2 * y * y ) );
      return y;
    }
    
    static const uint16_t 	pgm_sinLUT[91] PROGMEM = {
      0, 17, 35, 52, 70, 87, 105, 122, 139, 156, 174, 191, 208, 225, 242, 259, 276, 292, 309, 326, 342, 358, 375, 391, 407, 423, 438, 454, 469, 485, 500, 515, 530, 545, 559, 574, 588, 602, 616, 629, 643, 656, 669, 682, 695, 707, 719, 731, 743, 755, 766, 777, 788, 799, 809, 819, 829, 839, 848, 857, 866, 875, 883, 891, 899, 906, 914, 921, 927, 934, 940, 946, 951, 956, 961, 966, 970, 974, 978, 982, 985, 988, 990, 993, 995, 996, 998, 999, 999, 1000, 1000};
    
    float sin_lut(int16_t angle) {
      int8_t m,n;
      int16_t _sin;
    
      if (angle < 0){
        m = -1;
        angle = -angle;
      } else{
        m = 1;
      }
    
      // 0 - 360 only
      angle %= 360;
    
      // check quadrant
      if (angle <= 90) {
        n = 1; // first quadrant
      } 
      else if ((angle > 90) && (angle <= 180)) {
        angle = 180 - angle;
        n = 1;	// second quadrant
      } 
      else if ((angle > 180) && (angle <= 270)) {
        angle = angle - 180;
        n = -1; // third quadrant
      } 
      else {
        angle = 360 - angle;
        n = -1;
      }		 // fourth quadrant
    
      // get lookup value
      _sin = pgm_read_word(&pgm_sinLUT[angle]);
    
      // calculate sinus value
      return (float)(_sin * m * n) / 1000;
    }
    
    float cos_lut(int16_t angle) {
      return (sin_lut(90 - angle));
    }

  32. #29

    Регистрация
    04.08.2012
    Адрес
    Бруклин, США
    Возраст
    46
    Сообщений
    435
    Спасибо, Александр! Очень интересно. Но вот вопросик, ежели надо на входе угол в радианах (конечно и с плавающей точкой), не убьет ли конверсия все преимущество sin_lut по скорости? Я вот так навскидку не вижу, как можно без потерь адаптировать...

    А насчет "медленного" _cos -- это очевидно сказывается приведение к диапазону, float z = (x + 25165824.0f);
    x = x - (z - 25165824.0f); потому что в остальном это тот же _sin со сдвигом.

  33. #30

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    39
    Сообщений
    2,299
    Записей в дневнике
    19
    Надоел мне совсем ардуиновский IDE для разработки, хотя по сути пользовал его только для компилинга, а писал в Notepad++
    Вчера попробовал CodeBlocks-Arduino, может он и ничего, но не смог настроить проект...
    Далее глянул MariaMole тоже не понравилась...
    Потом решил поставить Visual Studio + Visual Micro pluggin.
    Оказалось то что надо! Навигатор удобный как по файлам так и по функциям/перменным, code completion, подсветка синтаксиса с "приглушенным" контентом, если дефайн закрыт... Из минусов Visual Studio запросил гад 5 гб на С диске, также он триальный на 90 дней, НО разработчики Visual Micro пишут что через 90 дней будет доступен Atmel/Visual Studio...

    Собственно вопрос. Кто на чем пишет под arduino?
    Последний раз редактировалось mahowik; 17.03.2013 в 20:45.

  34. #31

    Регистрация
    07.04.2012
    Адрес
    Брянск
    Возраст
    30
    Сообщений
    1,677
    Записей в дневнике
    6
    Цитата Сообщение от mahowik Посмотреть сообщение
    Собственно вопрос. Кто на чем пишет под arduino?
    имхо... ардуино ИДЕ - убожество, да и многие другие, по сравнению с атмел студио.
    при необходимости достаточно посидеть несколько часов над основными библиотеками ардуино и перетащить их на студию для удобства.

  35. #32

    Регистрация
    17.06.2011
    Адрес
    Минск
    Возраст
    40
    Сообщений
    1,941
    Цитата Сообщение от mahowik Посмотреть сообщение
    Кто на чем пишет под arduino?
    UltraEdit )))

    На днях прикрутили проект пирата к Eclipse... но по факту получилось только компиляция. Ошибки он не подсвечивает (точнее у него ошибка практически в каждой строке)

  36. #33

    Регистрация
    13.03.2011
    Адрес
    Montreal, Canada
    Возраст
    39
    Сообщений
    2,299
    Записей в дневнике
    19
    Цитата Сообщение от mataor Посмотреть сообщение
    имхо... ардуино ИДЕ - убожество, да и многие другие, по сравнению с атмел студио.
    при необходимости достаточно посидеть несколько часов над основными библиотеками ардуино и перетащить их на студию для удобства.
    в том и дело Visual Studio + Visual Micro pluggin работает почти из коробки и ниче перетаскивать не надо... показал ей где ардуино фолдэр, открыл главный ino файл и готово!

  37. #34

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    37
    Сообщений
    4,528
    Записей в дневнике
    9
    Цитата Сообщение от Sir Alex Посмотреть сообщение
    На днях прикрутили проект пирата к Eclipse...
    а можно поподробней? я пытаюсь сейчас AutoQuad32 перетянуть - пока безуспешно (*.ino в *.срр интересно можно просто переименовать, а то гцц может и не понять что за фигня - далее знаю где подключается, так что изменить не проблема), с моими кривыми ручками это надолго - ибо переписываю makefile....

  38. #35

    Регистрация
    07.04.2012
    Адрес
    Брянск
    Возраст
    30
    Сообщений
    1,677
    Записей в дневнике
    6
    Цитата Сообщение от SergDoc Посмотреть сообщение
    *.ino в *.срр
    попробуйте основной файл в .cpp а прочие в .h + придется разбиратся с переменными. По крайней мере в атмел студии я именно так и поступал.

  39. #36

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    37
    Сообщений
    4,528
    Записей в дневнике
    9
    у меня он единственный, сейчас компилятор наконец-то увидел (странно патчи прописывал как и раньше, а не пошло- пришлось ближе передвигать - ../../ ), но ругается что правил для сборки нет, вот и думаю как безболезненно makefile переписать...

  40. #37

    Регистрация
    17.06.2011
    Адрес
    Минск
    Возраст
    40
    Сообщений
    1,941
    Цитата Сообщение от SergDoc Посмотреть сообщение
    а можно поподробней?
    Ну суть в том, что у нас есть makefile, который собирает Пирата с использованием Cygwin + Arduino. Т.е. все работает из командной строки.
    Теперь создаем "C" проект в Eclipse и подключаем наш makefile. Вот и все. Если сделать Build, то Eclipse подсвечивает ошибки в исходниках, но как только открываешь файлы, он начинает ругаться практически на все, т.к. не может сам проверить исходники. В общем, хоть что то и можно делать, но по сути не сильно отличается от обычного редактора

    Вероятно надо менять структуру исходников на нормальный C или C++ и после этого пользоваться любой средой, как Eclipse, так и Atmel...

  41. #38

    Регистрация
    01.11.2010
    Адрес
    Belarus Slonim
    Возраст
    37
    Сообщений
    4,528
    Записей в дневнике
    9
    у мультипилота pde рулит, но там не ардуино, а Cygwin+maple, библиотеки теже.....


    блин тема моя разрослась - фиг чего найдёшь - в папочке Librares - библиотеки ардупилота...
    патчи выглядят так: ..\..\..\eclipse;..\..\..\arm\bin;..\..\..\cygwin\bin;..\..\..\openocd\bin;..\..\..\ST-LINK_gdbserver
    Миниатюры Миниатюры Нажмите на изображение для увеличения
Название: MP32.jpg‎
Просмотров: 6
Размер:	40.5 Кб
ID:	767782  
    Последний раз редактировалось SergDoc; 18.03.2013 в 12:59.

  42. #39

    Регистрация
    31.07.2012
    Адрес
    Moscow
    Возраст
    47
    Сообщений
    43
    Цитата Сообщение от serj Посмотреть сообщение
    Сказали, А, говорите и В в смысле, register map..
    Увы, я свой выложить не могу, лицензионное соглашение сдуру на себя подписал.
    http://invensense.com/mems/gyro/docu...-MPU-6000A.pdf

  43. #40

    Регистрация
    25.03.2013
    Адрес
    Vangaži, Latvija
    Возраст
    31
    Сообщений
    20
    Уважаемые! Хочу поделиться вопросом, а в перспективе - добиться (не без вашего совета) решения в следущем проекте: Измеритель вибрации (а конкретно амплитуды виброперемещения) по 3 осям с помощью акселерометра ADXL335, Ардуины и 1602 дисплея (для мобильности).
    Вопрос: По какому принципу данные с акселерометра в Ардуине пересчитать в мм/с (или, к примеру, создать свою шкалу единиц (0...1000))? Какие формулы использовать?
    На ровной поверхности, в состоянии покоя (1g) на выходе каждой оси примерно 330mV. И это напряжение меняется от углов наклона акселерометра.
    Хочу мобильное устройство для контроля уровня вибрации двигателей коптера в поле. Телефон и планшет с g-сенсором не предлогать Думаю, кто-нибудь сможет найти данному устройству другое применение.

Закрытая тема

Похожие темы

  1. Як-54 2.2м от ТТ
    от Юрий55 в разделе Большие модели
    Ответов: 36
    Последнее сообщение: 04.10.2013, 21:28
  2. Phoenix 2000 и падения
    от 1step в разделе Планеры, мотопланеры
    Ответов: 1
    Последнее сообщение: 30.09.2012, 22:09
  3. Ответов: 121
    Последнее сообщение: 05.06.2012, 01:45
  4. Алые паруса
    от Salmon в разделе Судомодели. Общий
    Ответов: 10
    Последнее сообщение: 09.05.2012, 19:24
  5. Даже и в уголке поселкового клуба
    от v-romashin921 в разделе Кордовые модели
    Ответов: 39
    Последнее сообщение: 28.04.2012, 04:27

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

Ваши права

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