tracker - kompass HMC5883L - arduino
- jaroslav.falcon
- Příspěvky: 1528
- Registrován: pon 08.10.2012 22:15
- Bydliště: Kladno
tracker - kompass HMC5883L - arduino
Cao,
nemáte prosím radu ?
mám tento kompas s arduinem, code dle webu. Čtení stupňů nějak funguje. Problém je , nastavím směr kompasu na sever tj 0°. otočím o 90 a na display je 120, otočím o -90 na display je 280, otočím o 180 a je to cca OK. žádnou kalibraci jsem nedělal, nevím ani jak. takto se chová samotný senzor i deska APM do které nahraji pouze čtení kompasu. Pokud nahraji plné APM tak to chodí naprosto přesně.
úheh se počítá pouze ze dvou os. nemělo by to být ze 3 ?
MagnetometerRaw raw = compass.ReadRawAxis();
MagnetometerScaled scaled = compass.ReadScaledAxis();
int MilliGauss_OnThe_XAxis = scaled.XAxis;// (or YAxis, or ZAxis)
// Calculate heading when the magnetometer is level, then correct for signs of axis.
float heading = atan2(scaled.YAxis, scaled.XAxis);
float declinationAngle = 0.0457;
heading += declinationAngle;
// Correct for when signs are reversed.
if(heading < 0)
heading += 2*PI;
// Check for wrap due to addition of declination.
if(heading > 2*PI)
heading -= 2*PI;
// Convert radians to degrees for readability.
float headingDegrees = heading * 180/M_PI;
// Output the data via the serial port.
Output(raw, scaled, heading, headingDegrees);
nemáte prosím radu ?
mám tento kompas s arduinem, code dle webu. Čtení stupňů nějak funguje. Problém je , nastavím směr kompasu na sever tj 0°. otočím o 90 a na display je 120, otočím o -90 na display je 280, otočím o 180 a je to cca OK. žádnou kalibraci jsem nedělal, nevím ani jak. takto se chová samotný senzor i deska APM do které nahraji pouze čtení kompasu. Pokud nahraji plné APM tak to chodí naprosto přesně.
úheh se počítá pouze ze dvou os. nemělo by to být ze 3 ?
MagnetometerRaw raw = compass.ReadRawAxis();
MagnetometerScaled scaled = compass.ReadScaledAxis();
int MilliGauss_OnThe_XAxis = scaled.XAxis;// (or YAxis, or ZAxis)
// Calculate heading when the magnetometer is level, then correct for signs of axis.
float heading = atan2(scaled.YAxis, scaled.XAxis);
float declinationAngle = 0.0457;
heading += declinationAngle;
// Correct for when signs are reversed.
if(heading < 0)
heading += 2*PI;
// Check for wrap due to addition of declination.
if(heading > 2*PI)
heading -= 2*PI;
// Convert radians to degrees for readability.
float headingDegrees = heading * 180/M_PI;
// Output the data via the serial port.
Output(raw, scaled, heading, headingDegrees);
Naposledy upravil(a) jaroslav.falcon dne úte 08.11.2016 8:55, celkem upraveno 1 x.
Re: kompass HMC5883L - arduino
Ahoj, magnetometr (kompas) bez kalibrace už z principu nebude fungovat správně. Musíš udělat kalibrační kruh a vypočítat kalibrační konstanty a nebo implementovat automatickou kalibraci (náročnější). To, že se čtou jenom dvě osy je správně, ale před tím bys měl udělat transformaci (rotační matice) dat z magnetometru do vodorovna, tedy z akcelerometru zjistit natočení a podle této polhy transformovat magnetometr. APM bude pravděpodobně už nakalibrované přímo v programu. Ale aby byla kalibrace přesná, je nutno ji udělat ve finálním použití, tedy včetně všech kovových dílů okolo magnetometru. To co potřebuješ je kompletní úloha inerciální jednotky (IMU), zkus k tomu něco pohledat na webu, není to úplně snadné.
Třeba tady http://measure.feld.cvut.cz/cs/system/f ... locked.pdf bys moh najít nějaké info, ale číst se mi to nechce...
Třeba tady http://measure.feld.cvut.cz/cs/system/f ... locked.pdf bys moh najít nějaké info, ale číst se mi to nechce...
T-Rex 600N Spirit, Tx Aurora.
- jaroslav.falcon
- Příspěvky: 1528
- Registrován: pon 08.10.2012 22:15
- Bydliště: Kladno
Re: kompass HMC5883L - arduino
myslel jsem si to po mích experimentech. Chtěl jsem to do trackeru ghetto station. V tomto případě se s tím dále zabývat nebudu a jednoduší je zadat uhel ručně z mobilu, nebo ho načtu z koptéry, která má dané algoritmy implementovány.
Další varianta je implementovat tracker přímo na APM .
Díky za info.
Další varianta je implementovat tracker přímo na APM .
Díky za info.
Re: tracker - kompass HMC5883L - arduino
Já myslím, že by šlo využívat jenom dvě osy pro výpočet azimutu ale bude tam jedno omezení. Problém je v tom, že magnetická siločára u nás není horizontální ale má blíž k vertikále, inklinace je kolem 65 stupňů. Musel bys zaručit aby kompas byl na trackeru vždy přesně vodorovně a musel bys to ověřovat bublinkou vodováhy. Při náklonech by se otáčel. Při náklonu 25 stupňů k jihu by se točil jak holub na báni a nevěděl by směr, při překročení 25 stupňů by se otočil opačně. (90-65=25).
- jaroslav.falcon
- Příspěvky: 1528
- Registrován: pon 08.10.2012 22:15
- Bydliště: Kladno
Re: tracker - kompass HMC5883L - arduino
to právě není pravda, ten magnetometr není lineární, prostě jeho otočení fyzické neodpovídá magnetickému a v různých místech se to liší. třeba ve směru server-jinch je to +-3st ale v ve směru vychod-západ je to treba +-20st takže to ho otočíš fyzicky o 90 a on ukáže třeba jen o 60.
Re: tracker - kompass HMC5883L - arduino
Musí se zkalibrovat, ale klasická kalibrace potřebuje akcelerometry aby kompas věděl jak je otočený ve 3 osách. Ale mám takové hodinky které akcelerometry nemají a kalibruji je ve 2 osách otáčením naplacato na stole. Ale netvrdím, že to bude fungovat s tím tvým kompasem.
- jaroslav.falcon
- Příspěvky: 1528
- Registrován: pon 08.10.2012 22:15
- Bydliště: Kladno
Re: tracker - kompass HMC5883L - arduino
ja mam take hodinky a o proti mobilu jsou nepřesné. Mel jsem i SW s kalibraci jak řikáš, ale to spočítá nějaký offset. Myslím, že kdyš máš ten offset tak dobrý, ale pokud to není lineární tak musíš mít tu rotační matici. Takto si to aspoň myslím na základě selského rozumu, ale na inerci na to selský rozum nestačí
Kdysi jsem se na to dívál a ta matematika je docela hustá.
- jaroslav.falcon
- Příspěvky: 1528
- Registrován: pon 08.10.2012 22:15
- Bydliště: Kladno
Re: tracker - kompass HMC5883L - arduino
jestě mne napadlo rotovat s tím po 1st a odečítat hodnotu. nebo po uhlů, které dá servo jako min . tím bych znal změnu úhlu a naměřenou hodnotu a z toho bych udělal matici. Problém je, že to servo se otočí jen o 180st anavíc si nejsem jist zda by to byla správná cesta.
Re: tracker - kompass HMC5883L - arduino
Tam jde o to, že ty osy jsou sice přesně kolmé ale z výroby nemají nikdy stejnou citlivost. Tak se musí kalibrací srovnat. A do toho ještě kecají okolní železa.
- jaroslav.falcon
- Příspěvky: 1528
- Registrován: pon 08.10.2012 22:15
- Bydliště: Kladno
Re: tracker - kompass HMC5883L - arduino
to by znamenalo, že ta nelinearita je pouze na "stole" a po kalibraci OK, ale ja mam tu nelinearitu i na zahradě. Jestě tedy zkusím udělat externí na kablík a dám ho dál od trackeru. Ted jsem to měla si 10cm .
Re: tracker - kompass HMC5883L - arduino
Jestli chces jednoduchou kalibraci, tak si vycti hodnoty X a Y pro alespon 8 ruznych orientaci (rovnomerne) a vykresli si to do grafu, dostanes neco jako na obrazku v priloze (modra barva). To co potrebujes je na obrazku cervenou barvou, takze si snadno spocitas kolik pricist do te konkretni osy. Citlivos obou os se lisi jenom malo, to pro zacatek neni potreba resit. Vytahovat magnetometr dal od elektroniky neni spatny napad, ale bude to fungovat i pobliz.
T-Rex 600N Spirit, Tx Aurora.