PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nibobee Odometrie Aufgabe



Pascal05551
12.11.2012, 13:55
Ich hab Probleme die Anregung zur Odometrie da ich nicht weiß wie ich eine Seite serperat ausmachen.

Mfg
Pascal05551

Manf
12.11.2012, 20:12
Ich fürchte ich habe die Frage nicht ganz verstanden.
Kannst Du es noch anders ausdrücken, in deutsch oder wenn nötig in englisch?

Pascal05551
13.11.2012, 08:03
Entschuldigung für das schnell geschriebene unverständlichen Text,
also ich meinte das es in der Programmier Anleitung des Nibobee bei "Testen der Odometriesensoren" eine Anregung gibt in dem man das fertige Programm so ändern muss das man mit dem linken fühler die linken Odometriezähler reset und mit dem rechten Fühler den rechten Odometriezähler reset.

MfG
Pascal05551

radbruch
13.11.2012, 10:25
Hallo

Oki, damit kann man was anfangen. Hier das orginale Programm:

#include <nibobee/iodefs.h>
#include <nibobee/led.h>
#include <nibobee/sens.h>
#include <nibobee/odometry.h>
int main() {
led_init();
odometry_init();
sens_init();
while(1==1) {
enable_interrupts();
if (sens_getLeft() || sens_getRight()) {
odometry_reset();
}
led_set(LED_L_YE, odometry_getLeft(0)>10);
led_set(LED_L_RD, odometry_getLeft(0)>20);
led_set(LED_R_RD, odometry_getRight(0)>20);
led_set(LED_R_YE, odometry_getRight(0)>10);
}
return 0;
}(Aus der Programmieranleitung Seite 30: http://download.nicai-systems.com/nibo/Tutorial_NIBObee_20120424.pdf)

In der Doku zur Library (http://doku.nibo-roboter.de/nibobeelib/) findet man in der Beschreibung zur Odometrie (http://doku.nibo-roboter.de/nibobeelib/odometry_8h.html) folgends:

int16_t odometry_getLeft ( uint8_t reset )

Liefert den Wert des linken Zählers zurück. Je nach Motorrichtung wird der Zähler hoch oder runter gezählt. Wenn

Parameter:
reset = 0 ist wird der Zählerstand beibehalten, ansonsten auf 0 zurückgesetzt.
Das bedeutet, wenn man den Wert mit Parameter 0 ausliest wird der Zählerstand nicht gelöscht, alle anderen Werte führen zur Löschung beim Auslesen.

Das beideseitige Zurücksetzen der Zählerstände geschied hier mit odometry_reset():

if (sens_getLeft() || sens_getRight()) {
odometry_reset();
}

Für einseitiges Zurücksetzen würde ich deshalb etwa folgenden Code verwenden:

if (sens_getLeft()) odometry_getLeft(1); // 1 steht für Zählerstand Löschen beim Auslesen

Gruß

mic

Pascal05551
13.11.2012, 10:59
Hab es ausprobiert funktioniert aber irgenwie nicht hier ist der Code den ich geschrieben hab.



#include <nibobee/iodefs.h>
#include <nibobee/led.h>
#include <nibobee/sens.h>
#include <nibobee/odometry.h>

int main() {
led_init();
odometry_init();
sens_init();
while(1==1) {
enable_interrupts();
if (sens_getLeft()) odometry_getLeft(1);
if (sens_getRight()) odometry_getRight(1);


led_set(LED_L_YE, odometry_getLeft(0)>10);
led_set(LED_L_RD, odometry_getLeft(0)>20);
led_set(LED_R_YE, odometry_getRight(0)>10);
led_set(LED_R_RD, odometry_getRight(0)>20);

}
return 0;
}

radbruch
13.11.2012, 18:46
Hallo

Mit meiner bee funktioniert es wie erwartet:

// Test mic 13.11.2012

// https://www.roboternetz.de/community/threads/59850-Nibobee-Odometrie-Aufgabe?p=563893&viewfull=1#post563893

#include <nibobee/iodefs.h>
#include <nibobee/led.h>
#include <nibobee/sens.h>
#include <nibobee/odometry.h>

int main(void)
{
led_init();
odometry_init();
sens_init();
enable_interrupts();
while(1==1)
{
if (sens_getLeft()) odometry_getLeft(1);
if (sens_getRight()) odometry_getRight(1);

led_set(LED_L_YE, odometry_getLeft(0)>10);
led_set(LED_L_RD, odometry_getLeft(0)>20);
led_set(LED_R_YE, odometry_getRight(0)>10);
led_set(LED_R_RD, odometry_getRight(0)>20);
}
return 0;
}

und die Hexdatei dazu:

:100000000C942A000C94D7000C9400010C943C0032
:100010000C943C000C943C000C943C000C943C0070
:100020000C943C000C943C000C943C000C943C0060
:100030000C943C000C943C000C943C000C943C0050
:100040000C943C000C943C000C943C000C943C0040
:100050000C943C0011241FBECFE5D4E0DEBFCDBF21
:1000600010E0A0E6B0E001C01D92A636B107E1F7AE
:100070000E943E000C9443010C9400000E947C00FE
:100080000E94A4000E94290178940E942D018823D7
:1000900019F081E00E94B9000E943801882319F00C
:1000A00081E00E94C80080E00E94B90060E00B97E8
:1000B0000CF061E080E00E94800080E00E94B900C6
:1000C00060E045970CF061E081E00E94800080E0F4
:1000D0000E94C80060E00B970CF061E083E00E9492
:1000E000800080E00E94C80060E045970CF061E06D
:1000F00082E00E948000C9CF87B38F6087BB0895DC
:10010000662389F0813049F0813028F0823039F05F
:100110008330C9F406C0C09A0895C19A0895C29A5E
:100120000895C39A0895813049F0813028F08230D3
:1001300039F0833041F406C0C0980895C1980895FD
:10014000C2980895C398089585B78F6085BF8BB70F
:10015000806C8BBF969A979808958FB7F8941092F9
:1001600062001092610010926400109263008FBFD1
:1001700008959FB7F8942091610030916200882320
:1001800021F010926200109261009FBFC901089592
:100190009FB7F8942091630030916400882321F088
:1001A00010926400109263009FBFC90108951F92CE
:1001B0000F920FB60F9211248F939F93969B0BC0B3
:1001C000809160008F5F80936000809161009091CA
:1001D000620001960AC080916000815080936000A7
:1001E00080916100909162000197909362008093EA
:1001F00061009F918F910F900FBE0F901F901895E7
:100200001F920F920FB60F9211248F939F93979B7B
:100210000BC08091650081508093650080916300E0
:100220009091640001970AC0809165008F5F809370
:100230006500809163009091640001969093640042
:10024000809363009F918F910F900FBE0F901F902E
:10025000189585B3806F85BB089593B390739031E3
:1002600011F48FEF089580E0903209F481E0089551
:1002700093B3907C903411F48FEF089580E0903820
:0A02800009F481E00895F894FFCF1F
:00000001FF
(Markieren, kopieren und als test.hex speichern)


"... funktioniert aber irgendwie nicht ..." kann ja auch alles bedeuten...

Gruß

mic

Pascal05551
14.11.2012, 10:10
@radbruch
Also dein hex Code funktioniert wie er sollte wenn ich jedoch den Code mit den Veränderungen die du genannt hast benutzte dann passiert das gleiche wie beim Standert Code aus dem Tutorial.

Edit:In einen neuen Projekt funtkioniert dein Code Perfekt.Was woll bei anderen falsch war?

radbruch
14.11.2012, 12:40
In einen neuen Projekt funtkioniert dein Code Perfekt.Was woll bei anderen falsch war?Bei Notepad2: Speichern vergessen vor dem Kompilieren?