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

Gene

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

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

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

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

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

Sir_Alex

Вот что у меня накопилось по алгоритмам:
Nonlinear Complementary Filters on the Special Orthogonal Group
A Complementary Filter for Attitude Estimation of a Fixed-Wing UAV
Complementary filter design on the Special Euclidean group SE(3)
Coupled Estimation And Control
Direction Cosine Matrix IMU: Theory

Datasheets по основным сенсорам (их найти не проблема, но тут всё что надо в одном месте):
BMA020 - Accel
BMA180 - Accel.PDF
BMP085 - Pressure.pdf
HMC5883L - Triple axis Magnetometr.pdf
ISZ500 Z-Axis gyro.pdf
ITG3200 - Triple axis Gyro.pdf
MPU6000A - Gyro and Accel.pdf
MS5611 - Pressure.pdf

Gene

Александр, мне Ваша тема не попалась на глаза, прошу прощения… В любом случае, хотелось бы не только о новостях и передовых технологиях, а вообще обо всем, связанным с программированием коптеров. Скажем, есть вещи, очевидные для Вас, но далеко не очевидные для чайника вроде меня 😃

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

mahowik

я не к тому, что тема не правильная, а то что там тоже ссылки полезные есть… 😉

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

sergebezborodov

приветствую, самого очень интересует тема программирования “под коптеры”

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

mahowik

так это лучше взять из свежей версии, но только то, что к акро моду относится… посмотрите MultiWii.ino, снизу конечный пид регулятор, на “сырых” (но слегка усредненных) показаниях гиры…

DVE

Пол дня потратил чтобы нормально подключить Crius LCD, оказалось 2 подводных камня:

  • встроенная i2c-библиотека Wire для Arduino почему-то так и не заработала, код скопированный из Multiwii работает нормально. Хз в чем там разница, разбираться стало влом.
  • экранчику нужно 2 подтягивающих резистора на i2c, иначе вообще не запускается, и кондер на питание к разъему, иначе на экране мусор.

Результат - вполне удобное средство отладки за 7$, всего с 4 проводами 😃

DVE

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

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

1 month later
Gene

Стыдно 😃 Сам открыл тему и ничего практически не написал… Вот хочу поделиться такими замечательными аппроксимациями (надергал в разных местах, малость адаптировал под ардуину, вовсю применяю в софте своего подвеса):

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

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;
}
mahowik
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
serj
Sir_Alex:

Сказали, А, говорите и В 😃 в смысле, register map…
Увы, я свой выложить не могу, лицензионное соглашение сдуру на себя подписал.

Gene
mahowik:

целочисленный тоже может быть полезен

Конечно же, я просто думал, мультивиевский код и так у каждого всегда есть в виде справочника 😉
И кстати его можно немного убыстрить, имхо, введя пару констант (например, зачем каждый раз заново вычислять (180.0f / PI * 10)?)

mahowik
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гц…