ArduCopter i magnetometr.

FC oparte na Arduino

Moderatorzy: moderatorzy2014, moderatorzy

wjacek
Posty: 418
Rejestracja: niedziela 26 gru 2010, 14:36
Lokalizacja: okolice Poznania

ArduCopter i magnetometr.

Post autor: wjacek »

Jako że watek o ArduCopterze się bardzo rozrasta zakładam nowy wątek dot. kalibracji magnetometru.

Mój sprzęt to:
- ArduPilot Mega - Arduino Compatible UAV Controller w/ ATMega1280
- ArduPilotMega IMU Shield/OilPan Rev-H (With Pins)
- HMC5843 - Triple Axis Magnetometer Rev 1.1
- MediaTek MT3329 GPS 10Hz + Adapter Basic
Magnetometr kupiłem w DYIDrones pod koniec grudnia i pochodził z wadliwej partii v1.1, został więc naprawiony zgodnie z informacjami podanymi na stronie: http://diydrones.com/profiles/blogs/diy ... eter-issue

Z tego co można wyczytać magnetometr jest potrzebny do poprawnego działania funkcji GPS Hold, ponadto w Ardu Copter Configuratorze w ustawieniach trybów lotu mamy w trybie Stable Mode opcję załączania magnetometru.
Na dzień dzisiejszy moje doznania są takie że Ardu lata gorzej z załączonym magnetometrem niż bez. Mój Ardu z załączonym magnetometrem obraca się jednostajnie powoli w lewo. Być może/zapewne wynika to z niepoprawnej kalibracji lub uszkodzenia magnetometru, czego do końca nie jestem pewien.
W związku z tym opiszę jak ja zrozumiałem opisy i przeprowadzam kalibrację.

Na początek teoria:
Kalibracja magnetometru różni się nieco w oprogramowaniu ArduCopterNG i ArduPiratesNG.
W kodzie ArduCoptera znajdziemy opis:
// Magneto orientation and corrections.
// If you don't have magneto activated, It is safe to ignore these
//#ifdef IsMAG
#define MAGORIENTATION AP_COMPASS_COMPONENTS_UP_PINS_FORWARD // This is default solution for ArduCopter
...
// To get Magneto offsets, switch to CLI mode and run offset calibration. During calibration
// you need to roll/bank/tilt/yaw/shake etc your ArduCopter. Don't kick like Jani always does :)
#define MAGOFFSET 0.0,0.0,0.0
....
// Obsolete, Magnetometer offset are moved to CLI
// Declination is a correction factor between North Pole and real magnetic North. This is different on every location
// IF you want to use really accurate headholding and future navigation features, you should update this
// You can check Declination to your location from http://www.magnetic-declination.com/
#define DECLINATION 0.0
// And remember result from NOAA website is in form of DEGREES°MINUTES'. Degrees you can use directly but Minutes you need to
// recalculate due they one degree is 60 minutes.. For example Jani's real declination is 0.61, correct way to calculate this is
// 37 / 60 = 0.61 and for Helsinki it would be 7°44' eg 7. and then 44/60 = 0.73 so declination for Helsinki/South Finland would be 7.73


Natomiast w kodzie Ardupirates wyglada to tak:
// Magnetometer Setup
#ifdef IsMAG
// To get Magneto offsets, switch to CLI mode and run offset calibration. During calibration
// you need to roll/bank/tilt/yaw/shake etc your ArduCoptet. Don't kick like Jani always does :)
...
#define MAGOFFSET -70,55.5,-61.5 // Hein's Hexa calibration settings. You have to determine your own.

// MAGCALIBRATION is the correction angle in degrees (can be + or -). You must calibrating your magnetometer to show magnetic north correctly.
// After calibration you will have to determine the declination value between Magnetic north and true north, see following link
// http://code.google.com/p/arducopter/wiki/Quad_Magnetos under additional settings. Both values have to be incorporated
// You can check Declination to your location from http://www.magnetic-declination.com/
// Example: Magnetic north calibration show -1.2 degrees offset and declination (true north) is -5.6 then the MAGCALIBRATION should be -6.8.
// Your GPS readings is based on true north.
// For Magnetic north calibration make sure that your Magnetometer is truly showing 0 degress when your ArduQuad is looking to the North.
// Use a real compass (! not your iPhone) to point your ArduQuad to the magnetic north and then adjust this
// value until you have a 0 dergrees reading in the configurator's artificial horizon.
// Once you have achieved this fine tune in the configurator's serial monitor by pressing "T" (capital t).
...
#define MAGCALIBRATION -15.65 // Hexa Hein, South Africa, Centurion. You have to determine your own.



Jako że próbowałem kalibrować magnetometr z identycznym skutkiem w obydwu oprogramowaniach opiszę swoje poczynania na przykładzie ArduCoptera.

1. w kodzie oprogramowania ustawiam linie:
#ifdef IsMAG
#define MAGORIENTATION AP_COMPASS_COMPONENTS_UP_PINS_FORWARD
#define MAGOFFSET 0.0,0.0,0.0
#define DECLINATION 3.83

deklinacja dla moich okolic to 3.50, co po zastosowaniu podanego w kodzie wzoru daje 3.83

2. wgrywam od nowa oprogramowania ArduCopterNG RC2
3. reset FC
4. podłączenie za pomocą serial monitora CLI
5. aktywacja magnetometru "a"
6. ustawienie offsetu "c" - podczas ustawiania offsetu kręcę dzielnie qadem we wszystkich osiach
na ekranie otrzymuję coś takiego:
Obrazek
7. naciskam jeszcze raz "c" co powoduje zapisanie offsetu i wyjście z funkcji

Teraz moje wątpliwości:
1. Jak widać w powyższym przypadku odczytanie offsetu nastąpiło niby w ciągu kilkunastu odczytów, co trwało kilka sekund. Często dzieje się to w ciągu zaledwie 3 odczytów.
2. Po obliczeniu offsetu dalsze kręcenie quadem nic nie daje, nie powoduje żadnych zmian. Czy Heading to nie odczyt online i nie powinien się zmieniać wraz ze zmianami położenia quada (naewt po obliczeniu offsetu)?
3. Na kilkadziesiąt prób kalibracji wyliczony offset jest zawsze bardzo podobny - to chyba dobrze ?
4. Po podłączeniu do Ardu Copter Configuratora i wybraniu opcji sztucznego horyzontu widzę na dolnej podziałce odczyt np. "86" obrócenie quada powoduje zmianę oczytu a następnie powrót do tego samego odczytu.
Domyślam się że sztuczny horyzont powinien działać tak że gdy quad (magnetometr) jest ustawiony na północ powinien wskazywać "0" a przy obrocie odpowiednie odchylenie + lub - ?
Z wyłączonym magnetometrem wydaje mi się że jest OK, tzn. nie widzi północy ale obrót quada powoduje zmianę odczytu w sztucznym horyzoncie.

Nie wiem czy ma to coś wspólnego ale wszelakie próby były przeprowadzane z podłączonym GPS'em ale w domu, czyli bez fix'a.

Liczę na podpowiedzi/poprawki/opinie a przede wszystkim na wypowidzi jak u Was wygląda kalibracja i zachowanie magnetometru.

pozdrawiam,
jacek
Awatar użytkownika
Krzys
Posty: 137
Rejestracja: sobota 08 sty 2011, 19:37
Lokalizacja: PL

Re: ArduCopter i magnetometr.

Post autor: Krzys »

Witam, moje oprogramowanie to http://ardupirates.googlecode.com/svn/t ... PiratesNG/
Sprzęt ten sam co kolega.

Zachowanie układu następujące bez GPS 0 mam na północy po podłączeniu GPS północ mam na zachodzie :)

K.
wjacek pisze:Jako że watek o ArduCopterze się bardzo rozrasta zakładam nowy wątek dot. kalibracji magnetometru.
...

pozdrawiam,
jacek
ODPOWIEDZ