Jste zde

Když GPS nestačí, inerciální měření IMU mu pomůže

Lokalizovat dané zařízení kdekoli na Zemi pouze pomocí globálního navigačního družicovýho systému (GNSS) sebou nese několik problémů. Tyto problémy lze překonat použitím inerciálního měření (IMU), které doplňují GNSS.

Tento článek popisuje použití inerciálního měření IMU pomocí gyroskopu, akcelerometru a magnetometru k měření polohy od počátečního bodu. Představíme vhodné příklady řešení a jejich použití.

Jak IMU doplňují GNSS

Problémy s GNSS jsou čtyři:

  • Signály GNSS jsou velmi směrové a mohou být blokovány budovami.
  • Přijímače mají různé doby startu (warm a cold start), které se pohybují v desítkách sekund až jedna minuta. Tento čas spuštění je potřebný, aby přijímač získal více satelitních signálů potřebných pro výpočet polohy.
  • Aktualizace polohy jen pomocí GNSS je omezena na jednou za sekundu. To je dobré pro sledování velkých, pomalu se pohybujících objektů. Čas startu je příliš dlouhý a frekvence aktualizace je nedostatečná pro mnoho vestavěných aplikací.
  • Přesnost GNSS se měří v metrech, což je příliš hrubé pro použití ve většině vestavěných aplikací.

Využití lokalizace pomocí IMU je nejen pro pozemní dopravu, ale i pro robotiku a virtuální realitu. .Zařízení IMU poskytují přesnější lokalizaci a rychlejší aktualizaci, což právě vyžadují vestavěné aplikace.  IMU poskytují relativní údaje o poloze ze známého počátečního bodu, kdežto GNSS přijímače dávají informaci o absolutní poloze. Takže tyto dvě metody se doplňují.

Moderní elektronické systémy IMU, které jsou k dispozici jako komponenty pro montáž na desku, jsou založeny na technologii mikroelektromechanických systémů (MEMS). Jejich výhodou je, že mají různé stupně volnosti (DOF), a na rozdíl od přijímačů GNSS nejsou závislé na rádiových signálech.

Spotřebovávají velmi málo energie a jsou k dispozici v různém provedení s různými vlastnostmi(rozsah, přesnost atd.). Tyto vlastnosti IMU pomáhají k vyšší přesnosti polohy daného zařízení(Viz “Design Location Tracking Systems Quickly Using GNSS Modules.”)

Anatomie IMU

Snímače pohybu reagují na fyzický pohyb a jsou schopni měřit zrychlení, rychlost nebo vzdálenost. Inerciální čidla patří do speciální třídy snímačů pohybu. IMU poskytují vysoce přesné informace o poloze.

IMU obsahují jeden nebo více z následujících typů snímačů pohybu:

  • Gyroskopové snímače měří změny úhlu polohy, obvykle vyjádřené ve stupních za sekundu. Integrovanou úhlovou rychlost lze použít ke sledování změny orientace. Gyroskopické snímače jsou k dispozici s jedním, dvěma nebo třemi osami. Gyroskopy sledují relativní pohyb nezávisle na gravitaci. Z tohoto důvodu může dojít k chybě polohy nazvané "drift".
  • Akcelerometrické snímače měří lineární zrychlení, včetně zrychlení způsobené pohybem zařízení a gravitačním zrychlením. Zrychlení se měří v jednotkách G, což jsou násobky gravitační síly Země (1 G = 9,8 m / s2). Akcelerometry jsou k dispozici s jednou, dvěma nebo třemi osami, které definují souřadnicový systém X, Y a Z. Údaje z akcelerometru mohou být použity k měření statické orientace zařízení a to výpočtem naměřeného úhlu zařízení a kompenzace gravitační síly.
  • Magnetické snímače měří intenzitu magnetického pole, obvykle v jednotkách microTeslas (μT) nebo Gauss (100 μT = 1 Gauss). Nejběžnějším magnetickým senzorem používaným pro mobilní elektroniku je tříosý magnetometr Hall-effect. Velikost magnetického pole Země se pohybuje v rozmezí od 25 do 65 μT v závislosti na geografické poloze a úhlu náklonu. Pro Spojené státy se intenzita pohybuje mezi 45 a 55 μT, v úhlu mezi 50 a 80 stupni. Díky detekci úhlu magnetického pole a úhlu vůči gravitaci získáme data, pomocí kterých lze získat polohu s vysokou přesností. Pro získání té správné pozice je zapotřebí znát aktuální zeměpisnou šířku a délku.
  • Snímače tlaku měří diferenciální nebo absolutní tlak v jednotkách hektopascalu (hPa) nebo milliBaru (mbar). Standardní atmosférický tlak na hladině moře je definován jako 1013,25 hPa. Změny nadmořské výšky způsobují odpovídající změny tlaku okolního vzduchu a lze je použít pro sledování vertikálního pohybu.

 

Sledování pohybu pomocí IMU využívá data z více zdrojů, aby odvodil jedinou přesnou polohu zařízení a jeho orientaci v prostoru. Data z různých zdrojů se musí správně zkombinovat a vyhodnotit pomocí složitých matematických algoritmů vyvinutých buď výrobcem IMU nebo samotným vývojářem aplikací. Výpočet polohy se provádí pomocí následujících naměřených dat:

  • Gravitace - konkrétně zemská gravitace s vyloučením zrychlení způsobené pohybem samotného zařízení. Akcelerometr měří gravitační vektor, když je IMU v klidu. Když je IMU v pohybu, měření gravitace vyžaduje zpracování dat z akcelerometru a gyroskopu současně a odečte se zrychlení způsobeného pohybem. Aplikace, které vyžadují detekci orientace vzhledem k zemi, mohou používat měření gravitace.
  • Lineární zrychlení - ekvivalentní zrychlení zařízení měřeno akcelerometrem s odečtením gravitačního vektoru. Lineární zrychlení IMU může být použito k měření pohybu v trojrozměrném prostoru. Přesnost této hodnoty závisí na přesnosti sledování gravitačního vektoru.
  • Orientace (attitude) - množina Eulerových úhlů(úhel otočení vůči ose X,Y a Z) měřeno v jednotkách stupňů.
  • Rotační vektor - odvozený z kombinace dat ze senzorů akcelerometru, gyroskopu a magnetometru. Vektor rotace představuje úhel natočení kolem specifikované osy.

IMU mohou být použity pro různé aplikace, včetně spotřebitelských (mobilních telefonů), lékařských (zobrazovacích), průmyslových (robotických) a vojenských (sledování hlavic). Požadovaná IMU přesnost závisí na požadavcích aplikace.

                                                                               

Šest stupňů volnosti

Stupně volnosti (Degrees of freedom - DOF) vyznačují možné pohyby tělesa v trojrozměrném prostoru. Existuje pouze šest stupňů volnosti v 3D prostoru: Tři stupně volnosti pro lineární pohyb (dopředu / dozadu, nahoru / dolů, doleva / doprava) a tři stupně volnosti pro rotaci (Otočení v ose X,Y a Z - Pitch, Rotation a Roll). Bez ohledu na to, jak je pohyb složitý, může být jakýkoli pohyb tělesa ve vesmíru vyjádřen jako kombinace šesti základních stupňů volnosti.

Ve světě IMU však existuje řada snímačů pro 9 stupňů volnosti nebo dokonce i 10. To způsobuje zmatek, jelikož pro popis pohybu postačuje popis jen šesti stupňů volnosti.

Vysvětlení je jednoduché. Devět stupňů volnosti má senzor, který má 3 DOF pro akcelerometr, 3 DOF pro gyroskop a 3 DOF magnetometru. Pak se senzor označuje, že je schopen snímat 9 stupňů volnosti. Přidáním senzoru atmosférického tlaku do pro měření nadmořské výšky se vytvoří 10 DOF IMU.

IMU jsou k dispozici v široké škále cen a možností. Senzorová deska SEN0140 10 DOF MEMS IMU od firmy DFRobot je kompaktní deska IMU, která integruje akcelerometr ADXL345 od Analog Devices , magnetometr  od Honeywell Microelectronics & Precision Sensors, gyroskop od TDK Invensense, a snímač barometrického tlaku od Bosch Sensortec.

Obrázek 1: Senzorová deska DFRobot SEN0140 10 DOF MEMS IMU integruje akcelerometr, magnetometr, gyroskop a snímač barometrického tlaku. (Zdroj obrázku: DFRobot)

Vlastnosti měření senzorové desky SEN0140 jsou:

  • Akcelerometr ADXL345: 13bitové rozlišení ± 16 g (udržování stupnice 4 mg / LSB ve všech rozmezích g)
  • Magnetometr Honeywell Microelectronics & Precision Sensors: ± 8 gauss magnetický plný rozsah
  • Gyroskop TDK Invensense: plný rozsah ± 2000 °/ s
  • Snímač barometrického tlaku Bosch Sensortec: 4,35 PSI až 15,95 PSI (30 kPa až 110 kPa)

 

Všechny čtyři z těchto senzorů jsou připojeny k jednomu SPI sériovému portu desky, což znamená, že procesor musí adresovat a dotazovat každý snímač zvlášť. DFRobot SEN0140 také obsahuje lineární napájecí zdroj LDO s nízkou hladinou šumu, který dokáže napájet snímače 3 až 8 voltů. DFRobot 10 DOF IMU je přímo kompatibilní s vývojovými deskami Arduino pomocí stávající knihovny Arduino. Může být také použit s jakýmkoli mikroprocesorem nebo mikrokontrolérem, který má port SPI.

Následuje ukázkový kód Arduino, který slouží k získání dat z desky SEN0140 10 DOF(výpis 1):

#include <Wire.h>
#include <FreeSixIMU.h>
#include <FIMU_ADXL345.h>
#include <FIMU_ITG3200.h>
#include <HMC5883L.h>
 
float angles[3]; // yaw pitch roll
float heading;
short temperature;
long pressure;
 
// Set the FreeSixIMU object
FreeSixIMU sixDOF = FreeSixIMU();
HMC5883L compass;
// Record any errors that may occur in the compass.
int error = 0;
 
void setup(){
  Serial.begin(9600);
  Wire.begin();
  delay(5);
  sixDOF.init(); //init the Acc and Gyro
  delay(5);
  compass = HMC5883L(); // init HMC5883
  error = compass.SetScale(1.3); // Set the scale of the compass.
  error = compass.SetMeasurementMode(Measurement_Continuous); // Set the measurement mode to Continuous  
  if(error != 0) // If there is an error, print it out.
    Serial.println(compass.GetErrorText(error));
  bmp085Calibration(); // init barometric pressure sensor
}
void loop(){
  sixDOF.getEuler(angles);
  temperature = bmp085GetTemperature(bmp085ReadUT());
  pressure = bmp085GetPressure(bmp085ReadUP());
  getHeading();
  PrintData();
  delay(300);
}
void getHeading(){
  // Retrive the raw values from the compass (not scaled).
  MagnetometerRaw raw = compass.ReadRawAxis();
  // Retrived the scaled values from the compass (scaled to the configured scale).
  MagnetometerScaled scaled = compass.ReadScaledAxis();
  // Values are accessed like so:
  int MilliGauss_OnThe_XAxis = scaled.XAxis;// (or YAxis, or ZAxis)
  // Calculate heading when the magnetometer is level, then correct for signs of axis.
  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.
  heading = heading * 180/M_PI; 
}
void PrintData(){
  Serial.print("Eular Angle: ");
  Serial.print(angles[0]);
  Serial.print("  ");  
  Serial.print(angles[1]);
  Serial.print("  ");
  Serial.print(angles[2]);
  Serial.print("  ");
  Serial.print("Heading: ");
  Serial.print(heading);
  Serial.print("  ");
  Serial.print("Pressure: ");
  Serial.print(pressure, DEC);
  Serial.println(" Pa");
}
 
Výpis 1: Tento ukázkový kód Arduino slouží k získání dat z desky SEN0140 10DOF. (Zdroj kódu: DFRobot)
 

Výstup tohoto kódu je uvedený na obrázku 2.

Obrázek 2: Výstup ukazující stav snímačů SEN0140. (Zdroj obrázku: DFRobot)

 

9-osý IMU / barometr Digilent’s 410-326 je založen na STMicroelectronics’ LSM9DS1, který obsahuje 3D akcelerometr, 3D gyroskop, a 3D magnetometr s následujícími vlastnostmi:

  • ± 2 / ± 4 / ± 8 / ± 16 g plný rozsah lineární zrychlení (3D akcelerometr)
  • ± 245 / ± 500 / ± 2000 ° / sekundu plný rozsah úhlové rychlosti (3D gyroskop)
  • ± 4 / ± 8 / ± 12 / ± 16 gauss magnetický plný rozsah (3D magnetometr)

 

Všechny tři typy snímačů pohybu - akcelerometr, gyroskop,a magnetometr - jsou integrovány do jednoho malého pouzdra LSM9DS1 a jsou připojeny přes I2C rozhraní.

Obrázek 3: 9-osý IMU / barometr Digilent 410-326 využívá modul LSM9DS1 iNEMU IMU společnosti STMicroelectronics, který kombinuje 3D akcelerometr, 3D gyroskop a 3D magnetometer do jednoho pouzdra. (Zdroj obrázku: Digilent)

Thales Visionix's NavChip Precision 6-axis MEMS IMU je odvozen z vojenské techniky a získává údaje o pozici frekvencí 1 kHz. Potom data zpracovává frekvencí 200 Hz nebo nižší volitelnou frekvencí.

Rovněž provádí kompenzace pomocí tovární kalibrace a vestavěných snímačů teploty. Specifikace akcelerometru a magnetometru jsou:

  • Akcelerometr: Celková úhlová rychlost 2000 ° / s
  • Magnetometr: Plné zrychlení ± 16 g

 

Modul NavChip má port TTL UART a port SPI a má vstup 1 pulz/sekundu pro synchronizaci s modulem GPS. Je k dispozici ve vývojovým kitu V14447-03-02 RS-422 pro snadnější vývoj. Modul má zabudovaný testovací režim (BIT) a průběžnou diagnostiku. Je továrně kalibrována a teplotně kompenzovaná v rozsahu provozních teplot od -40 ° C do + 85 ° C.

Kalibrace a teplotní kompenzace společnosti Thales v modulech NavChip umožňuje dosáhnout vlastností, které nejsou běžné v ostatních běžně dostupných IMU modulech:

  • Gyro bias provozní stabilita: 5 ° / h
  • Úhlová náhodná odchylka: 0,18 ° / hod
  • Rychlostní náhodná odchylka: 0,03 m / s / hod

 

Software

Získání dat z jednotlivých senzorů není obtížné. Jak ukazuje příklad čtení pomocí kódu určeného pro Arduino. Nicméně, integrace těchto přečtených dat ze senzorů do navigačních dat je složitějším úkolem. Existují některé balíčky s otevřeným zdrojovým kódem, které jsou speciálně navrženy tak, aby tuto integraci pomohli realizovat bez větších potížích.

ArduPilot Mega (APM) je jeden takový program vyvinutý speciálně pro autonomní drony. Podporuje pilotovaný i nepilotovaný (plně autonomní) let a zahrnuje stovky GPS bodů, ovládání kamery a autonomní vzlet a přistání.

Operační systém pro roboty(ROS) z Open Source Robotics Foundation je flexibilní framework pro psaní robotického softwaru. Jedná se o sadu nástrojů a knihoven, jejichž cílem je zjednodušit psaní komplexního robustního software pro chování robotů. ROS obsahuje kód obsluhující rozhraní hned pro několik IMU navigačních modulů.

Závěr

Mnoho integrovaných aplikací vyžaduje schopnost lokalizovat polohu zařízení kdekoli na zemi. Samotné GNSS přijímače nejsou dostatečné, ale když jsou doplněny pomocí IMU je dosažena vyšší přesnost lokalizace a také se dosáhne rychlejší aktualizace polohy.

 

Článek vyšel v originále "Use IMUs for Precise Location Data When GPS Won’t Suffice"  na webu DigiKey.com, autorem je Steve Leibson

Hodnocení článku: