Ich hab Probleme die Anregung zur Odometrie da ich nicht weiß wie ich eine Seite serperat ausmachen.
Mfg
Pascal05551
Druckbare Version
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?
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
Hallo
Oki, damit kann man was anfangen. Hier das orginale Programm:
(Aus der Programmieranleitung Seite 30: http://download.nicai-systems.com/ni...e_20120424.pdf)Code:#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;
}
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:
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.Zitat:
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 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
Hab es ausprobiert funktioniert aber irgenwie nicht hier ist der Code den ich geschrieben hab.
Code:#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;
}
Hallo
Mit meiner bee funktioniert es wie erwartet:
und die Hexdatei dazu:Code:// 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;
}
(Markieren, kopieren und als test.hex speichern)Code::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
"... funktioniert aber irgendwie nicht ..." kann ja auch alles bedeuten...
Gruß
mic
@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?
Bei Notepad2: Speichern vergessen vor dem Kompilieren?Zitat:
In einen neuen Projekt funtkioniert dein Code Perfekt.Was woll bei anderen falsch war?