Archiv verlassen und diese Seite im Standarddesign anzeigen : Geradeausfahrt programmieren
Hi,
mein Asuro soll heut lernen wie er Geradeaus fährt. Dafür hab ich erstmal gestestet, wie schnell welches Rad sein muss.(Durch unterschiedliche Reibung)
So jetzt hab ich ein kleines Programm geschrieben:
#include "asuro.h"
int main(void)
{
int l=0;
int r=0;
int sleft=0;
int sright=0;
unsigned int data[2];
Init();
MotorDir(FWD,FWD);
MotorSpeed(150,165);
OdometrieData(data);
while(1)
{
if (sleft!=1 && data[0]<700 && l<10)
{
sleft=1;
l++;
}
if (sleft==1 && data[0]>700 && l<10)
{
sleft=2;
l++;
}
if (sright!=1 && data[1]<700 && r<10)
{
sright=1;
r++;
}
if (sright==1 && data[1]>700 && r<10)
{
sright=2;
r++;
}
else if (r>l)
{
MotorSpeed(190,165);
r=0;
l=0;
}
else if (r<l)
{
MotorSpeed(150,190);
r=0;
l=0;
}
}
return 0;
}
Das Programm soll so funktionieren:
Immer wenn ein hell/dunkelwechsel ist, zählt das Programm mit. Wenn auf einer Seite 10 Hell/Dunkelübergänge gezählt wurden, soll Asuro nachschauen auf welcher Seite mehr Übergänge da waren--> auf der anderen Seite soll er mehr Gas geben.
Irgendwie hab ich das falsch programmiert, kann mir wer da Tips zur Verbesserung geben?
Mfg Moebius
Siehe Band 2 des Buches "Mehr Spaß mit ASURO" und hier:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=30706&highlight=geradeausfahren
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=19948&highlight=geradeausfahren
danke für die links.
ich hab mein programm jetzt verbessert, asuro fährt jetzt schon mehr geradeaus als im kreis ^^.
hier nochma der verbesserte code:
#include "asuro.h"
int main(void)
{
int l=0;
int r=0;
int cnt;
int sleft=0;
int sright=0;
unsigned int data[2];
Init();
MotorDir(FWD,FWD);
MotorSpeed(150,170);
OdometrieData(data);
while(1)
{
r=0;
l=0;
while(l<5)
{
if (sleft!=1 && data[0]<700 )
{
sleft=1;
l++;
}
else if (sleft==1 && data[0]>700 )
{
sleft=2;
l++;
}
if (sright!=1 && data[1]<700 )
{
sright=1;
r++;
}
else if (sright==1 && data[1]>700 )
{
sright=2;
r++;
}
}
if (r>l)
{
MotorSpeed(200,165);
break;
}
if (r<l)
{
MotorSpeed(150,210);
break;
}
}
return 0;
}
So als nächstes werd ich versuchen, exakt die hell/dunkelübergänge zu erfassen, und solang auf der anderen Seite Gas geben, bis wieder die gleiche Anzahl verstrichen sind. Mal schauen ob das klappt [-(
Hier ist noch ein Programm für diese Aufgabe:
http://www.apeshow.de/2007/01/22/odometrie-asuro-fahrt-geradeaus/
radbruch
11.06.2007, 23:13
Also mit echtem Programmieren hat das doch nun nichts mehr zu tun. Ein paar Zeilen Code und Zugriff auf die geballte-rn-forumpower-lib machen den asuro für jeden zahm und gefügsam.
Auf der einen Seite soll derjenige seinen asuro weiterverkaufen der nicht jedes ATMegabit mit Vornamen kennt. Auf der anderen Seite wird bei Programmfragen nicht der Code analysiert sondern heftig auf fertige (Kopier-)Lösungen oder das asurobuch verwiesen. Nicht dass ich die Leistung nicht anerkenne, die zusammengetragenen asuro-Infos sind schon klasse. Aber immer wieder nur fertigen Code, Links und Buchhinweise zu posten sieht zwar eifrig aus, hilft aber eben nicht jedem.
sorry fürs offtopic, das wollte ich eben mal loswerden.
@Moebius:
Mein asuro kommt kaum über 700 als Odowert. Hast du dieOdosensoren vor Fremdlicht abgeschirmt? Und hast du das achsiale Spiel des Codescheibenritzels beseitigt?
mic
also ich hab aus pappe so ein kleines häuschen um die jeweils 2 dioden gebastelt.
Der Wert 700 passt ganz gut, hab mir vorher ein Testprogramm dafür geschrieben.
Also die Zahnräder haben schon noch ganzschön viel Spiel, das könnt ich noch verbessern [-(
Ein paar Zeilen Code und Zugriff auf die geballte-rn-forumpower-lib machen den asuro für jeden zahm und gefügsam. Schön wäre es. ;-)
danke für die links.Gerne geschehen.
also ich hab aus pappe so ein kleines häuschen um die jeweils 2 dioden gebastelt. Das ist jeweils eine Kombination aus IR-Diode und Fototransistor. Leider funktioniert das nicht im Sonnenlicht.
Also die Zahnräder haben schon noch ganz schön viel Spiel, das könnt ich noch verbessernEinfach etwas Lötzinn außen drauf, dann wird der Abstand enger gehalten. Das ist wirklich wichtig.
Auf der einen Seite soll derjenige seinen asuro weiterverkaufen der nicht jedes ATMegabit mit Vornamen kennt. Er wollte ihn vom Tisch stürzen, wenn er es nicht selbst merkt! :) Außerdem könnte ich noch einen zusammen gebauten ASURO brauchen.
... wird bei Programmfragen nicht der Code analysiert sondern heftig auf fertige (Kopier-)Lösungen oder das asurobuch verwiesen.Da gibt es verschiedene Sichtweisen. Ideal ist die Kombination aus beidem. Ich denke, dass man hier im Forum jeweils möglichst viel Code zu einem Thema finden sollte. Da gehören bekannte Bücher und das Internet dazu.
radbruch
12.06.2007, 00:04
Kleine Häuschen sind Prima. O:)
Gegen das axiale Spiel gibt es ein paar Lösungen. Am sinnvollsten sind wohl Sicherungsringe auf den Wellenenden (https://www.roboternetz.de/phpBB2/viewtopic.php?t=26874) oder U-Scheibe über dem kleinen Ritzel. (https://www.roboternetz.de/phpBB2/viewtopic.php?t=26874)
Noch ein Link zu Odo- und BackLEDs zusammen:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=29500
Gruß
mic
damaltor
13.06.2007, 15:54
... wird bei Programmfragen nicht der Code analysiert sondern heftig auf fertige (Kopier-)Lösungen oder das asurobuch verwiesen.Da gibt es verschiedene Sichtweisen. Ideal ist die Kombination aus beidem. Ich denke, dass man hier im Forum jeweils möglichst viel Code zu einem Thema finden sollte. Da gehören bekannte Bücher und das Internet dazu.
Ich denke in allererster linie sollte der code analysiert werden (im obigen beispiel wird glaube ich die funktion OdometrieData() nur eimal und zwar vor der while-schleife aufgerufen, die werte ändern sich also nicht mehr und es wird immer das gleiche gezählt). auf die fertigen lösungen kann man zwar verweisen, aber besser (und für den thread-eröffner wohl auch befriedigender) wird es sein, den eigenen code funktionieren zu sehen, nachdem alle fehler gefunden wurden...
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.