MultiWii

omegapraim

Здравствуйте залил я тут прошивку вии 2.0 рк3 вопрос, автор ввел переменную Д для акселя чего не было в предыдущих прошивках, выставив Д=0 получил равномерное качание коптера во все стороны. Изначально автор по стандарту поставил Д = 100, За что может отвечать этот параметр, Тоже самое что и в в гирике по крену и тангажу или нет?

Musgravehill
Sir_Alex:

Я тут подумываю попробовать 6axis DMP заюзать в пирате… Тот код который сперли с демок Invensense

www.i2cdevlib.com/devices/mpu6050 пишут “The register info shown below is for a revision B1 chip. The newest “C” revision may not be fully compatible with these addresses or bit arrangements. I am working on updating the library to use the latest information available.”
Если что, на аналоге ФриИМУ4 от CSG_EU стоит чип с ревизией D (11-48 YY-WW)
Сейчас попробую на ардуинке проверить код. Конечно, жалко, что магнетометр не подмешивается (он подключен к MPU6050) для 9DOF DMP. Но можно потом добавлять магнетометр:


  if((mx != 0.0f) && (my != 0.0f) && (mz != 0.0f)  {

    // Normalise magnetometer measurement
    recipNorm = invSqrt(mx * mx + my * my + mz * mz);
    mx *= recipNorm;
    my *= recipNorm;
    mz *= recipNorm;

    // compute reference direction of flux
	hx = 2.0f*mx*(0.5f - q2q2 - q3q3) + 2.0f*my*(q1q2 - q0q3) + 2.0f*mz*(q1q3 + q0q2);
	hy = 2.0f*mx*(q1q2 + q0q3) + 2.0f*my*(0.5f - q1q1 - q3q3) + 2.0f*mz*(q2q3 - q0q1);
	hz = 2.0f*mx*(q1q3 - q0q2) + 2.0f*my*(q2q3 + q0q1) + 2.0f*mz*(0.5f - q1q1 - q2q2);
	bx = invSqrt((hx*hx) + (hy*hy));
	bz = hz;

    // estimated direction of gravity and flux (w)
	wx = 2.0f*bx*(0.5f - q2q2 - q3q3) + 2.0f*bz*(q1q3 - q0q2);
	wy = 2.0f*bx*(q1q2 - q0q3) + 2.0f*bz*(q0q1 + q2q3);
	wz = 2.0f*bx*(q0q2 + q1q3) + 2.0f*bz*(0.5f - q1q1 - q2q2);

        // error is sum of cross product between reference direction of fields and direction measured by sensors
	ex =   (my*wz - mz*wy);
	ey =  (mz*wx - mx*wz);
	ez =  (mx*wy - my*wx);


  }
  #endif


    // integral error scaled integral gain
	exInt = exInt + ex*Ki;
	eyInt = eyInt + ey*Ki;
	ezInt = ezInt + ez*Ki;

	// adjusted gyroscope measurements
	gx = gx + Kp*ex + exInt;
	gy = gy + Kp*ey + eyInt;
	gz = gz + Kp*ez + ezInt;


  // integrate quaternion rate and normalise
  qa = q0;
  qb = q1;
  qc = q2;
  qd = q3;
	q0 +=  (-qb*gx - qc*gy - qd*gz)*halfT;
	q1 +=  (qa*gx + qc*gz - qd*gy)*halfT;
	q2 +=  (qa*gy - qb*gz + qd*gx)*halfT;
	q3 +=  (qa*gz + qb*gy - qc*gx)*halfT;

  // Normalise quaternion
  recipNorm = invSqrt(q0 * q0 + q1 * q1 + q2 * q2 + q3 * q3);
  q0 *= recipNorm;
  q1 *= recipNorm;
  q2 *= recipNorm;
  q3 *= recipNorm;
soliada
Dimm168pin:

гм, а тупо по rx tx?

Тоже пробовал,так же без результатно.
Бутлоудер соответственно заливал,правда не знаю тот или не тот,но другого вроде нет,называется DiskLoader-Leonardo.hex.

drykov
Musgravehill:

Испытал аналог freeimu4 на Multiwii 2 pre3

Как там кстати компас? На него не оказывают сильное влияние близкорасположенные детальки?

Musgravehill
drykov:

Как там кстати компас? На него не оказывают сильное влияние близкорасположенные детальки?

Залил свой модифицированный код FreeIMU_lib - все идеально. Тестовый кубик на экране повторяет движения платы (поворот на 90 по транспортиру дает 90 градусов приращения по YAW).
В Мультивии 2 пре3 при крене “компас” отклоняется, при тангаже - стоит на месте. Думаю, это связано с реализацией IMU в этой версии прошивки. Сам компас работает хорошо.

Dimm168pin

замутил вия с llc на борту и питаловом 3.3 для датчиков, фото с примерки, спаяю и затестю чуть позже) в роли 328ой меги 8я )

kedrikov
tda2030:

а чего это за страшная такая петля из медного провода?

Греется как кипятильник этот макс,это его особенность.На esyosd до 70 градусов,как вы думаете как ему живется…

tda2030:

Готов поверить, что это суперпупер ядреная земля с экраном, но никак не радиатор ))))

Попробуйте собрать потом посмотрим кокое ядерное заземление вы придумаете 😃😃😃

Sir_Alex:

Радиатор

Прямо в точку 😃

mahowik
omegapraim:

2.0 рк3 вопрос, автор ввел переменную Д для акселя чего не было в предыдущих прошивках, выставив Д=0 получил равномерное качание коптера во все стороны. Изначально автор по стандарту поставил Д = 100, За что может отвечать этот параметр

это давний энхансмент от Шикры… полезен для ФПВ… “для полетать” мне не нравится, т.к. соот-е сила-наклон в стаб моде становится нелинейной…

www.multiwii.com/forum/viewtopic.php?f=8&t=1290

The term D of the PID LEVEL settings is now used to limit the effect of the level correction thanks to the suggestion of Shikra (see viewtopic.php?f=7&t=905 ).
By default (D=100), the behaviour of the stable mode is unchanged.
With a lower D, effects are:

  • a smoothing level change
  • should prevent some wobbles of death
Dimm168pin



собрал проверил, не заработало) быстро нашел где протупил, по этому не выкладываю, завтра доделаю правильную,решилось одним проводком)
цикл 2980-3050, с 3205 ,adxl345,5883L, сколько было “до” не помню но около 3300

chwor
tda2030:


Не смог понять одного - можно ли подключить этот модифицированный E_OSD к плате MWii на меге 328? Или нужен отдельных хардверный (mega 1280(2560))/софтверный uart для передачи данных с IMU? Надо будет код глянуть…

Я подключал к Arduino Nano. OSD подключаеться к пин TX мозга. Если хочеться LCD то ему надо подключить к RX arduino. Передача данньiх к OSD неперерьiвная. Если нужно подключить GPS то он должен бьiть на I2C - я далеко от етого. Подключил сонар DIY007v2 и он работает вместе с баро, но т.к. у меня баро нету то OSD отображает только вьiсота из сонара. У меня ОСД с мега168 и т.к. у ней в 2 раза больше память запихнул еще 2 линии для будущих разработок - данньi из GPS-a: Latitude, Longitude, Distnce to Home и углах ROLL, PITCH, YAW. Думаю не очен сложно добавить ето в коде МултиВии как только код а ля GPS-a будеть без багов. Flash заполнена на 60%.

Dimm168pin


MULTIWII_V1_DIMM168PIN.rar
файл можно смело править заменяя компоненты и изменяя конфигурацию ног, это полноценный мультивии, только вход с приемника 1, ppm sum, обычными приемниками пользоваться не планирую по этому убрал, но если нужно, дорисовать не трудно.

Проверил, подправил, все работает, глюков не замечено, поставил пока на подвес в качестве независимых мозгов .
Схему не выкладываю, ибо ее нет, все как на картинке, оно по даташиту ардуины и pca9306

Gurdzhy
Dimm168pin:

вход приемника 1, ppm sum

Дмитрий, что это значит? Как я понимаю, обычный приемник не подключить? На пример, для управления сервами в ручную.

Dimm168pin
Gurdzhy:

Дмитрий, что это значит? Как я понимаю, обычный приемник не подключить? На пример, для управления сервами в ручную.

по идее можно, указав ардуине нужные ноги , любые из 6ти которые разведены для моторок и d2 который вверху слева

SovGVD

всётаки нашел часок чтобы разобраться как подключить OSD от Syberian для мегапирата к Multiwii

пока сделал только горизонт, но разобрался чего ды как и остальное добавить не проблема
итак

  1. меняем скорость порта на 9600
  2. в Serial под конец SerialCom должно получиться
    case 'E': //GUI to arduino MAG calibration request
      calibratingM=1;
      break;
    }
  } else {
    #if defined(SYBERIAN_OSD)
        byte j=0;
	static int8_t dcmr,dcmp,hom;

	osd_pak++;
	if (osd_pak>2) osd_pak=0; // from 0 to 3

        switch(osd_pak)
	{
	 case 0:
	  dcmr=(angle[ROLL])*0.06;
	  dcmp=(angle[PITCH])*0.03;
	  if(dcmp<-31) dcmp=-31;
	  if(dcmp>31) dcmp=31;
          dcmr=-dcmr; // или не надо переворачивать ось... не помню =)

		serialize8(osd_sync);
		serialize8(osd_pak);
		serialize8(osd_pak);
		serialize8((char)dcmr);
		serialize8((char)dcmp);
		serialize8(j);
		serialize8(j);
		serialize8(j);
		serialize8(j);
		serialize8(j);

		UartSendData();
		break;
	}
	// end txing packet
	osd_sync^=255;

    #endif
  }
  1. в config.h добавляем
    #define SYBERIAN_OSD
  2. в MultiWii_2_0_preтраляля
    добавляем где куча переменных определяется
byte osd_pak=0;
byte osd_sync=0xcb;

вот собственно и всё =) горизонт будет работать, остальное можно добавить:

/*buffer format:
0-sync word changed (0xcb, 0x34)
1  packet type (0 - ahi,bat,cur,mah, 1 - nav, 2 - maintenance
2       0               1               2
3       roll            gpslat1         gpsSPD
4       pitch           gpslat2         gpsALTH
5       homeset         gpslat3         gpaALTL
6       homeL           gpslat4         gpsDISH
7       control_mode    gpslon1         gpsDISL
8       BATl            gpslon2         status
9       Ih              gpslon3         config (1 - OSD off)
10      IL (up 80.0A)   gpslon4         emerg

по этой табличке добавлено в пакете 0 только roll и pitch, себе добавлю еще батарейку (подскажет кто может - делитель напряжения нужен, если я не всю батарейку цеплять собираюсь, а только одну ячейку, т.е. от 3 до 4.2в по идее, а ардуинка хочет от 0 до 5в) и режим (код править лениво, если точнее лениво разбираться как hex получить в linux, поэтому выберу чего нибудь из этой табличке):

        {case 0: print(30,"MANUAL");break;
         case 1: print(30,"CIRCLE");break;
        case 2: print(30,"STABLE");break;
        case 5: print(30,"WIRE A");break;
        case 6: print(30,"WIRE B");break;
        case 10: print(30,"AUTOPILOT");break;
        case 11: print(30,"RTL");break;
        case 12: print(30,"LOITER");break;
        case 13: print(30,"TAKEOFF");break;
        case 14: print(30,"LANDING");break;
        default: print(30,"UNKNOWN");break;

скриншотик для затравки (делался давно, но сейчас то ничего не поменялось)

еще может кто подскажет в каких попугаях высота измеряется, чтобы тоже её в OSD добавить?

SovGVD

кстатии посмотрел код - туда же можно без проблем налепить GPS на обычную ардуинку, сделав включение порта на слушание GPS приемника (пассивного! а то есть приемники, которые не отдают, пока не попросишь, но можно и их, но тогда в пролете OSD) каким нибудь хитрым стик-жестом (для LCD вроде так)

leprud

i2c-gps-nav давно уже есть, тем более интегрировано с мультивии
Рекомендую все вместе совместить

SovGVD
leprud:

i2c-gps-nav давно уже есть

оно как то поможет с UART GPS приемником?

leprud

Ессно. данные по уарту, обмен с основными мозгами - по i2c

SovGVD
leprud:

Ессно. данные по уарту, обмен с основными мозгами - по i2c

т.е. юзая эту либу на обычной Arduino Mini/pro/328p с одним UART можно не писать свои костыли, а уже работает?

leprud

ы, в гугле же написано.
[gps]-[uart arduino]-[i2c]-[multiwii]

SovGVD

судя по коду там про mega и про i2c в основном, а я говорю про односторонний UART на обычной ардуинке, где только ОДИН хардверный UART есть