HiTechnics Kompass mit Matlab/Simulink

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

Sensor: HiTechnic NXT Compass Sensor


Seite in Bearbeitung!!

Autor: Andre Adämmer

Betreuer: Prof. Dr. Ulrich Schneider


Einleitung

Dieser Wiki-Eintrag stellt die semesterbegleitende Prüfung des Faches Signalverarbeitende Systeme SS 18 dar. Es gilt den oben genannten Sensor über Matlab/Simulink auszulesen, und die Signalverarbeitungskette dabei zu untersuchen, zu beschreiben und zu verstehen. Dazu werden folgende Fragestellungen über den oben genannten Sensor beantwortet:

  1. Auswahl eines Primärsensors
    1. Wie funktioniert der Sensor?
    2. Welche Rohsignale liefert der Sensor?
  2. Signalvorverarbeitung
    1. Sollen Messwerte oder vorverarbeitete Daten übertragen werden?
    2. Wie lässt sich eine Vorverarbeitung umsetzen?
    3. Wird eine Kennlinie eingesetzt? Wenn ja, wie wird diese kalibriert?
  3. Analog-Digital-Umsetzer
    1. Wie werden die analogen Signale umgesetzt?
    2. Welcher ADU kommt zum Einsatz?
    3. Welche Gründe sprechen für diesen ADU? Alternativen?
  4. Bussystem
    1. Wird ein Bussystem zwischen Sensor und Mikrocontroller eingesetzt?
    2. Wenn ja, wie funktioniert dieses Bussystem?
  5. Digitale Signalverarbeitung
    1. Welche Verarbeitungsschritte sind notwendig?
    2. Welche Filter werden angewendet?
    3. Bestimmen Sie Auflösung, Empfindlichkeit und Messunsicherheit des Sensors.
  6. Darstellung der Ergebnisse
    1. Welche Fehler treten in welchem Verarbeitungsschritt auf?
    2. Stellen Sie die Messunsicherheit bzw. das Vertrauensintervall dar.

Lernziele und Projektplanung

Lernziele

Lernziele sind dementsprechend die Signalverarbeitungskette zu verstehen und Fehleranalysen betreiben zu können. Außerdem wird die Hardware-Komponente, das heißt, wie kann ich einen Sensor anschließen ersichtlich. Des weiteren soll deutlich werden, wann und aus welchen Gründen Filter für die Bearbeitung der Signale zum Einsatz kommen, beziehungsweise zum Einsatz kommen müssen, da möglicherweise die Signale ohne Filter für eine entsprechende Anwendung nicht brauchbar sind.

Projektplanung

Die Projektplanung habe ich mit Hilfe einer fortlaufend geführten Exceltabelle realisiert, welche ich bereits für ein anderes Projekt im Fach Systems Design Engieering genutzt habe. Prof. Dr. Göbel hat dabei den Umgang mit so einer Art der Projektführung erläutert. Zunächst einmal werden dabei bestimmte Tage festgelegt, an welchen man was machen will. Wenn ein Arbeitsschritt vollzogen worden ist, wird das sogenannte Protokolldatum eingestellt und gleichzeitig werden Maßnahmen, Lösungswege und Kommentare in die entsprechenden Zellen geschrieben. Unter Umständen werden dann neue Arbeitsschritte, beziehungsweise Arbeitspakete erstellt, und mit einem Einstelldatum versehen. Da keine spezielle Software, wie zum Beispiel MS Project verwendet werden muss, kann das "Project-Tracking" von nahezu jedem PC aus geschehen. Es ist somit ein einfacher und zugleich sehr effektiver Weg, um den Ablauf des Projekts für sich selber und für andere verfolgen zu können.

Kompass

Allgemein

Ein Kompass dient gemeinhin zur Orientierung bezüglich der Himmelsrichtung und damit zur Navigation. Der am häufigsten verwendte Kompass ist der Magentkompass, welcher mit Hilfe des Erdmagnetfelds die Festlegung der Nordrichtung vollzieht, durch welches hindurch die Ermittlung der anderen Himmelsrichtungen erfolgt. Die geographischen Pole und die Magentpole sind in etwa in einer ähnlichen Lage, weshalb die Ausrichtung der Magnetnadel genutzt werden kann. Elektrische Kompasse nutzen ebenfalls diesen terristischen Effekt, jedoch erfolgt die Bestimmung, also die Messung des Magnetfeldes über den sogenannten Hall-Effekt. Die elektrische Messung ist um eingies genauer als die des Magnetkompass, ist dafür aber auch Störanfällig in der Umgebung von Erzeugen von elektromagnetischen Strahlungen.[1]

HiTechnics Compass

Abb. 1: HiTechnic NXT Compass Sensor[2]

Der Sensor: HiTechnic NXT Compass Sensor ist für die verbesserte Navigation eines Mindstroms NXT Projektes gedacht. Dabei misst der Sensor magnetische Signale, um festzustellen, in welcher Richtung sich Norden befindet. Dabei sind im NXT-Brick Monitor bereits Werte von 0-359 zu lesen. Beispielsweise wird er beim "NXT-robotsoocer" dafür genutzt, um das gegnerische Tor ausfindig zu machen.[2] Wie das genau funktioniert, das heißt wie aus der Detektierung ein Wertebereich von 1-360 Grad entsteht, wird in den nächsten Abschnitten beschrieben, so, auf ebendiese Weise, dass die oben aufgelisteten Fragen beantwortet werden.

Auswahl eines Primärsensors

Funktionsweise des Sensors

Über den HiTechnis NXT Compass sind leider keine akademisch hochwertigen Datenblätter zu finden. Wie oben bereits beschrieben liefert der Sensor Werte von 0-359. Da es sich um einen digitalen Sensor handelt, wird mittels I2C Protokoll eine Verbindung zum Microcontroller hergestellt. Das kann über EV3, NXT oder wie hier später vorgestellt über ein Arduino-Microcontrollerboard realisiert werden. Der Sensor führt 100 Messungen in der Sekunde durch und sendet somit immer eine bestimmte Ausrichtung in der er sich befindet. Im Lesemodus übermittelt der Sensor Werte als I2C Protokoll. Ein weiterer Modus ermöglicht die Kalibrierung des Sensors. Laut HiTechnis ist dieser Modus nur dann wichtig, wenn der Aufbau des Roboters nicht verhindert, dass permanent störende Magnetfelder anderer Roboterbausteine den Sensor irritieren. Durch den Modus der Kalibrierung ist es möglich die Abweichungen des Sensor zu nullen, das heißt diese mit einem Offset beaufschlagen, so dass diese nicht mehr bei der Ermittlung des Erdmagnetfelds stören.[2]


Rohsignale des Sensors

Da der Sensor laut Hersteller über eine I2C Verbindung mit dem Microcontroller kommuniziert, heißt das, dass bereits eine Umwandlung von analogen Rohwerten und deren Digitalisierung im Sensor, also im Sensorgehäuse entsprechende Komponenten vorhanden sein müssen. Leider ist es mir nicht möglich gewesen diesbezüglich akademisch verwendbare Informationen, trotz mehrmaligen Anschreiben des Technischen Supports des Herstellers, herauszufinden. Über den oben genannten Sensor bleibt der innere Aufbau und die interne ADU Umwandlung unbekannt und wird an dieser Stelle mittels Rückschlüsse auf ähnlich funktioniernder Sensoren erläutert.

Abb. 2: Prinzip Fluxgate Kompass:Durch Veränderung eines angelegten Stroms an der Triebspule wird die Sättigung in der Sensorspule verändert.[3]

In der mobilen Robotik werden weitesgehend zwei Kompassprinzipien verwendet. Zum einen der sogenannte Halbleiterkompass (Fluxgate Compass) welcher die magnetische Feldstärke misst, indem die Stärke eines Elektromagneten gezielt geändert wird. Er besteht aus zwei Spulen. Einer Feld und einer Sensorspule, welche beide gemeinsam um einen Kern gewickelt werden. Dabei werden sich die Sättigungseigenschaften des Spulenkerns zunutze gemacht. Ein durchläassiger ungesättigter Spulenkern zieht magnetische Feldlinien hinsich hinein. Ein gesättigter Spulenkern hat keine Auswirkung auf die magnetischen Feldlinien. Andersherum kann man durch Abwechselung zwischen Sättigung und Entsättigung des Spulenkerns der Triebspule, also durch Wechseln der Stärke des angelegten Stroms einen unterschiedlichen magnetischen Fluss erzeugen, welcher dann unterschiedliche Spannungen in der Sensorspule induziert. Diese Spannung hängt dann vom magnetischen Feld ab, in welchem die Spulen gedreht werden. Um nun die Richtung für magnetisch Nord zu bestimmen, werden zwei Spulen orthogonal zueinander angeordnet. Der Winkel, der den jeweiligen Spulenstrom bestimmt, ergibt sich aus den beiden Spannungen (V1,V2), die in den beiden Sensorspulen gemessen werden. Der sich ändernde Winkel ist bei orthogonaler Anordunung über den Tangens beschreibbar.[3]


[3]


Ähnlich funktioniert der Hall-Effekt-Kompass. Dieser nutzt zwei zueinander angeordnete Hall-Sensoren, welche den Änderungswinkels zu den magnetischen Erdfeldlinien über die Änderung der magnetischen Flussdichte(B)der beiden Sensoren beschrieben. Das Prinzip beruht auf den Hall-Effekt,also das Auftreten einer elektrischen Spannung durch ein stromdurchflossenden Leiter, welcher sich in einem stationären Magnetfeld befindet.[3] An dieser Stelle wird lediglich noch der mathematische Zusammenhang beschrieben. Analog für die Winkeländerung des Fluxgate Kompasses gilt hier:


[3]

Signalvorverarbeitung

Um für den Roboter nützliche Werte bezüglich der Ausrichtung zu bekommen, müssen Signale eventuell aufbereitet werden, bevor sie digitalisiert werden. Durch äußere magnetische Felder verändert sich der Spannungsverlauf in der Spule des Fluxgate Kompasses. Dieser Spannungsverlauf muss nun aufbereitet werden, damit er schließlich digitalisiert werden kann. Wie genau das im HiTechnis NXT Compass Sensor vollzogen wird, ist nicht klar, da keine passende Literatur verfügbar ist.

Analog-Digital-Umsetzer

ADU im Kompass Sensor

Gründe für ein ADU/Alternativen

Bussystem

I2C

USB PC-Arduino

Digitale Signalverarbeitung

Filteranwendung

Auflösung,Empfindlichkeit und Messunsicherheit

Darstellung der Ergebnisse

Zusammenfassung

Video

Ablage

// --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
// Version 6, November 27, 2015.
//    Added waiting for the Leonardo serial communication.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//
 
#include <Wire.h>
 
 
void setup()
{
  Wire.begin();
 
  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}
 
 
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
 
    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
 
      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Unknown error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
 
  delay(5000);           // wait 5 seconds for next scan
}



int compassAddress = 0x01; //from I2C Scanner
int TestValue;  //variable for compass heading
 
void setup() {
  Serial.begin(9600); //sets up Serial monitor
 
  //The code below turns on i2c, opens communication to compass
  //sensor, and does a test connection.
  Wire.begin();  //turn on i2c
  Wire.beginTransmission(compassAddress); //open communication to sensor
  Wire.write(0x00); //blank packet
  Wire.endTransmission(); //close communication
  while(Wire.available() > 0)
     Wire.read();
}
 
void loop() {  
  ReadCompassSensor();  //calls the function listed below
  Serial.println(TestValue); //prints the compass heading
  delay(100); //delay for reading output
}
 
void ReadCompassSensor(){
  //this code lets the arduino know you want to talk to the compass Sensor
  Wire.beginTransmission(compassAddress);
  Wire.write(0x44);
  Wire.endTransmission();
 
  //the code below requests 2 bytes of information and then combines them
  //to make a number 0-360 that it saves in the variable TestValue
  Wire.requestFrom(compassAddress, 2);
   while(Wire.available() < 2);
   byte lowbyte = Wire.read();  
   byte highbyte = Wire.read();
   TestValue = word(highbyte, lowbyte);
}


[4]

Literatur

  1. Kompass. Abgerufen am 30. Juni 2018.
  2. 2,0 2,1 2,2 HiTechnic NXT Compass SensorAbgerufen am 30. Juni 2018. Referenzfehler: Ungültiges <ref>-Tag. Der Name „HiTechnic NXT Compass Sensor“ wurde mehrere Male mit einem unterschiedlichen Inhalt definiert. Referenzfehler: Ungültiges <ref>-Tag. Der Name „HiTechnic NXT Compass Sensor“ wurde mehrere Male mit einem unterschiedlichen Inhalt definiert.
  3. 3,0 3,1 3,2 3,3 3,4 NEHMZOW,UlRICH:Digitale Robotik. Abgerufen am 1. Juli2018. Referenzfehler: Ungültiges <ref>-Tag. Der Name „NEHMZOW,UlRICH:Digitale Robotik“ wurde mehrere Male mit einem unterschiedlichen Inhalt definiert.
  4. Arduino-Libraries. Abgerufen am 30.Mai 2018.



→ zurück zum Hauptartikel: Signalverarbeitende Systeme