PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro fährt im Kreis



schildix
27.11.2006, 21:35
Hallo,
mein Asuro dreht sich nur im Kreis, da das eine Rad langsamer dreht als das andere. An dem langsamen Rad habe ich bereits die Achse gefeilt und geölt, jedoch hat es wenig geholfen. Im Gegenteil: Durch das Feilen ist jetzt ein leichtes Eiern zu beobachten.
Was kann ich tun?
Johannes

damaltor
27.11.2006, 21:48
das ist das haupt problem des asuro: er kann nicht geradeausfahren. dieses problem musst du ausschliesslich durch gute programmierung mit den radodometriesensoren lösen... such mal im forum nach

geradeaus
haus vom nikolaus
rechteck
odometrie

dieses thema ist eines der meistbesprochenen in diesem forum...

schildix
27.11.2006, 21:53
Also zählen wie oft ein schwarz-weiss Wechsel stattfindet? Damit werde ich mich dann in den nächsten Tagen mal beschäftigen. Also Funktionen schreiben, z.B. gehe(winkel, strecke). Das wird ne Herausforderung.

odysee_2002
27.11.2006, 21:56
Hallo,

damit der Asuro sicher geradeaus fährt, braucht man eigentlich eine Drehzahlregelung. Zur Zeit wird der Motor nur blind angesteuert.
Da zwei Motoren nie baugleich sind, ergibt die gleiche PWM nie die gleiche Drehzahl.
Mit einer Drehzahlregelung könnte man dies sicherstellen.
Leider bin ich selbst nicht so weit, ich kann jeden Tag nur 1/2 Std. daran arbeiten. Bald mehr.

Gruß

damaltor
27.11.2006, 21:59
Als tip: Die funktionen (fahregeradeaus() und drehdich()) gibt es schon, sie heissen turn und go. sie sind nur in der erweiterten lib verfügbar.

wenn ihr ein wenig selbst darüber nachgedacht habt, dann schaut euch den code mal an und versucht, ihn zu verstehen... das könnte eine recht gute übung sein.

schildix
27.11.2006, 22:05
nene, das ist ja langweilig. Ich werd mir mal selbst drüber Gedanken machen. Immerhin will ich den Asuro in den nächsten Wochen mal im Informatikunterricht vorstellen.

damaltor
27.11.2006, 22:06
ja mach das, das hab ich auch gemacht. mein info professor ist davon ganz angetan...

meld dich wenn du ne idee hast zum zählen der übergänge.

dinoAG
07.12.2006, 14:40
ich überlege mir einen asuro zu kaufen und frage mich, wie ihr das mit den schwarz/weiss übergängen meint...

EDH
07.12.2006, 14:45
schau dir mal die bilder vom asuro auf der arexx seite an.
bei den zahnrädern vom getriebe sind solche schwarz/weis aufkleber.
diese übergängve kann mit dem odometrie sensoren messe.

dinoAG
07.12.2006, 14:48
ah dann kann der asuro als von einem festgeegten startpunkt starten, ne ganze zeitlang durch das Zimmer fahren und dann wieder da hinfahren, wo er war, oder?

bzw. wie genau ist das?

EDH
07.12.2006, 14:58
sehr ungenau. hauptäschliuches problem störlicht, wo die messung behindert.

dinoAG
07.12.2006, 15:00
ich brauche aber einen roboter, der weiss, wo der ort ist, von dem aus er gestartet ist...

ist das mit dem asuro überhaupt möglich
wenn ja wie?

EDH
07.12.2006, 15:05
man kann die odmetrioewerte durch umbaueten schon verbessern
auserdem bräuchte man für eine zuverlässige ortung noch nen kompassensor

aber das wurde alles schon desöfteren diskutiert.

damaltor
07.12.2006, 18:04
man könnte auch eine infrarot-bake aufstellen. eine bake ist ein licht, das immer wieder das gleiche lichtsignal aussendet. diese könnte der asuro evtl finden.

ansonsten wäre es theoretisch machbar, nur mithilfe der odo-sensoren zum startpunkt zurückzufahren, schliesslich müsste ja nur die gleiche strecke rückwärts gefahren werden, aber die sensoren sind wirklich extrem ungenau. schon kleine figuren zu fahren ist sehr schwierig. such mal nach haus vom nikolaus oder rechteck oder nach stift hier im forum. alles versuche, den asuro eine gezielte strecke fahren zu lassen.

dinoAG
14.12.2006, 14:12
hmm mach ich sofort danke

mal sehen, was die arschitekten mit dem Bau vom haus des nikolaus geleistet haben

schildix
16.12.2006, 23:34
Sooo! Er fährt geradeaus!

So hab ich's gemacht:
- Für ein Bruchteil einer Sekunde wird mit gleicher Geschwindigkeit links und rechts. Dann wird die durchschnittliche Lichtintensität ermittelt.
- Nun fährt er wieder mit der gleichen Geschwindigkeit, prüft ob der Wert über oder unter der mittleren Lichtintensität liegt und ermittelt so einen Schwarz-Weiß-Wechsel.
- Die Wechselrate zwischen links und rechts wird verglichen und dann der schnellere Motor etwas langsamer gemacht.

Ich muss sagen, es funktioniert sehr gut. Außerdem macht es ihm nichts aus, wenn er in einen helleren Raum fährt oder wenn ich das Licht ausschalte.

EDH
16.12.2006, 23:44
So hab ich's gemacht:
- Für ein Bruchteil einer Sekunde wird mit gleicher Geschwindigkeit links und rechts. Dann wird die durchschnittliche Lichtintensität ermittelt.
- Nun fährt er wieder mit der gleichen Geschwindigkeit, prüft ob der Wert über oder unter der mittleren Lichtintensität liegt und ermittelt so einen Schwarz-Weiß-Wechsel.
- Die Wechselrate zwischen links und rechts wird verglichen und dann der schnellere Motor etwas langsamer gemacht.

poste doch mal den passenden code

schildix
16.12.2006, 23:54
Ihr sollt doch selbst nachdenken! Naja, egal.

Hier ist er (nicht so toll programmiert; lieg dadran, dass seeeehr oft was geändert wurde, weil es nicht so richtig geklappt hat).


#include "asuro.h"

unsigned char speed, flagl=FALSE, flagr=FALSE;
unsigned int data[2];
unsigned int wegl, wegr, diff, schnittl, schnittr;
int speedLeft,speedRight;

int vorne_frei(void)
{
int temp1, temp2, temp3;
temp1 = PollSwitch(); Sleep(7);
temp2 = PollSwitch(); Sleep(7);
temp3 = PollSwitch(); Sleep(7);
if((temp1 * temp2 * temp3) == 0)
{
return 1;
}
else
{
return 0;
}
}

void start(void)
{
Init();

StatusLED(GREEN);
}

void setze_speed(int geschwindigkeit)
{
int i;
speedLeft = geschwindigkeit;
speedRight = geschwindigkeit;

MotorDir(BREAK,BREAK); Sleep(72);

if(geschwindigkeit > 0)
{
MotorDir(FWD,FWD);
}
else
{
geschwindigkeit *= -1;
MotorDir(RWD,RWD);
}
schnittl = 0;
schnittr = 0;

MotorSpeed(speedLeft,speedRight);

for(i = 1; i < 100; i++)
{
OdometrieData(data);
schnittl += data[0];
schnittr += data[1];
Sleep(72);
}
schnittl /= 100;
schnittr /= 100;
}

void geradeaus(void)
{
int logl, logr, log;
wegl=0; wegr=0;
logl = 0;
logr = 0;
log = 0;
while(log < 100)
{
OdometrieData(data);
logl += data[0];
logr += data[1];
wegl=0; wegr=0;
if ((data[0] < schnittl) && (flagl == TRUE)) {flagl = FALSE; wegl++; SerWrite("l",1);}
else if ((data[0] > schnittl) && (flagl == FALSE)) {flagl = TRUE; wegl++; SerWrite("L",1);}
if ((data[1] < schnittr) && (flagr == TRUE)) {flagr = FALSE; wegr++; SerWrite("r",1);}
else if ((data[1] > schnittr) && (flagr == FALSE)) {flagr = TRUE; wegr++; SerWrite("R",1);}
diff=wegr-wegl;
if (diff>0) speedRight--; // fahre geradeaus
else if (diff<0) speedLeft--;
//else {speedRight=speed; speedLeft=speed;}
if (speedRight<0) {speedRight=0;}
if (speedLeft<0) {speedLeft=0;}
MotorSpeed(speedLeft,speedRight);
Sleep(7);
log++;
}
SerWrite("|",1);
schnittl = logl / 100;
schnittr = logr / 100;
}

int main(void)
{ int x;
start();
while(1)
{
setze_speed(200);
while(vorne_frei() == 1)
{
geradeaus(); StatusLED(GREEN);
}
MotorDir(RWD,RWD);
MotorSpeed(200,100);
for(x = 1; x <= 1000; x++)
{
Sleep(72);
}
}
return 0;
}


Gruß,
Yoshi

damaltor
17.12.2006, 15:42
sieht gut aus... herzlichen glückwunsch =)

du kannst dir ja mal aus der asuro.c die go() funktion ansehen, ob du dieses prinzip auch verstehst.

EDH
17.12.2006, 15:53
Ihr sollt doch selbst nachdenken!

bei roboterwettbewerben werben hernach auch immer die codes ausgetauscht.

inka
14.05.2007, 13:15
hi damaltor,


man könnte auch eine infrarot-bake aufstellen. eine bake ist ein licht, das immer wieder das gleiche lichtsignal aussendet. diese könnte der asuro evtl finden.
könnte man den IR-empfänger am asuro zum empfang dieser bake verwenden? Wie weit reicht der senderadius der verwendeten IR-diode? Im datenblatt fand ich die angabe so nicht...

damaltor
14.05.2007, 23:24
der empfang wäre möglich, aber der sensor des asuro ist nicht in eine bestimmte richtung azsgerichtet. besser wären 4 sensoren in 4 richtungen, dann könnte man auswerten in welche richtung die meisten signale empfangen werden.

der senderadius kommt auf die verwendete diode an, man könnte auch den vorwiderstand ändern und dann mehrere leds an die bake anbringen. dadurch würde die lichtausbeute gesteigert werden.

radbruch
15.05.2007, 06:38
Tja, damals war ich für manche noch ein Held:

https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=27013

Die Richtwirkung dieses Umbaus dürfte ausreichend sein.

mic