Difference between revisions of "Trajectory from gyro/accellerometer/compas"
From RoboWiki
(→O súčiastke:) |
m |
||
(22 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|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. | |
− | |||
− | |||
− | |||
+ | Na doske 9DOF IMU sa nachádzajú nasledujúce komponenty: | ||
− | + | * [http://en.wikipedia.org/wiki/Accelerometer akcelerometer] | |
+ | * [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> | ||
+ | |||
+ | == Zdrojové kódy == | ||
+ | |||
+ | [[Media:projekt.pde|projekt.pde]] | ||
+ | |||
+ | == Video == | ||
+ | <youtube>3gMPFBBc14s</youtube> |
Latest revision as of 22:09, 16 September 2013
Zadanie
Trajectory from gyro/accellerometer/compas. Requirement: must use this part: 9DOF IMU, use any real robot.
O súčiastke
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
Nami získané údaje vyzerali takto:
2. etapa
Následne sme vykreslili dáta získané v prvej etape pomocou OpenGL:
// 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.
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
Video