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

From RoboWiki
Jump to: navigation, search
(3. etapa)
(3. etapa)
Line 88: Line 88:
 
</pre>
 
</pre>
  
 +
== Video ==
 
<youtube>3gMPFBBc14s</youtube>
 
<youtube>3gMPFBBc14s</youtube>

Revision as of 15:12, 26 June 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;

Video