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
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?
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.