Difference between revisions of "Trajectory from gyro/accellerometer/compas"

From RoboWiki
Jump to: navigation, search
(O súčiastke:)
m
 
(10 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Zadanie: ==
+
== Zadanie ==
 
Trajectory from gyro/accellerometer/compas. Requirement: must use this part: 9DOF IMU, use any real robot.
 
Trajectory from gyro/accellerometer/compas. Requirement: must use this part: 9DOF IMU, use any real robot.
  
  
== O súčiastke: ==
+
== O súčiastke ==
[[Image:09623-01b.jpg|right|300px|caption]]
+
[[Image:09623-01b.jpg|300px|9DOF IMU]]
 +
 
 
V projekte sme mali využiť súčiastku [https://www.sparkfun.com/products/9623 9DOF IMU] a následne zo získaných dát vykresliť prejdenú trajektóriu robota.
 
V projekte sme mali využiť súčiastku [https://www.sparkfun.com/products/9623 9DOF IMU] a následne zo získaných dát vykresliť prejdenú trajektóriu robota.
  
* Na doske 9DOF IMU sa nachádzajú nasledujúce komponenty:
+
Na doske 9DOF IMU sa nachádzajú nasledujúce komponenty:
** akcelerometer
+
 
** magnetometer
+
* [http://en.wikipedia.org/wiki/Accelerometer akcelerometer]
** gyroskop
+
* [http://en.wikipedia.org/wiki/Magnetometer magnetometer]
 +
* [http://en.wikipedia.org/wiki/Gyroscope gyroskop]
 +
 
 +
 
 +
== 1. etapa ==
 +
V prvej etape sme sa snažili prepojiť súčiastku s počítačom a získať z nej potrebné dáta. Postupným testovaním a dolaďovaním sme získali hodnoty:
 +
 
 +
* Yaw - udáva uhol zabočenia
 +
* Pitch - udáva uhol stúpania / klesania
 +
* Roll - udáva uhol výkyvu doprava / doľava
 +
 
 +
[[Image:YawPitchRoll.jpg|300px|Yaw, Pitch, Roll]]
 +
 
 +
Nami získané údaje vyzerali takto:
 +
[[Image:etapa1.png|none|1. etapa]]
 +
 
 +
 
 +
 
 +
== 2. etapa ==
 +
Následne sme vykreslili dáta získané v prvej etape pomocou OpenGL:
 +
[[Image:etapa2.png|none|2. etapa]]
 +
 
 +
<pre>
 +
 
 +
  // pomocna konstanta
 +
  float rozdiel_sipok = 12;
 +
 
 +
  // ********* YAW *********
 +
  pushMatrix();
  
 +
  translate(-700, 400);
 +
  float angle = = radians(yaw - yawOffset);
 +
  // sipka - smer dole => +180 smer hore
 +
  rotateZ(angle + radians(180));
 +
  line(0, -50, 0, 50);
 +
  line(0, 50, rozdiel_sipok, 20);
 +
  line(0, 50, -rozdiel_sipok, 20);
  
 +
  popMatrix();
 +
 
 +
  // ********* PITCH *********
 +
  pushMatrix();
  
 +
  translate(-500, 400);
 +
  rotateZ(radians(pitch));
 +
  line(-50, 0, 50, 0);
 +
  line(-50, 0, -50 + 20, rozdiel_sipok);
 +
  line(-50, 0, -50 + 20, -rozdiel_sipok);
 +
 
 +
  popMatrix();
 +
 
 +
  // ********* ROLL *********
 +
  pushMatrix();
  
 +
  translate(-300, 400);
 +
  rotateZ(radians(roll));
 +
  line(-50, 0, 50, 0);
 +
 
 +
  popMatrix();
 +
</pre>
  
 +
== 3. etapa ==
 +
V tretej etape sme chceli dosiahnuť vykreslenie trajektórie podľa získaného Yaw (uhol zabočenia). S využitím polárnych súradníc a automatického pohybu vpred sme nakoniec dokázali vykresliť trajektóriu v rovine.
 +
[[Image:etapa3.png|none|3. etapa]]
  
 +
<pre>
 +
  angle = radians(yaw - yawOffset);
 +
  // d - vzdialenosť, ktorú robot prejde
 +
  double d = 0.9;
 +
  // deltaX, deltaZ - posun robota
 +
  double deltaZ = cos(angle) * d;
 +
  double deltaX = sin(angle) * d;
 +
  // xx, yy = pozícia robota
 +
  xx += deltaX;
 +
  yy -= deltaZ;
 +
</pre>
  
=== Akcelerometer ===
+
== Zdrojové kódy ==
  
=== Magnetometer ===
+
[[Media:projekt.pde|projekt.pde]]
  
=== Gyroskop ===
+
== Video ==
 +
<youtube>3gMPFBBc14s</youtube>

Latest revision as of 23:09, 16 September 2013

Zadanie

Trajectory from gyro/accellerometer/compas. Requirement: must use this part: 9DOF IMU, use any real robot.


O súčiastke

9DOF IMU

V projekte sme mali využiť súčiastku 9DOF IMU a následne zo získaných dát vykresliť prejdenú trajektóriu robota.

Na doske 9DOF IMU sa nachádzajú nasledujúce komponenty:


1. etapa

V prvej etape sme sa snažili prepojiť súčiastku s počítačom a získať z nej potrebné dáta. Postupným testovaním a dolaďovaním sme získali hodnoty:

  • Yaw - udáva uhol zabočenia
  • Pitch - udáva uhol stúpania / klesania
  • Roll - udáva uhol výkyvu doprava / doľava

Yaw, Pitch, Roll

Nami získané údaje vyzerali takto:

1. etapa


2. etapa

Následne sme vykreslili dáta získané v prvej etape pomocou OpenGL:

2. etapa

  // pomocna konstanta
  float rozdiel_sipok = 12;
  
  // ********* YAW *********
  pushMatrix();

  translate(-700, 400);
  float angle = = radians(yaw - yawOffset);
  // sipka - smer dole => +180 smer hore
  rotateZ(angle + radians(180)); 
  line(0, -50, 0, 50);
  line(0, 50, rozdiel_sipok, 20);
  line(0, 50, -rozdiel_sipok, 20);

  popMatrix();
  
  // ********* PITCH *********
  pushMatrix();

  translate(-500, 400);
  rotateZ(radians(pitch));
  line(-50, 0, 50, 0);
  line(-50, 0, -50 + 20, rozdiel_sipok);
  line(-50, 0, -50 + 20, -rozdiel_sipok);
  
  popMatrix();
  
  // ********* ROLL *********
  pushMatrix();

  translate(-300, 400);
  rotateZ(radians(roll));
  line(-50, 0, 50, 0);
  
  popMatrix();

3. etapa

V tretej etape sme chceli dosiahnuť vykreslenie trajektórie podľa získaného Yaw (uhol zabočenia). S využitím polárnych súradníc a automatického pohybu vpred sme nakoniec dokázali vykresliť trajektóriu v rovine.

3. etapa
  angle = radians(yaw - yawOffset);
  // d - vzdialenosť, ktorú robot prejde
  double d = 0.9; 
  // deltaX, deltaZ - posun robota
  double deltaZ = cos(angle) * d;
  double deltaX = sin(angle) * d;
  // xx, yy = pozícia robota
  xx += deltaX;
  yy -= deltaZ;

Zdrojové kódy

projekt.pde

Video