PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : odometrie



Toschtosch
01.11.2006, 15:41
hab mal ne frage,
kann man mit der odometrie die gezählten "farbwechsel" in einem array speichern um später nochmal zu verwenden?? oder kann man mit d er odometrie nur angeben das er solange fahren soll bis er 200 farbwechsel gezählt hat?!

bzw kann mal wer so ne art beispiel zeigen wir das mit dem array geht?

mfg Toschtosch

ps: hab nix im forum via such funktion über odometrie gefunden :D

EDH
01.11.2006, 18:13
Hi Toschtosch
willst du eigentlich die zeit zwischen den farbenwechseln speichern, oder nur deren anzahl.
Für zweiteres bräuchte man nur einen integer.

Mit der odometrie kann man allgemein die helligkeit der reflexion des lichts messen.
=> man kann messen ob eine schwarze oder weiße scheibe gerade davor ist
=> man kann die zeit ziwschen den farbwechseln berechnen
=> man kann die drehzahl des rads bestimmen
=> man kann die geschwindikeit von asuro berechnen (dazu gibts hier glaubich irgendwo einen thread)
natürlich kann man mit der odometri noch viel mehr machen. der fantasie sind keine grenzen gesetzt.

mfg EDH

EDH
01.11.2006, 19:19
Für den Fall das du die Zeit zwischen den frabwechseln speichern willst, habe ich hier schnell ein kleines programm geschrieben. (jaja, ich weiß das man da noch vieles verbessern kann und das programmm ziemlich umstaändlich ist, aber das grundsätzliche prinzip sollte damit eigentlich klar werden).




/************************************************** *************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* any later version. *
************************************************** *************************/
#include "asuro.h"
//misst Zeit in Millisekunden
int messe_zeit(int seite) { //0 = Links 1 = Rechts
int odo_data[2];
int zeit;
zeit = 0;
if (seite==0) {
//Messung fr Links
OdometrieData(odo_data);
//Zeit messen bis andere farbe
if (odo_data[0]>512) {
while(odo_data[0]>512) {
OdometrieData(odo_data);
Sleep(72);
zeit++;
}
}
else {
while(odo_data[0]<512) {
OdometrieData(odo_data);
Sleep(72);
zeit++;
}
}
}
else {
//Messung fr Rechts
OdometrieData(odo_data);
//Zeit messen bis andere farbe
if (odo_data[0]>512) {
while(odo_data[0]>512) {
OdometrieData(odo_data);
Sleep(72);
zeit++;
}
}
else {
while(odo_data[0]<512) {
OdometrieData(odo_data);
Sleep(72);
zeit++;
}
}
}
return zeit;
}
int main(void)
{
Init();
int data_left[101];
int data_right[101];
int i;
int element;
int zeit_links;
int zeit_rechts;
//Alle Elemente im Arrey auf 0 setzen
element = 1;
for(i=0;i<100;i++) {
data_left[element]=0;
data_right[element]=0;
element++;
}
MotorDir(FWD,FWD);
MotorSpeed(150,150);
//Messen und Werte schreiben
element = 1;
for(i=0;i<100;i++) {
zeit_links = messe_zeit(0);
zeit_rechts = messe_zeit(1);
data_left[element] = zeit_links;
data_right[element] = zeit_rechts;
element++;
}
MotorSpeed(0,0);
while(1);
return 0;
}


nochmal mfg EDH

ach ja noch was...
ich hab heut einbisschen an der ultraschall erweiterung rumgebastelt und seitdem ähhh... spinnt mein asuro ein bisschen. (Ich hoffe, es ist kein alzuschlimmer fehler)
was ich damit sagen will:
Ich hab das programmnoch nicht ind er Praxis getestet(mangels testgerät)

Toschtosch
01.11.2006, 20:26
also ich wollte die farbenwechsel zählen und in nem array speichern z.b. damit ich das später noch verrechnen kann, denn ich will via radius einen kreis fahren und wenn ich die odometrie daten auslesen kann, kann ich das rechte rad ja über eine hergeleitete formel erhöhen, damit er auch nen kreis fährt :D
mfg toschtosch

ps: ich will den asuro erstmal eine kleine zeit fahren lassen, um erstmal eine zahl zu haben die ich dann verarbeiten kann

gast1234
01.11.2006, 20:37
Du willst also aus empirischen Daten eine Formel gewinnen.
Warum setzt Du Dich nicht gleich mit Stift, Papier und Mathematik hin?
Bis Du Dein Programm zum Speichern fertig geschrieben hast, bist Du vielleicht schon auf die mathematische Lösung gekommen, mit der Du Dich ja ohnehin beschäftigen mußt.

Toschtosch
01.11.2006, 20:41
ich hab ja schon die lösung^^ ich muss nur noch irgendwie odometrie daten auslesen und da hakt es, weil ich nich weiß wie ich das angehen soll


ps:

so grob hingeschrieben:

kreis nach links:
linkes rad = odometrie auslese
rechtes rad = odometrie auslese*(1+(11.5/radius)) // radius wird natürlich in der rechnung angegeben... 11.5 ist die spannweite von rad zu rad

gast1234
01.11.2006, 20:59
Mach es doch einfach mit der Funktion
void OdometrieData(unsigned int *data) aus der asuro.h
bzw. wandele sie ab und passe sie Deinen Bedürfnissen an.

Wie Du Daten in ein Array schreibst, siehst Du im Kapitel 9.7.1.

Toschtosch
01.11.2006, 21:01
oki doki

mfg

Toschtosch
03.11.2006, 10:31
ich habe mal eine frage, wie kann ich meinem asuro sagen, das er nur 2sekunden lang die odometrie daten ausmessen soll, sodass ich das dann auswerten kann?

EDH
03.11.2006, 20:52
die frage ist, würde es dir ausreichen, wenn er jede millisekunde den wert ausliest
(für computer ist eine millisekunde ziemlich lang). Da kämen dann zweitausend werte zusammen.



/************************************************** *************************************************/
//ACHTUNG UNGETESTETE INSTABILE VERSION (ICH HOFFE DER CODE FUNKTIONIERT ÜBERHAUPT KEINE GARANTIE)//
/************************************************** ************************************************/



#include "asuro.h"

int main(void) {
int data_links[2000];
int data_rechts[2000];
int temp_data[2];
int element;
int i;

element = 0;
//2 Sekunden lang messen und in arrey schreiben
for(i=0;i<2000;i++) {
OdometrieData(temp_data);
data_links[element] = temp_data[0];
data_rechts[element] = temp_data[1];
element++;
Sleep(72);
}
return 0;
}


wie gesagt ich hoffe, das das hier funktioniert keine garantie ;)

mfg EDH