Archiv verlassen und diese Seite im Standarddesign anzeigen : RobotChallenge-Linienfolgeprogramm von "myIrAsuro"
HermannSW
27.03.2007, 10:57
Hallo,
anbei das Programm, mit welchem myIrAsuro im Qualifying der RobotChallenge letztes Wochenende in Wien die 354cm lange Strecke in 10.1s (mit 35.05cm/s) schaffte (12. Platz, der erste Robby schaffte 60.00cm/s).
Mit diesem Programm schaffte Robertor, als er noch ein Standard-Asuro war (mit roter LED, bei völliger Dunkelheit im Raum) 9.22s auf 357cm der Strecke Qualifying 2006 (http://www.stamm-wilbrandt.de/RobotChallenge/#2006q), also 38.72cm/s (siehe folgenden Beitrag (https://www.roboternetz.de/phpBB2/viewtopic.php?p=261329#261329)), bei einer Maximalgeschwindigkeit von 45cm/s (geradeaus).
Das Programm ist recht einfach, ohne PID-Regler oder ähnliches. Bis zur Standard-Asuro-Geschwindigkeit von 45cm/s war dies auch ausreichend; jetzt mit Endgeschwindigkeiten von 1.1m/s (myIrAsuro) und 1.8m/s (Robertor, siehe Beitrag Asuro "upside down" (https://www.roboternetz.de/phpBB2/viewtopic.php?t=29115)) werde ich mich wohl doch mit dem Thema (PID-)Regelung auseinandersetzen müssen ... :-)
Das ganze Programm ist als state-machine realisiert -- der Asuro weiß zu jedem Zeitpunkt, ob er auf der Linie ist (ON_LINE), links daneben (OFF_LEFT) oder rechts daneben (OFF_RIGHT).
Auf der Linie fährt er einfach voll geradeaus, wenn er links daneben ist, fährt er einen Kreis nach rechts, und wenn er rechts daneben ist, fährt er einen Kreis nach links -- das war's!
Dieses Programm hat die Eigenschaft, daß "normalerweise" der Asuro beim Verlassen am Ende der Linie er diese wieder mittels eines Kreises nach rechts oder links sucht, und dann dieselbe Strecke wieder zurückfährt ...
//
// Program used by "myIrAsuro" in qualifying for competition
// "Parallel Slalom" of RobotChallenge 2007 in Vienna (24th march):
// http://www.robotchallenge.at
//
// Time 10.1s for 354cm, that is speed 35.05cm/s (best was 60.00 cm/s).
//
// myIrAsuro has reduction of 1:12.5 (Asuro standard is 1:25), see:
// https://www.roboternetz.de/phpBB2/viewtopic.php?t=28876
//
// The entries 0xFF for both SPEED values below will work on
// a standard Asuro with speed < 0.5m/s.
//
// The value for THRESHOLD must be changed if no IR-FrontLED
// with white shield is used, see:
// https://www.roboternetz.de/phpBB2/viewtopic.php?t=29109
//
//
// Robot will have to be placed on the line for starting!
//
// After starting the StatusLED of Asuro will blink [ready].
// After (any) switch is pressed both BackLED's turn on [steady].
// Releasing the switch will start the Robot [go].
//
#include <asuro.h>
#define OFF_LEFT -1
#define ON_LINE 0
#define OFF_RIGHT +1
#define SPEED 0xdF // 0xFF
#define SPEED1 0xbF // 0xFF
#define SPEED2 0x00
#define THRESHOLD 1100
void RaceStart(void); // blink until any switch is pressed,
// then wait until switch is released
int main(void)
{
unsigned int sum,data[2];
int position = ON_LINE;
Init();
RaceStart();
FrontLED(ON);
MotorDir(FWD,FWD);
MotorSpeed(SPEED,SPEED);
while (1) // state machine: position on/off the line
{
LineData(data);
sum = data[LEFT] + data[RIGHT];
if (sum>=THRESHOLD) // not on the line
{
if (position==ON_LINE) // switch state if previously on the line
{
position = (data[LEFT]<data[RIGHT]) ? OFF_RIGHT : OFF_LEFT;
BackLED( (position==OFF_LEFT)?ON:OFF, (position==OFF_RIGHT)?ON:OFF );
}
}
else // on the line
{
if (position!=ON_LINE) // switch state if previously not on the line
{
position = ON_LINE;
BackLED(OFF,OFF);
}
}
if (position==ON_LINE) { MotorSpeed(SPEED,SPEED); } // full FWD
else if (position==OFF_RIGHT) { MotorSpeed(SPEED2,SPEED1); } // turn left
else if (position==OFF_LEFT) { MotorSpeed(SPEED1,SPEED2); } // turn right
}
while (1); // code unreachable
return 0;
}
void RaceStart(void) // blink until any switch is pressed,
{ // then wait until switch is released
uint8_t t1, t2;
unsigned int col=OFF;
while (1) // blinking StatusLED until any switch is pressed
{
t1 = PollSwitch();
t2 = PollSwitch();
if (t1==t2)
{
if (t1)
{
break;
}
else
{
col ^= GREEN;
StatusLED(col);
}
}
Msleep(50);
}
StatusLED(OFF); // turn off StatusLED and ...
BackLED(ON,ON); // ... turn on both BackLED's
while (1) // wait until switch is released
{
t1 = PollSwitch();
t2 = PollSwitch();
if (t1==t2)
{
if (!t1)
{
break;
}
}
Msleep(50);
}
BackLED(OFF,OFF); // turn off BackLED's indication start of race
}
Vielleicht schaut Ihr ja mal, ob das Programm bei Euch auch funktioniert (Anpassen von THRESHOLD nicht vergessen), viel Spaß!
damaltor
27.03.2007, 15:12
hmm, als state-machine ist eigentlich ne schöne idee. besser als immer nur zickzack zu fahren bis die linie "gesehen" wird =) das war mein letzter versuch vor dem umbau. ich seh schon, ich muss mir ne erweiterungsplatine mit loniensensor bauen... =)
HermannSW
27.03.2007, 15:31
Hallo,
... ich seh schon, ich muss mir ne erweiterungsplatine mit loniensensor bauen... =)schau doch mal die vorletze Bilderreihe im folgenden Beitrag (https://www.roboternetz.de/phpBB2/viewtopic.php?t=29115) an, da ist genau so eine Erweiterungsplatine dargestellt.
Diese könntest Du nutzen, wenn Du Deinen Asuro auch umdrehst [daß das von der Motorhöhe her paßt, kannst Du den Bildern in folgendem Beitrag (https://www.roboternetz.de/phpBB2/viewtopic.php?p=265667#265667) entnehmen (dort ist allerdings alles falschherum), allerdings wäre die Platine bei den 38er-Rädern dann vorne höher als hinten] -- die (einfachen) notwendigen softwareseitigen Maßnahmen sind in dem Beitrag dargestellt ...
damaltor
27.03.2007, 20:50
hmm... ich glaub ich hab nicht den elan das alles umzubauen =) aber ich hab mir shon was überlegt, wenn ich mal wieder etwas mehr zeit hab für den kleinen dann werd ich mal was basteln.
hi hermann,
ich habe noch nicht so ganz genau verstanden wie der wert von 11oo zustande kam.
Ist es die summe der werte der linienfolgesensoren (die höchsten werte) oder ist das was anderes?
Ich verwende eine "normale" rote LED, da ist der asuro nur geradeaus gefahren. Beim einsetzen von einer IR diode )ich habe mir steckbare module gemacht) drehte er sich nur im kreis.
Als ich den wert auf 400 gesetzt habe (bei IR) fuhr er auf der linie, allerdings auf einer breiteren (ca. 1,5cm breit) recht flott herum, auf der dünnen linie von der testarena fährt er mit dem gleichen wetr und IR nur sinnlos in der gegend herum :-(
gruß georg
damaltor
04.04.2007, 18:13
ich denke mal der wert muss je nach asuro und linie und diode angepasst werden... muss man halt etwas austesten.
naja, was ich meine ist ob es sowas wie "deutungen" der veränderung und den auswirkungen dieser gibt, z.b. von 200 rauf= schmalere linie, IR-werte irgendwo bei ...?, der schwellenwert bei 1000 und darunter= dickere linie, schlechter diode o.ä...
also mehr oder weniger ein paar erfahrungswerte bei änderungen des wertes. So langsam habe ich nämlich bedenken wegen der anzahl der flashvorgänge, die der prozessor mitmacht :-(
gruß georg
Also was mir dazu einfällt:
Die Taster haben doch sogesehen keine Funktion.
Du kannst halt je zwei Taster verwenden um die Werte zu modifizieren.
zB Taster1 schwellenwert um 50 erhöhen, taster2: schwellenwert um 50 verringern usw.
nach jeder Änderung am besten noch über IR die Daten zurück an den PC schicken. So kannst du rumexperementieren ohne zu flashen. Sobald du dann die besten Werte hast, kannst draus ein festes Programm bauen.
HermannSW
04.04.2007, 21:27
Hallo Georg,
hi hermann,
ich habe noch nicht so ganz genau verstanden wie der wert von 11oo zustande kam.
Ist es die summe der werte der linienfolgesensoren (die höchsten werte) oder ist das was anderes?es ist der Schwellwert zur Unterscheidung, ob der Asuro noch auf den Linie (mehr oder weniger) drauf ist (ON_LINE, wenn sum<THRESHOLD), oder nicht mehr auf der Linie ist (OFF_LEFT oder OFF_RIGHT, wenn sum>=THRESHHOLD), wobei sum die Summe der Werte des linken und des rechten Fototransistors ist -- siehe auch folgenden Code-Ausschnitt:
...
while (1) // state machine: position on/off the line
{
LineData(data);
sum = data[LEFT] + data[RIGHT];
if (sum>=THRESHOLD) // not on the line
{
...
}
else // on the line
{
...
}
...
}
...
Ich verwende eine "normale" rote LED, da ist der asuro nur geradeaus gefahren. Beim einsetzen von einer IR diode )ich habe mir steckbare module gemacht) drehte er sich nur im kreis.
Als ich den wert auf 400 gesetzt habe (bei IR) fuhr er auf der linie, allerdings auf einer breiteren (ca. 1,5cm breit) recht flott herum, auf der dünnen linie von der testarena fährt er mit dem gleichen wetr und IR nur sinnlos in der gegend herum :-(Schön, daß Du "einfach mal probiert hast, die richtigen Werte zu finden", und natürlich ist es auch richtig hier zu fragen [besonders freut micht die Formulierung fuhr er auf der linie, allerdings auf einer breiteren (ca. 1,5cm breit) recht flott herum :)].
In folgendem Beitrag (https://www.roboternetz.de/phpBB2/viewtopic.php?p=269148#269148) im Thread Vollausschlag für die Fotosensoren kannst Du sehen, daß die Summenmesswerte von myIrAsuro zwischen 500 (auf der Linie) und 1950 (auf weißem Untergrund) liegen, da war 1100 eine pragmatische Wahl des Schwellwertes.
Man kann den Schwellwert aber auch einfach experimentell Bestimmen (z.B. für die beiden Setups von Dir mit 1,5cm breiten und mit schmalen Linien)! Flashe dazu einfach ein Programm, welches die LineData()-Werte des Asuro in einem Terminalprogramm auf dem PC ausgibt, auf den Asuro (falls keines zur Hand, dann findest Du eines in diesem Beitrag (https://www.roboternetz.de/phpBB2/viewtopic.php?p=269453#269453)). Setze den Asuro auf die Linie und bewege ihn dann soweit nach links oder rechts, bis Du möchtest, daß er den Zustand als nicht mehr auf der Linie ansehen soll.
Verwende die Summe der LineData()-Werte an dieser Stelle als Wert für die Konstante THRESHOLD.
naja, was ich meine ist ob es sowas wie "deutungen" der veränderung und den auswirkungen dieser gibt, z.b. von 200 rauf= schmalere linie, IR-werte irgendwo bei ...?, der schwellenwert bei 1000 und darunter= dickere linie, schlechter diode o.ä... Ich hoffe, das obige Rezept zur Festlegung von THRESHOLD ist hilfreich.
... auf der dünnen linie von der testarena ...Welche Testarena? Die Linien auf der RobotChallenge sind 1.5cm breit, siehe hier (http://www.robotchallenge.at/reglement/parallelslalom/).
So langsam habe ich nämlich bedenken wegen der anzahl der flashvorgänge, die der prozessor mitmacht Ich glaube irgendwo gelesen zu haben, daß man den Asuro mindestens 10000 mal Flashen kann, da brauchst Du wohl erst mal keine Bedenken haben ... :)
hi hermann,
nun habe ich die osterntour mit ihren über 2000km hinter mir und kann mich wieder etwas um den asuro kümmern :-)
danke erstmal für die erklärungen zum THREESHOLD, damit blicke ich durch und werde den experimentelen weg versuchen...
Welche Testarena?
diese hier, habe ich von damaltor zugeschickt bekommen. Besteht aus 9 blättern, die aneinander geklebt werden, allerdings muss der (mein) asuro schon seehhr langsam sein um nicht rauszufliegen...
edit/
was die anzahl der flashvorgänge betrifft, ich glaube eine zahl 10x kleiner mal gelesen zu haben ???
/edit
radbruch
09.04.2007, 13:07
Besteht aus 9 Blättern, die aneinander geklebt werden,Wie druckt man das denn aus? Gibts das auch als PDF? Ein kleiner, auf A4 ausdruckbarer Einheits-Testparcours wäre beim Vergleich der Lösungen klasse.
das gibt es auch als pdf datei, ich weiss aber nicht wie ich es zum download bereitstellen kann...
radbruch
09.04.2007, 16:17
Beim Beitrag erstellen als Attachment hinzufügen
wird das nicht genauso gleich sichtbar wie jpg? Naja werden wir sehen...
radbruch
11.04.2007, 01:35
Hallo
Danke, mit der PDF-Datei war der Ausdruck kein Problem. Das Zusammenkleben ist etwas fummelig, ich habe zusätzlich noch außen weise Blätter als "Auslaufzone" angebracht.
Ich will ja echt nicht nörgeln, aber ist die Linie nicht etwas dünn? Und die Kurvenradien etwas klein? Vielleicht könntet ihr mal ein Filmchen eures asuros auf dieser Teststecke zeigen.
Gruß
mic
HermannSW
11.04.2007, 09:49
Hallo inka,
Welche Testarena?
diese hier, habe ich von damaltor zugeschickt bekommen. Besteht aus 9 blättern, die aneinander geklebt werden, Cool.
das gibt es auch als pdf datei, ...Sehr hilfreich, da sollte für jeden das Gleiche aus dem Drucker kommen.
allerdings muss der (mein) asuro schon seehhr langsam sein um nicht rauszufliegen...Das hatte ich bei den sehr engen Kurven auch befürchtet, aber (siehe weiter unten) es klappt!
Ich will ja echt nicht nörgeln, aber ist die Linie nicht etwas dünn? Und die Kurvenradien etwas klein?Ja, 5mm dünn, und das ist schon sehr hell im Vergleich zu der 15mm Linie der RobotChallenge. Überraschenderweise kommt das Programm mit den seeeehr kleinen Kurvenradien gut zu recht [rechts unten hat doch ein 90°-Stück der Kurve einen Radius von nur 2cm ... eine echte Herausforderung für das Linienfolgeprogramm, das ja nur vorwärts fährt, und da der Asuro-Radabstand 10.5cm beträgt ... richtig sauber kann man da ohne rückwärts zu fahren eigentlich keine Radien unter 10.5cm fahren ... aber es geht doch irgendwie ... :)]
Vielleicht könntet ihr mal ein Filmchen eures asuros auf dieser Teststecke zeigen.Kommen schon :)
Zuerst klebte ich die Testarena-Blätter mit weißem Isolierband zusammen, das glänzt zumindest für das menschliche Auge nicht so wie Tesa-artige Klebebänder.
Dann setzte ich den Asuro mit dem Programm von oben drauf, und er drehte nur. Also das Programm zum Ausgeben der Fotosensorwerte (z.B. dieses (https://www.roboternetz.de/phpBB2/viewtopic.php?p=269453#269453)) drauf, und der Grund hierfür war sofort gefunden:
Normalerweise ist der Summenwertebereich von myIrAsuro 500-1950 (siehe folgenden Beitrag (https://www.roboternetz.de/phpBB2/viewtopic.php?p=269148#269148), http://www.stamm-wilbrandt.de/videos/IR-Messung_mini.gif), aber auf der 5mm dünnen Linie ist der Wertebereich 1511-1952! Da hilft ein THRESHOLD von 1100 natürlich nicht viel.
Ich probierte zuerst 1800, dann 1700, aber immer noch verlor myIrAsuro die Linie recht flott. Die Geschwindigkeit wollte ich nicht ändern (ist zwar nicht 0xFF, aber bei einer Untersetzung von 1:12.5 von myIrAsuro sicher einiges schneller als 0xFF bei einem StandardAsuro), und versuchte es deshalb mit 1600, was auch funktionierte. Hier nun die Videos: Zuerst kam die 8 dran: 3gp (http://www.stamm-wilbrandt.de/videos/070411_002519.3gp) / mpeg (http://www.stamm-wilbrandt.de/videos/070411_002519.mpeg) / Ausschnitt: http://www.stamm-wilbrandt.de/videos/070411_002519_anim.gif
Vorsicht bei menschlichen Hindernissen :): 3gp (http://www.stamm-wilbrandt.de/videos/070411_002722.3gp) / mpeg (http://www.stamm-wilbrandt.de/videos/070411_002722.mpeg)
Mit Ausbruch auf die innere 8: 3gp (http://www.stamm-wilbrandt.de/videos/070411_003705.3gp) / mpeg (http://www.stamm-wilbrandt.de/videos/070411_003705.mpeg)
Erfolgreich gegen den Uhrzeigersinn nach 8-Abdeckung mit weißem Blatt: 3gp (http://www.stamm-wilbrandt.de/videos/070411_004118.3gp) / mpeg (http://www.stamm-wilbrandt.de/videos/070411_004118.mpeg)
Auch der Schriftzug Linientestarena stört: 3gp (http://www.stamm-wilbrandt.de/videos/070411_004220.3gp) / mpeg (http://www.stamm-wilbrandt.de/videos/070411_004220.mpeg)
Erfolgreich mit kleinem Schönheitsfehler am Anfang: 3gp (http://www.stamm-wilbrandt.de/videos/070411_004412.3gp) / mpeg (http://www.stamm-wilbrandt.de/videos/070411_004412.mpeg)
Kurz vor Schluß noch eine Ausbruchstelle gefunden: 3gp (http://www.stamm-wilbrandt.de/videos/070411_012029.3gp) / mpeg (http://www.stamm-wilbrandt.de/videos/070411_012029.mpeg)
Erfolgreich im Uhrzeigersinn: 3gp (http://www.stamm-wilbrandt.de/videos/070411_012208.3gp) / mpeg (http://www.stamm-wilbrandt.de/videos/070411_012208.mpeg)
Wie man im letzten Video sieht, mußte doch sehr viel Schwarz im Schwenkbereich des Asuro (in der unmittelbaren Nähe der Linie) entfernt werden. Dies war einfach durch abdecken mit weißen Blättern möglich. Vielleicht sollte es aber auch eine Version der Testarena ohne den Schriftzug Linientestarena und ohne die innere 8 geben -- die schwarzen Linien außerhalb kann man ja auch einfach vermeiden, dann wäre die Testarena richtig gut.
Geschwindigkeiten: Die beiden Kreise der 8 innen haben einen Radius von 25.5cm, also ca. 160cm Länge für eine Acht, in 5s macht das 32cm/s.
Mit Lineal und PI mal Daumen gemessen ist die Außenlinie 269cm lang, bei ca. 10s macht das 26.9cm/sEinmal blieb myIrAsuro mitten auf der Linie stehen. Wie das folgende Bild zeigt, ist zwar kein Reifenwechsel, aber doch zumindest ein Wechsel des Tischtennisballes (wegen Loch) angezeigt:
http://www.stamm-wilbrandt.de/videos/070411_004550.jpg
radbruch
11.04.2007, 15:31
Klasse, das hätte ich nicht erwartet. Muss ich mich anstrengen, denn ich möchte auch so schöne Filmchen machen. 8-[
mic
damaltor
11.04.2007, 17:10
ihr könntet versuchen, die testarena als posterdruck auszudrucken, so dass jede seite nochmal auf 2 seiten gestreckt wird... und ihr könnt die drückqualität auf "schwarzweiss" (nicht graustufen) setzen, dann wird der strich dunkler. breit genug müsste er eigentlich sein... ansonsten seht das mal als herausforderung =)
hi,
@damaltor
also eine herausforderung ist es allemal :-)
@ hermann,
alle achtung, ich krieg das so nicht hin: geschwindigkeit auf 0xbF/0xaF runter, THREESHOLD liegt nach den messungen der sensoren bei 600. Liegt es an der größe deines videos, dass dein asuro so schön gleitend die kurven nimmt? Meiner ruckelt schon auf der acht so hin und her dass es nicht mehr feierlich ist.
Und an der aussenlinie bricht er gegen den uhrzeigersinn fahrend immer unten links, oder auch schon mal rechts, wenn er die linke kurve mal zufällig schafft. Es ist wahrscheinlich wirklich zufallsabhängig, einmal fuhr er sogar schon eine runde...
btw kleine videos: wie kriegt ihr die klein? ich habe mit der fotokamera auch welche gemacht, ich traue mich aber nicht die 20mb ins web zu stellen...
damaltor
11.04.2007, 20:41
kinners warum macht ihr euch das so schwer mit den hex-zahlen... wie viel ist das?
videos kannte mitn handy machen, dann sind sie recht klein und bei vielen geräten im 3gp-format. dann kann man sie mithilfe eines converters umwandeln in mpeg (bei nokia: nikoa multimedia converter oder nokia multimedia player: datei öffnen -> 3gp video auswählen -> speichern als -> dateiname und mpeg-format auswählen -> speichern).
die umwandlung in gif ist glaub ich etwas komplexer
probier mal mit anderen threeshold werten rum, oder versuche mal die maximalgeschwindigkeit auszuloten, bei der er 2-3 runden schafft.
0xaF=10x16 + 15
0xbF=11x16 + 15
aber du hast schon recht - dezimal ist einfacher...
vielleicht sollte ich den unterschied zwische speed1 und speed2 variieren?
danke für den tip mit dem handy - gibts son tool auch für sony-ericson?
damaltor
11.04.2007, 21:52
hmm... mach mal ein video, lade es auf den computer, und dann versuche es als anhang anzufügen. ich denke mal wir werden es auch so sehen können.
ansonsten such ich mal was raus.
HermannSW
12.04.2007, 10:13
...
@ hermann,
alle achtung, ich krieg das so nicht hin: geschwindigkeit auf 0xbF/0xaF runter, THREESHOLD liegt nach den messungen der sensoren bei 600.Was ist bei 600, das gemessene Minimum oder THRESHOLD?
Bei mir war das gemessene Minimum 1511, THRESHOLD habe ich knapp darüber (1600) ansetzen müssen, damit es funktionierte.
Liegt es an der größe deines videos, dass dein asuro so schön gleitend die kurven nimmt? Meiner ruckelt schon auf der acht so hin und her dass es nicht mehr feierlich ist.Die Videos sind nicht geschönt :-), aber der Asuro schwankt manchmal schon ganz schön, was man besonders in den Videos mit den Asubrüchen sehen kann.
Und an der aussenlinie bricht er gegen den uhrzeigersinn fahrend immer unten links, oder auch schon mal rechts, wenn er die linke kurve mal zufällig schafft. Es ist wahrscheinlich wirklich zufallsabhängig, einmal fuhr er sogar schon eine runde...Versuch es erstmal mit der 8 innen, setze THRESHOLD auf z.B. gemessene Minimumsumme+100, und variiere, bis Dein Asuro so schön auf der 8 gleitet, wie meiner in dem Video -- es geht wirklich!
btw kleine videos: wie kriegt ihr die klein? ich habe mit der fotokamera auch welche gemacht, ich traue mich aber nicht die 20mb ins web zu stellen...Ich verwende ein Photo-Handy (Siemens M65, die Videos haben da eine Auflösung von 128x96). Zu den von mir verwendeten Tools zur Weiterverarbeitung der 3gp-Videos (gifsicle!) findest Du mehr in dem folgenden Beitrag (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=268873#268873).
kinners warum macht ihr euch das so schwer mit den hex-zahlen... wie viel ist das? Schau mal auf die Zahlendarstellung in Deiner Signature ... :-)
hi,
bin mit der testarena umgezogen (kein störende seitlicher lichteinfall) und der asuro bleibt auf der linie! (siehe attatchment- musste ich von 3gp in txt umbenennen) werde mich also um abschirmung der linienfolgedioden kümmern (müssen)...
@hermann
die 600 sind die summe der werte li/re für die position in der ich meine der asuro ist nicht mehr auf der linie
HermannSW
12.04.2007, 10:55
Hallo,
hi,
bin mit der testarena umgezogen (kein störende seitlicher lichteinfall) und der asuro bleibt auf der linie! (siehe attatchment- musste ich von 3gp in txt umbenennen) werde mich also um abschirmung der linienfolgedioden kümmern (müssen)...das klingt ja gut, und sieht noch besser aus!
Ich habe das Video für Dich mal gewandelt:
Frame http://www.stamm-wilbrandt.de/videos/gk_cw_frame.gif / 3gp (http://www.stamm-wilbrandt.de/videos/gk_cw.3gp) (18s, 172KB) / mpeg (http://www.stamm-wilbrandt.de/videos/gk_cw.mpg.mpeg) (18s, 252KB)
Um Bilder/Videos so bereitzustellen braucht man allerdings ein bißchen Webspace ...
ja, Hermann,
es ist immer schön wenn man festetllt, dass nicht alles auf dem eigenen unvermögen scheitert, sondern dass es manchmal äußere einflüsse sind, die es nur zu finden und möglichst abzustellen gillt...:-)
danke für die umwandlung des filmchens, demnächst evtl. mehr in diesem theater, webspace ist kein problem - www.a-g-k.com ...
damaltor
12.04.2007, 13:46
wie kommt es dass eure werte so weit voneinander entfernt sind? aber herzlichen glückwunsch, dass es endlich funktioniert... gehen beide strecken, innen und aussen?
die signature ist mit dezimalzahlen einfach nicht witzig... =)
ja, die acht geht auch. Beide strecken in beiden richtungen. Ich denke das die werte sio weit auseinanderliegen liegt am:
- IR-LED (keine ahnung welches fabrikat und werte meine hat - wald und wiese)
- asurobauteilen überhaupt
HermannSW
12.04.2007, 15:25
Hi,
wie kommt es dass eure werte so weit voneinander entfernt sind?liegt einfach nur an der fehlenden weißen Schürze um die Fotosensoren bei Inka. Im Beitrag
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=268565#268565
habe ich davon berichtet, daß die Summen-Werte sowohl für rote als auch für infrarote LEDs um den Faktor 3 durch die (innen weiße!) Schürze hochgehen -- 600 (von Inka ohne Schürze) mal 3 liegt ja auch im Bereich der Summe meiner Sensoren (1950).
also die schürze ist fertig, der THRESHOLD wert liegt jetzt bei 1600, bin damit noch nicht so ganz zufrieden, nur wegen dem faktor 3 wollte ich es hier durchgeben...
wie war das nochmal mit den bilderneinfügen direkt im text?
http://www.a-g-k.com/_asuro/fotos/2007_04_13_01-1.jpg
http://www.a-g-k.com/_asuro/fotos/2007_04_13_02-1.jpg
http://www.a-g-k.com/_asuro/fotos/2007_04_13_03-1.jpg
So (intuitiv) gehts doch!!!:-)danke hermann...
HermannSW
13.04.2007, 19:07
Hallo,
also die schürze ist fertig, der THRESHOLD wert liegt jetzt bei 1600, bin damit noch nicht so ganz zufrieden, nur wegen dem faktor 3 wollte ich es hier durchgeben...was sind denn die gemessenen Summen-Maximum-Werte mit und ohne Schürze bei Deinem Asuro?
Schön ist es auch, eine unabhängige Bestätigung für den Faktoreffekt einer weißen Schürze zu bekommen ... :)
wie war das nochmal mit den bilderneinfügen direkt im text?
www.a-g-k.com/_asuro/fotos/2007_04_13-1
So (intuitiv) gehts leider nicht :-(Das war es schon fast, einfach noch http:// davor, und die Bildendung dahinter, ich habe schon .gif, .jpg und .jpeg ausprobiert, die gibt es nicht, aber Du müßtest ja die korrekte URL Deines Bildes kennen ... :)
was sind denn die gemessenen Summen-Maximum-Werte mit und ohne Schürze bei Deinem Asuro?
werde ich noch einmal etwas genauer messen...
den beitrag mit den fotos haber noch einmal editiert, da die schürze beliebig gedreht aufgesetzt werden kann, kann ich nun meine runden mit und ohne werbung drehen :-)
preisfrage: aus was ist die schürze?
gemessene werte der fototransistoren:
beide über weiss, summe 1990
beide über schwarz, summe 190
schwarze streifen (5mm) in der mitte, summe 900
gemessen mit dieser software von hans_z:
#include "asuro.h" // Prüfung der Phototransitoren
/* ------------ Line Sensor Test ---------------- */
/* Left Sensor -> Left Break LED ON when Light on
Left Phototransistor bright enough */
/* Right Sensor -> Right Break LED ON when Light on
Right Phototransistor bright enough */
int main(void)
{
unsigned char tmp[2] = {OFF,OFF};
unsigned int data[2];
unsigned int z;
Init();
SerWrite("\n\r --- Line Sensor Test ---",28);
StatusLED(OFF);
FrontLED(ON);
do
{
/* for(z = 1; z < 100; z++); EDIT 1: unnützer Code
{
}
*/
LineData(data);
if (data[0] > 400)
tmp[0] = ON;
else
tmp[0] = OFF;
if (data[1] > 400)
tmp[1] = ON;
else
tmp[1] = OFF;
BackLED(tmp[0],tmp[1]);
SerWrite("\n\r Phototransistorwerte links/rechts: ",39);
PrintInt(data[0]);
//SerWrite("-",1);
PrintInt(data[1]);
// SerWrite("\f",1); //Seitenvorschub EDIT 2: bringt Fehler bei der Ausgabe
}
while(1);
return 0;
}
/* END Line Sensor Test ------------------------- */
dazu gleich eine frage (ich kann schöne schürzen bauen, inzwischen auch schon bilder im forum einfügen, mit der sw klappts (noch) nicht so...
Zwischen den werten data li/re sollte ein zwischenraum, evtl. mit einem bindestrich, schrägstrich o.ä. erscheinen, ich habe die zeile
PrintInt(data[0]);
//SerWrite("-",1);
PrintInt(data[1]);
auskomentiert, weil nur mist ausgegeben wurde. Irgendwelche sonderzeichein statt blank oder bindestrich, doppelter umbruch usw.
woran liegt das?
radbruch
14.04.2007, 13:02
Hallo
...sollte ein zwischenraum, evtl. mit einem bindestrich, schrägstrich o.ä. erscheinenWenn dies bei mir auftritt, liegt es meist an einer fehlerhaften (falsch gezählten) SerWrite-Anweisung. Allerdings kann ich in deinem Code keine entdecken. Du könntest testweise mal alle nicht benötigten Ausgaben auskommentieren, so dass der asuro nur noch die Daten und/oder die Trenner sendet. Vielleicht kannst du so den Fehler eingrenzen.
Vielleicht stören auch die Umlaute/Sonderzeichen in den Kommentaren. Bei mir werden solche Codes irgendwie nicht richtig übersetzt.
Inzwischen schafft mein asuro den Testkurs auch, allerdings nur schleichend und gelegentlich in der Haarnadelkurve (unten rechts) zirkelnd. Hier schwenkt er so ungeschickt von der Seite über die Linie dass er den Status nicht mehr richtig umschaltet. Das Problem hat er mit meinem eigenen Code und auch mit dem Code vom myIRasuro.
Filmchen folgt nach dem Grillen O:)
Gruß
mic
HermannSW
14.04.2007, 16:21
Hallo,
gemessene werte der fototransistoren:
beide über weiss, summe 1990
beide über schwarz, summe 190
schwarze streifen (5mm) in der mitte, summe 900hats Du auch noch den Wert für Mitte über 15mm Streifen?
Zwischen den werten data li/re sollte ein zwischenraum, evtl. mit einem bindestrich, schrägstrich o.ä. erscheinen, ich habe die zeile
PrintInt(data[0]);
//SerWrite("-",1);
PrintInt(data[1]);
auskomentiert, weil nur mist ausgegeben wurde.Verwende doch SerPrint(), da wird für Dich gezählt!
Inzwischen schafft mein asuro den Testkurs auch, allerdings nur schleichend und gelegentlich in der Haarnadelkurve (unten rechts) zirkelnd. Hier schwenkt er so ungeschickt von der Seite über die Linie dass er den Status nicht mehr richtig umschaltet. Das Problem hat er mit meinem eigenen Code und auch mit dem Code vom myIRasuro. Einfach den THRESHOLD weiter reduzieren, damit die Regelung früher eingreift und der Asuro gar nicht soweit von der Linie wegkommt ...
Filmchen folgt nach dem Grillen Bei uns kommt das Grillen erst um 18Uhr ... :)
damaltor
14.04.2007, 16:44
benutze anstelle des striches ein leerzeichen... das ging bei mir =)
@hermann_sw
Zwischen den werten data li/re sollte ein zwischenraum, evtl. mit einem bindestrich, schrägstrich o.ä. erscheinen, ich habe die zeile
Code: PrintInt(data[0]);
//SerWrite("-",1);
PrintInt(data[1]);
auskomentiert, weil nur mist ausgegeben wurde.
Verwende doch SerPrint(), da wird für Dich gezählt!
das kann ich sicher nicht 1:1 ersetzen :-(
die wetre über mitte eines 15mm schwarzen streifen liegen bei 400 - 420
@damaltor
beim leerzeichen wir bei mir ein "ß" ausgegeben. Liegt warscheinlich an der mehrsprachigen "umgebung" die ich (nicht nur im rechner) habe :-(
damaltor
14.04.2007, 17:40
hrhr... wie seiht es mit normalen zeichen aus? also abcde... usw. gehen die? sonst mach halt irgendwas dazwischen, nur halt dass es getrennt ist... oder lass dir alle mögliches nonderzeichen ausgeben und schau, welches du als leerzeichen eintragen musst.
teste mal:
SerPrint(" ");
teste mal:
SerPrint(" ");
../hans_z_transistorenabgleich.c:36: undefined reference to `SerPrint'
make: *** [hans_z_transistorenabgleich_2.elf] Error 1
btw:
es ist ganz egal was ich da einsetze, es wird immer "ß" ausgegeben...
damaltor
14.04.2007, 18:58
serprint ist nur in der neuen lib verfügbar... hast du die?
ja, habe ich, werde ich versuchen einzubinden...
danke
also das mit der 2.7 asuro lib hat nicht geklappt, habe mich also "mit der rechten hand hinterm linken ohr gekratzt":
char z;
z = 111;
Init();
SerWrite("\n\r --- Line Sensor Test ---",28);
...
SerWrite("\n\r Phototransistorwerte links/rechts: ",39);
PrintInt(data[0]);
PrintInt(z);
//SerWrite("\n\r !",1);
jetzt sind drei einser in der mitte. Eigetlich dachte ich ich kann unter char"z" den asci-code des - zeichens so ausgeben lassen, hat aber auch nicht funktioniert...
damaltor
15.04.2007, 16:09
du kannst es mal mit einem "unsigned char" probieren... dann sollte evtl auch das direkt eingegebene ascii zeichen funktionieren. buchstaben müssen zur ausgabe immer unsigned sein.
HermannSW
16.04.2007, 07:48
Hallo inka,
also das mit der 2.7 asuro lib hat nicht geklappt,...schade.
z = 111;
...
PrintInt(z);
...Hier liegt der Grund für die drei 1er, Du hast PrintInt() verwendet ...
Flashe doch mal flogendes Programm auf Deinen Asuro und poste den Output, es werden alle ASCII-Zeichen (ohne Steuerzeichen) ausgegeben:
#include <asuro.h>
void _UartPutc_ (unsigned char zeichen)
{
UCSRB = 0x08; // enable transmitter
UCSRA |= 0x40; // clear transmitter flag
while (!(UCSRA & 0x20)) // wait for empty transmit buffer
;
UDR = zeichen;
while (!(UCSRA & 0x40)) // Wait for transmit complete flag (TXC)
;
}
int main(void)
{
unsigned char u;
Init();
for(u=0x20; u<0x80; ++u)
{
_UartPutc_(u);
if ((u&0x0F)==0x0F)
{
_UartPutc_('\r');
_UartPutc_('\n');
}
}
while (1);
return 0;
}
Die Verwendung von _UartPutc_() geschieht hier nur, um unabhängig von irgendwelchen Library-Versionen zu sein ... (ist die umbenannte Version aus der AsuroLib v270rc3)
So sieht der Output meines Asuro aus:
!"#$%&'()*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
`abcdefghijklmno
pqrstuvwxyz{|}~
hi hermann,
ich habe ein paar zeilen aus deinem programm - gleich für das "-" zeichen angepasst - in meines reinkopiert, ich gebe zu nicht alles verstanden zu haben von dem was da in deinen zeilen stand (die komentare halfen aber immerhin um die funktion der zeile zu erahnen:-))
#include "asuro.h" // Prüfung der Phototransitoren
/* ------------ Line Sensor Test ---------------- */
/* Left Sensor -> Left Break LED ON when Light on
Left Phototransistor bright enough */
/* Right Sensor -> Right Break LED ON when Light on
Right Phototransistor bright enough */
void _UartPutc_ (unsigned char zeichen)
{
UCSRB = 0x08; // enable transmitter
UCSRA |= 0x40; // clear transmitter flag
while (!(UCSRA & 0x20)) // wait for empty transmit buffer
;
UDR = zeichen;
while (!(UCSRA & 0x40)) // Wait for transmit complete flag (TXC)
;
}
int main(void)
{
unsigned char tmp[2] = {OFF,OFF};
unsigned int data[2];
unsigned char z;
z = 0x2D;
Init();
SerWrite("\n\r --- Line Sensor Test ---",28);
StatusLED(OFF);
FrontLED(ON);
do
}
*/
LineData(data);
if (data[0] > 400)
tmp[0] = ON;
else
tmp[0] = OFF;
if (data[1] > 400)
tmp[1] = ON;
else
tmp[1] = OFF;
BackLED(tmp[0],tmp[1]);
SerWrite("\n\r Phototransistorwerte--",35);
PrintInt(data[0]);
_UartPutc_(0x2D);
//PrintInt(z);
//SerWrite("\n\r !",1);
//SerPrint(" ");
PrintInt(data[1]);
// SerWrite("\f",1); //Seitenvorschub EDIT 2: bringt Fehler bei der Ausgabe
}
while(1);
return 0;
}
/* END Line Sensor Test ------------------------- */
das "-" zeichen wird jetzt ausgegeben, die zweite hälfte des satzes
"\n\r Phototransistorwerte : links/rechts",39"
wurde durch irgendwelche weisen rechtecke überschrieben, deshalb habe ich es abgekürzt...
fängt die funktion
_UartPutc_(0x2D);
nicht dort an auszugeben wo die vorhergehende zeile aufgehört hat?
HermannSW
17.04.2007, 07:47
Hi inka,
...
das "-" zeichen wird jetzt ausgegeben, die zweite hälfte des satzes
"\n\r Phototransistorwerte : links/rechts",39"
...da hat sich der Fehlerteufel beim ersten do eingeschlichen!
Dann habe ich noch \n\r geändert in \r\n, und dieses kompilierbare Programm funktioniert:
#include "asuro.h" // Prüfung der Phototransitoren
/* ------------ Line Sensor Test ---------------- */
/* Left Sensor -> Left Break LED ON when Light on
Left Phototransistor bright enough */
/* Right Sensor -> Right Break LED ON when Light on
Right Phototransistor bright enough */
void _UartPutc_ (unsigned char zeichen)
{
UCSRB = 0x08; // enable transmitter
UCSRA |= 0x40; // clear transmitter flag
while (!(UCSRA & 0x20)) // wait for empty transmit buffer
;
UDR = zeichen;
while (!(UCSRA & 0x40)) // Wait for transmit complete flag (TXC)
;
}
int main(void)
{
unsigned char tmp[2] = {OFF,OFF};
unsigned int data[2];
unsigned char z;
z = 0x2D;
Init();
SerWrite("\r\n --- Line Sensor Test ---",28);
StatusLED(OFF);
FrontLED(ON);
do
{
LineData(data);
if (data[0] > 400)
tmp[0] = ON;
else
tmp[0] = OFF;
if (data[1] > 400)
tmp[1] = ON;
else
tmp[1] = OFF;
BackLED(tmp[0],tmp[1]);
SerWrite("\r\n Phototransistorwerte--",35);
PrintInt(data[0]);
_UartPutc_(0x2D);
//PrintInt(z);
//SerWrite("\n\r !",1);
//SerPrint(" ");
PrintInt(data[1]);
// SerWrite("\f",1); //Seitenvorschub EDIT 2: bringt Fehler bei der Ausgabe
}
while(1);
return 0;
}
/* END Line Sensor Test ------------------------- */
Und hier Output von myIrAsuro:
--- Line Sensor Test ---
Phototransistorwerte-- 982-976
Phototransistorwerte-- 424-783
Phototransistorwerte-- 264-350
Phototransistorwerte-- 236-217
Phototransistorwerte-- 236-203
Phototransistorwerte-- 234-198
Phototransistorwerte-- 235-199
Phototransistorwerte-- 235-199
Phototransistorwerte-- 234-197
Phototransistorwerte-- 229-190
Phototransistorwerte-- 233-194
Phototransistorwerte-- 233-197
Phototransistorwerte-- 233-202
Phototransistorwerte-- 232-225
Phototransistorwerte-- 228-205
Phototransistorwerte-- 229-182
Phototransistorwerte-- 231-200
Phototransistorwerte-- 243-256
Phototransistorwerte-- 297-618
Phototransistorwerte-- 981-975
Hallo Hermann
ich habe dein programm ausprobiert jedoch tritt beim compilieren immer dieser error auf:
> "C:\Asuro_src\Progs\Drei\Test-all.bat"
C:\Asuro_src\Progs\Drei>make all
set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=Linie.lst Linie.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > Linie.d; \
[ -s Linie.d ] || rm -f Linie.d
-------- begin --------
avr-gcc --version
avr-gcc (GCC) 4.1.1 (WinAVR 20070122)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=Linie.lst Linie.c -o Linie.o
In file included from ./asuro.h:34,
from Linie.c:25:
c:/winavr/bin/../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>."
Linie.c: In function 'main':
Linie.c:58: error: 'LEFT' undeclared (first use in this function)
Linie.c:58: error: (Each undeclared identifier is reported only once
Linie.c:58: error: for each function it appears in.)
Linie.c:58: error: 'RIGHT' undeclared (first use in this function)
Linie.c: In function 'RaceStart':
Linie.c:114: warning: implicit declaration of function 'Msleep'
make: *** [Linie.o] Error 1
> Process Exit Code: 2
was mache ich denn falsch???
mfg
Christian
Hi Chris,
Du brauchst die Lib2.7.
_HP_
hi hermann,
das programm lässt sich kompilieren und auch flashen aber...
die ausgabe im kombiflash wie auch im hypertherminal sieht so aus:
Phototransi‡‹œ˜‹‡`à987-988
Phototransi‡‹œ˜‹‡`à987-988
Phototransi‡‹œ˜‹‡`à987-988
Phototransi‡‹œ˜‹‡`à987-988
Phototransi‡‹œ˜‹‡`à987-988
Phototransi‡‹œ˜‹‡`à987-988
Phototransi‡‹œ˜‹‡`à987-988
Phototransi‡‹œ˜‹‡`à987-988
Phototransi‡‹œ˜‹‡`à987-988
Phototransi‡‹œ˜‹‡`à987-988
Phototransi‡‹œ˜‹‡`à987-988
ist schon komisch...
ah ok thx
muss ich dann einfach die alte lib durch die neue ersetzen oder noch was anderes machen???
danke für die schnelle Hilfe
Christian
HermannSW
17.04.2007, 15:24
Hi,
hi hermann,
das programm lässt sich kompilieren und auch flashen aber...kannst Du mal das bei mir übersetzte Hex-file flashen und es ausprobieren [Programm von oben (mit AsuroLib v270rc3 und Uralt-Compiler von Original-Asuro-CD)]?
:1000000012C02BC0EEC029C0BBC027C026C025C06F
:1000100024C023C022C021C020C01FC0F9C01DC001
:100020001CC01BC01AC011241FBECFE5D4E0DEBF28
:10003000CDBF10E0A0E6B0E0EEEDF7E002C0059025
:100040000D92A839B107D9F710E0A8E9B0E001C0D6
:100050001D92AA3AB107E1F70BC0D2CF982F88E0E2
:100060008AB95E9A5D9BFECF9CB95E9BFECF0895D8
:10007000CBE5D4E0DEBFCDBF56D06CE180E690E0AA
:1000800084D280E0C3D181E0D3D1CE01019642D1A8
:1000900089819A818159914010F001E001C000E00E
:1000A0008B819C818159914010F011E001C010E0DA
:1000B000612F802F97D163E28DE790E066D289812E
:1000C0009A81D3D18DE2CADFFE013196828193817C
:1000D000CCD1DBCFACD20895EF92FF920F931F9358
:1000E000C9D21F910F91FF90EF900895DC01CB01D1
:1000F000BC01CD0104D3DC01CB01BC01CD010895CD
:100100001DD3CB010895DC01CB01BC01CD012AD365
:10011000CA01B9010895DC01CB01BC01CD0144D372
:10012000CA01B901089589E785BD81E983BD89B711
:10013000806489BF1BB81AB896E890BD8FEC89B966
:100140008FE387BB84EF81BB81EA8FBD82E08EBDE8
:1001500096B9979880E06CD161E0862F43D160E03A
:10016000862F40D181E052D160E2862F74D160E0C9
:10017000862F69D11092A00010929F007894089564
:100180001F920F920FB60F9211248F939F93AF93EC
:10019000BF9384B58B5D84BD8091A5008F5F8093F4
:1001A000A5008091A500882399F48091A6009091E4
:1001B000A700A091A800B091A9000196A11DB11DB2
:1001C0008093A6009093A700A093A800B093A900E5
:1001D000BF91AF919F918F910F900FBE0F901F9085
:1001E00018951F920F920FB60F9211248F939F9321
:1001F00081E090E090939E0080939D008BB78F7775
:100200008BBF9F918F910F900FBE0F901F901895ED
:100210001F920F920FB60F9211242F933F934F937B
:100220008F939F93AF93BF93EF93FF9380919F0022
:100230009091A000892B09F445C040919C00E42FC7
:10024000FF27E856FF4F85B18083442311F080E6F5
:1002500001C081E687B9242F3327F901E856FF4F03
:1002600080818C3888F4D901A656BF4F8C9181309B
:1002700059F4F901E20FF31FEF55FF4F808191818F
:100280000196808391831C92242F3327F901E8562D
:10029000FF4F8081813A90F0D901A656BF4F8C91D3
:1002A000882361F4F901E20FF31FEF55FF4F8081BE
:1002B000918101968083918381E08C9381E048272E
:1002C00040939C00FF91EF91BF91AF919F918F91CF
:1002D0004F913F912F910F900FBE0F901F90189547
:1002E00040919F005091A0001092A00010929F009A
:1002F00085EC87B9369A349BFECF349A24B185B108
:100300009927982F8827820F911D5093A000409322
:100310009F0008950F931F93CF93DF93EC010091FB
:100320009F001091A0001092A00010929F0083E403
:1003300087B98AE014D1369A349BFECF349A24B11F
:1003400085B19927982F8827820F911D88839983DB
:1003500082E487B98AE003D1369A349BFECF349A7F
:1003600024B185B19927982F8827820F911D8A8300
:100370009B831093A00000939F00DF91CF911F916A
:100380000F910895FC0140919F005091A0001092A0
:10039000A00010929F0084B38C7F84BB979A81E465
:1003A00087B9369A349BFECF349A24B185B1992708
:1003B000982F8827820F911D8083918380E487B9CD
:1003C000369A349BFECF349A24B185B19927982F61
:1003D0008827820F911D828393835093A0004093BE
:1003E0009F000895982F882311F4662339F0979879
:1003F00084B3836084BB85B3836085BB992309F490
:10040000A998662309F4A89808950895882311F4FB
:10041000C0989298813011F4C09A9298833011F468
:10042000C09A929A823011F4C098929A08950895D1
:1004300022B32F7B992736E0880F991F3A95E1F771
:10044000282B22BB089599279BBD8ABD862F99270B
:1004500099BD88BD0895982F82B38F7C892B82BB6C
:1004600088B38F7C862B88BB0895CF93DF93CDB75D
:10047000DEB727970FB6F894DEBF0FBECDBF4AE0B8
:1004800050E0BE016F5F7F4FD2D0CE01019633D0D6
:1004900027960FB6F894DEBF0FBECDBFDF91CF9188
:1004A0000895CF93DF93CDB7DEB72C970FB6F894AE
:1004B000DEBF0FBECDBFDC01CB012AE030E0AE01D4
:1004C0004F5F5F4FBC01CD01D5D0CE01019613D057
:1004D0002C960FB6F894DEBF0FBECDBFDF91CF9143
:1004E0000895982F88E08AB95E9A5D9BFECF9CB9EB
:1004F0005E9BFECF08951F93CF93DF93EC0110E036
:100500008881882361F0FE01E10FF11D1F5F80816A
:10051000E8DFFE01E10FF11D80818823A1F7DF9163
:10052000CF911F9108958091A6009091A700A0916E
:10053000A800B091A900BA2FA92F982F8827209141
:10054000A500820F911DA11DB11DBC01CD0124E2AA
:1005500030E040E050E006D1CA01B9010895982F7B
:100560008091A500980F8091A5008917E1F7089563
:10057000CF93DF93181619062CF4EC0184E2EFDF19
:100580002197E1F7DF91CF910895AC0120E088E059
:100590008AB9662359F05D9B07C0FA01E20FF11D8D
:1005A00080818CB92F5F61506623A9F75E9BFECFD7
:1005B00020E060E06E5F6E3FE8F32F5F2E3FC8F3F0
:1005C0000895DC0170E020E030E080E18AB9411557
:1005D000510501F17617C0F4C90121E030E084171C
:1005E000950790F45F9B08C0FD01E70FF11D8CB1EA
:1005F00080837F5F20E030E0761730F4C9012F5F01
:100600003F4F8417950770F34217530778F484E53A
:100610008C930895761750F45F9B06C0FD01E70F99
:10062000F11D8CB180837F5F7617B0F30895E62FBC
:10063000F72F2E2F3F2FE8944230C4F04532B4F408
:100640004A3029F497FB1EF4909581959F4F642FB3
:10065000772774D0805D8A330CF0895D8193862F73
:10066000972F0097A1F716F45DE25193932F822FF5
:10067000108235C0F52FE42FCF93FF93EF932230F4
:100680004CF125323CF5C22FE894CA3049F497FB6F
:100690003EF490958095709561957F4F8F4F9F4F59
:1006A0002C2F332744275527FF93EF935BD0EF91EF
:1006B000FF91605D6A330CF0695D6193622F732F67
:1006C000842F952F605070408040904049F716F479
:1006D000CDE2C19310828F919F91CF9100C0DC0138
:1006E000FC0101900020E9F73297AE17BF0730F404
:1006F0007C916081708331976D93F7CF0895629FED
:10070000D001739FF001829FE00DF11D649FE00D09
:10071000F11D929FF00D839FF00D749FF00D659F6A
:10072000F00D9927729FB00DE11DF91F639FB00D69
:10073000E11DF91FBD01CF0111240895AA1BBB1BA8
:1007400051E107C0AA1FBB1FA617B70710F0A61BD1
:10075000B70B881F991F5A95A9F780959095BC01F2
:10076000CD010895A1E21A2EAA1BBB1BFD010DC0ED
:10077000AA1FBB1FEE1FFF1FA217B307E407F50751
:1007800020F0A21BB30BE40BF50B661F771F881F2D
:10079000991F1A9469F760957095809590959B01C3
:1007A000AC01BD01CF01089597FB092E05260ED09F
:1007B00057FD04D0D7DF0AD0001C38F4509540957F
:1007C000309521953F4F4F4F5F4F0895F6F7909525
:0E07D0008095709561957F4F8F4F9F4F0895D4
:1007DE000D0A20202D2D2D204C696E652053656E3F
:1007EE00736F722054657374202D2D2D000D0A2009
:1007FE002050686F746F7472616E736973746F7268
:08080E0077657274652D2D0061
:00000001FF
Vielleicht gibt es ja ein Fehler in deinem AVR-Environment ...
hi hermann,
beim versuch die datei im kombiflash zu laden kommt folgendes:
-----------------------
>Ready.HEX file line length ERROR!
Stats of hermann_1.hex
Strart Page 0 End Page 0 occupies 0Bytes
------------------------
damaltor
17.04.2007, 17:18
benutz doch das originale flash tool...
oder fehlt evtl ein zeichen?
da kommt auch nur:
Open COM2 --> OK !
Bulding RAM --> HEX file line length ERROR!
also fehlt doch was?
HermannSW
17.04.2007, 20:20
Hi,
da kommt auch nur:
Open COM2 --> OK !
Bulding RAM --> HEX file line length ERROR!
also fehlt doch was?hier noch mal als Attachement, umbenennen in test.hex nicht vergessen.
hi hermann,
die test.hex sieht so aus:
:1000000012C02BC0EEC029C0BBC027C026C025C06F
:1000100024C023C022C021C020C01FC0F9C01DC001
:100020001CC01BC01AC011241FBECFE5D4E0DEBF28
:10003000CDBF10E0A0E6B0E0EEEDF7E002C0059025
:100040000D92A839B107D9F710E0A8E9B0E001C0D6
:100050001D92AA3AB107E1F70BC0D2CF982F88E0E2
:100060008AB95E9A5D9BFECF9CB95E9BFECF0895D8
:10007000CBE5D4E0DEBFCDBF56D06CE180E690E0AA
:1000800084D280E0C3D181E0D3D1CE01019642D1A8
:1000900089819A818159914010F001E001C000E00E
:1000A0008B819C818159914010F011E001C010E0DA
:1000B000612F802F97D163E28DE790E066D289812E
:1000C0009A81D3D18DE2CADFFE013196828193817C
:1000D000CCD1DBCFACD20895EF92FF920F931F9358
:1000E000C9D21F910F91FF90EF900895DC01CB01D1
:1000F000BC01CD0104D3DC01CB01BC01CD010895CD
:100100001DD3CB010895DC01CB01BC01CD012AD365
:10011000CA01B9010895DC01CB01BC01CD0144D372
:10012000CA01B901089589E785BD81E983BD89B711
:10013000806489BF1BB81AB896E890BD8FEC89B966
:100140008FE387BB84EF81BB81EA8FBD82E08EBDE8
:1001500096B9979880E06CD161E0862F43D160E03A
:10016000862F40D181E052D160E2862F74D160E0C9
:10017000862F69D11092A00010929F007894089564
:100180001F920F920FB60F9211248F939F93AF93EC
:10019000BF9384B58B5D84BD8091A5008F5F8093F4
:1001A000A5008091A500882399F48091A6009091E4
:1001B000A700A091A800B091A9000196A11DB11DB2
:1001C0008093A6009093A700A093A800B093A900E5
:1001D000BF91AF919F918F910F900FBE0F901F9085
:1001E00018951F920F920FB60F9211248F939F9321
:1001F00081E090E090939E0080939D008BB78F7775
:100200008BBF9F918F910F900FBE0F901F901895ED
:100210001F920F920FB60F9211242F933F934F937B
:100220008F939F93AF93BF93EF93FF9380919F0022
:100230009091A000892B09F445C040919C00E42FC7
:10024000FF27E856FF4F85B18083442311F080E6F5
:1002500001C081E687B9242F3327F901E856FF4F03
:1002600080818C3888F4D901A656BF4F8C9181309B
:1002700059F4F901E20FF31FEF55FF4F808191818F
:100280000196808391831C92242F3327F901E8562D
:10029000FF4F8081813A90F0D901A656BF4F8C91D3
:1002A000882361F4F901E20FF31FEF55FF4F8081BE
:1002B000918101968083918381E08C9381E048272E
:1002C00040939C00FF91EF91BF91AF919F918F91CF
:1002D0004F913F912F910F900FBE0F901F90189547
:1002E00040919F005091A0001092A00010929F009A
:1002F00085EC87B9369A349BFECF349A24B185B108
:100300009927982F8827820F911D5093A000409322
:100310009F0008950F931F93CF93DF93EC010091FB
:100320009F001091A0001092A00010929F0083E403
:1003300087B98AE014D1369A349BFECF349A24B11F
:1003400085B19927982F8827820F911D88839983DB
:1003500082E487B98AE003D1369A349BFECF349A7F
:1003600024B185B19927982F8827820F911D8A8300
:100370009B831093A00000939F00DF91CF911F916A
:100380000F910895FC0140919F005091A0001092A0
:10039000A00010929F0084B38C7F84BB979A81E465
:1003A00087B9369A349BFECF349A24B185B1992708
:1003B000982F8827820F911D8083918380E487B9CD
:1003C000369A349BFECF349A24B185B19927982F61
:1003D0008827820F911D828393835093A0004093BE
:1003E0009F000895982F882311F4662339F0979879
:1003F00084B3836084BB85B3836085BB992309F490
:10040000A998662309F4A89808950895882311F4FB
:10041000C0989298813011F4C09A9298833011F468
:10042000C09A929A823011F4C098929A08950895D1
:1004300022B32F7B992736E0880F991F3A95E1F771
:10044000282B22BB089599279BBD8ABD862F99270B
:1004500099BD88BD0895982F82B38F7C892B82BB6C
:1004600088B38F7C862B88BB0895CF93DF93CDB75D
:10047000DEB727970FB6F894DEBF0FBECDBF4AE0B8
:1004800050E0BE016F5F7F4FD2D0CE01019633D0D6
:1004900027960FB6F894DEBF0FBECDBFDF91CF9188
:1004A0000895CF93DF93CDB7DEB72C970FB6F894AE
:1004B000DEBF0FBECDBFDC01CB012AE030E0AE01D4
:1004C0004F5F5F4FBC01CD01D5D0CE01019613D057
:1004D0002C960FB6F894DEBF0FBECDBFDF91CF9143
:1004E0000895982F88E08AB95E9A5D9BFECF9CB9EB
:1004F0005E9BFECF08951F93CF93DF93EC0110E036
:100500008881882361F0FE01E10FF11D1F5F80816A
:10051000E8DFFE01E10FF11D80818823A1F7DF9163
:10052000CF911F9108958091A6009091A700A0916E
:10053000A800B091A900BA2FA92F982F8827209141
:10054000A500820F911DA11DB11DBC01CD0124E2AA
:1005500030E040E050E006D1CA01B9010895982F7B
:100560008091A500980F8091A5008917E1F7089563
:10057000CF93DF93181619062CF4EC0184E2EFDF19
:100580002197E1F7DF91CF910895AC0120E088E059
:100590008AB9662359F05D9B07C0FA01E20FF11D8D
:1005A00080818CB92F5F61506623A9F75E9BFECFD7
:1005B00020E060E06E5F6E3FE8F32F5F2E3FC8F3F0
:1005C0000895DC0170E020E030E080E18AB9411557
:1005D000510501F17617C0F4C90121E030E084171C
:1005E000950790F45F9B08C0FD01E70FF11D8CB1EA
:1005F00080837F5F20E030E0761730F4C9012F5F01
:100600003F4F8417950770F34217530778F484E53A
:100610008C930895761750F45F9B06C0FD01E70F99
:10062000F11D8CB180837F5F7617B0F30895E62FBC
:10063000F72F2E2F3F2FE8944230C4F04532B4F408
:100640004A3029F497FB1EF4909581959F4F642FB3
:10065000772774D0805D8A330CF0895D8193862F73
:10066000972F0097A1F716F45DE25193932F822FF5
:10067000108235C0F52FE42FCF93FF93EF932230F4
:100680004CF125323CF5C22FE894CA3049F497FB6F
:100690003EF490958095709561957F4F8F4F9F4F59
:1006A0002C2F332744275527FF93EF935BD0EF91EF
:1006B000FF91605D6A330CF0695D6193622F732F67
:1006C000842F952F605070408040904049F716F479
:1006D000CDE2C19310828F919F91CF9100C0DC0138
:1006E000FC0101900020E9F73297AE17BF0730F404
:1006F0007C916081708331976D93F7CF0895629FED
:10070000D001739FF001829FE00DF11D649FE00D09
:10071000F11D929FF00D839FF00D749FF00D659F6A
:10072000F00D9927729FB00DE11DF91F639FB00D69
:10073000E11DF91FBD01CF0111240895AA1BBB1BA8
:1007400051E107C0AA1FBB1FA617B70710F0A61BD1
:10075000B70B881F991F5A95A9F780959095BC01F2
:10076000CD010895A1E21A2EAA1BBB1BFD010DC0ED
:10077000AA1FBB1FEE1FFF1FA217B307E407F50751
:1007800020F0A21BB30BE40BF50B661F771F881F2D
:10079000991F1A9469F760957095809590959B01C3
:1007A000AC01BD01CF01089597FB092E05260ED09F
:1007B00057FD04D0D7DF0AD0001C38F4509540957F
:1007C000309521953F4F4F4F5F4F0895F6F7909525
:0E07D0008095709561957F4F8F4F9F4F0895D4
:1007DE000D0A20202D2D2D204C696E652053656E3F
:1007EE00736F722054657374202D2D2D000D0A2009
:1007FE002050686F746F7472616E736973746F7268 :08080E0077657274652D2D0061
:00000001FF
ich denke das ende stimmt nicht?
HermannSW
17.04.2007, 23:23
Hallo,
...
ich denke das ende stimmt nicht?ich weiß nicht, woher der Umbruch bei Dir herkommt -- speichere das Attachement einfach als Datei weg und flasche es.
Habe eben das Hex-file neu erzeugt und mein Attachement runtergeladen, alle drei Dateien sind identisch:
C:\ASURO_src\AsuroLib\examples\HansZ>dir test*hex*
Volume in drive C has no label.
Volume Serial Number is 0815-0815
Directory of C:\ASURO_src\AsuroLib\examples\HansZ
17.04.2007 23:09 5.843 test.hex
17.04.2007 07:41 5.843 test.hex.txt
17.04.2007 23:12 5.843 test[1].hex.txt
3 File(s) 17.529 bytes
0 Dir(s) 1.953.464.320 bytes free
C:\ASURO_src\AsuroLib\examples\HansZ>diff test.hex test.hex.txt
C:\ASURO_src\AsuroLib\examples\HansZ>diff test[1].hex.txt test.hex.txt
C:\ASURO_src\AsuroLib\examples\HansZ>
die test.hex ist bei mir 5974 groß (im dateimanager), ich schick sie mal als *.txt att...
edit: beim versuch zu flashen kommt die bereits erwähnte fehlermeldung...
HermannSW
18.04.2007, 11:06
Hallo inka,
die test.hex ist bei mir 5974 groß (im dateimanager), ich schick sie mal als *.txt att...
edit: beim versuch zu flashen kommt die bereits erwähnte fehlermeldung...jetzt habe wir es, Du öffnest anscheinend die Datei, und dabei passiert es!
Gehe einfach auf das Attachment weiter oben im Thread, klicke mit der rechten Maustaste drauf und wähle im sich öffnenden Menü "Save Target As..." (sorry, kein dt. Windows zur Hand). Die so abgespeicherte Datei sollte 5843 Bytes groß sein und sich ohne Probleme Flashen lassen ...
hi hermann,
das mit dem öffnen des att wusste ich nicht, allerdings habe ich bei den codes die möglichkeit des markierens im codefenster genutzt und dann eine neue datei angelegt, text/code eingefügt und abgespeichert, ging immer...
die ausgabe im HT sieht jetzt so aus:
--- Line Sensor Test ---
PÀ‚³|€b‚»ˆ³|€aˆ»991-990
PÀ‚³|€b‚»ˆ³|€aˆ»989-989
PÀ‚³|€b‚»ˆ³|€aˆ»989-989
PÀ‚³|€b‚»ˆ³|€aˆ»989-989
PÀ‚³|€b‚»ˆ³|€aˆ»989-989
PÀ‚³|€b‚»ˆ³|€aˆ»989-989
PÀ‚³|€b‚»ˆ³|€aˆ»989-989
PÀ‚³|€b‚»ˆ³|€aˆ»989-989
PÀ‚³|€b‚»ˆ³|€aˆ»989-989
PÀ‚³|€b‚»ˆ³|€aˆ»989-989
PÀ‚³|€b‚»ˆ³|€aˆ»989-989
PÀ‚³|€b‚»ˆ³|€aˆ»989-989
PÀ‚³|€b‚»ˆ³|€aˆ»989-989
PÀ‚³|€b‚»ˆ³|€aˆ»989-989
PÀ‚³|€b‚»ˆ³|€aˆ»989-989
PÀ‚³|€b‚»ˆ³|€aˆ»989-989
so, jetzt habe ich meinen asuro seit 12 uhr gequält. "flash & change", habe jetzt eine ausgabe mit mitteln die meinem "niveau" entsprechen :-)...
Im wesentlichen habe ich festegestellt, dass die sonderzeichen dann kommen, wenn die angabe über die textlänge nicht so ist wie sie eben jetzt ist. Eine gesetzmäsigkeit zu finden ist mir nicht gelungen...
Habe den ablauf auch etwas verlangsamt damit ich die veränderungen auch mitlesen kann.
Ein problem habe ich mit dem code immer noch. Wenn ich die zwei zeilen mit dem aufleuchten der StatusLED freigebe, fängt die ausgabe wieder an zu spinnen. Wieder werden die zahlen und buchstaben durch wilde sonderzeichen bzw. weisse rechtecke überschrieben.
Frage: Was hat die ausgabe über SerWrite mit der StatusLED zu tun???
#include "asuro.h"
int main(void)
{
unsigned int data[2];
Init();
SerWrite("\r\n --- georgs line-sensor test ---",35);
Msleep(1000);
StatusLED(OFF);
FrontLED(ON);
do
{
LineData(data);
SerWrite("\r\n phototransistorwerte li/re: ",30);
Msleep(500);
PrintInt(data[0]);
//StatusLED(RED);
SerWrite("-",1);
PrintInt(data[1]);
//StatusLED(GREEN);
}
while(1);
return 0;
}
damaltor
18.04.2007, 17:54
ausser störlich sollte da nicht viel sein... decke die led mal zu, kommen trotdem noch fehler? hängen die beiden irgendwie zusammen am prozessor?
jetzt habe ich es noch einmal probiert, der rechner und asuro waren inzwischen abgeschaltet - jetzt gings auch mit der rot/grün blinkenden statusLED. Ich verstehe es nicht...
Muss ich vielleicht HT immer wieder beenden und neu starten?
damaltor
18.04.2007, 18:33
sollte eigentlich nicht das problem sein... ht gibt nur aus was emfangen wird. während dem flashen muss es aus sein, sonst eigentlich nicht.
ScWeiNePaPSt.xD
01.01.2009, 16:01
hab mal ne frage ob dasauch mit nem "stinknormalen" Asuro geht weil irgendwie machen mich die beiträge hier unsicher.
Ud wie geht das mit dem Thereshold?
Chrissi_P
01.01.2009, 16:42
Hallo,
meiner Meinung nach ist Thereshold zum Testen, ob der Asuro noch auf der Linie ist. Und wie ich das verstanden habe, brauchst du ausser der erweiterten Lib. nichts zum standard-Asuro
hi
wo ist die pdf datei zum downlaoder
radbruch
23.02.2009, 22:09
Hallo
Das PDF der RN-Linientestarena?
https://www.roboternetz.de/phpBB2/files/linefollowing-arena_488.jpg (https://www.roboternetz.de/phpBB2/viewtopic.php?p=276576#276576)
Wenn du das meinst, das kann man hier runterladen:
https://www.roboternetz.de/phpBB2/viewtopic.php?p=276576#276576
(Direkter Link (https://www.roboternetz.de/phpBB2/download.php?id=10013) zum PDF)
Gruß
mic
vielen dank das habe ich gesucht
ich bin neu hier, und nenne seit ein paar Tagen ebenfalls einen ASURO mein Eigen :)
Als erstes Programm für den Flitzer habe ich einen Ansatz gewählt, der ziemlich dem von Hermann entspricht. Allerdings habe ich das mit dem "threshold" etwas anders gelöst:
// Front-Led einschalten, Werte prüfen und ausgeben
// Zum Definieren einer Linie muß der Asuro auf dieser aufgestellt werden.
// Es werden 5 Messungen gemacht, und aus dem Durchschnittswert wird ein Differenzwert
// Für den schwächeren Sensor gebildet, um Vergleiche einfacher zu machen.
// Alle Werte werden über IR an den Empfänger geschickt und zum Schluss werden die
// addierten Mittelwerte zurückgegeben.
unsigned int LinieInit(unsigned int *werte)
{
unsigned char ausgabewert[7];
unsigned int speicher[2];
int i;
FrontLED(ON);
for (i=0;i<5;i++)
{
Sleep(30);
LineData(werte);
IntZuString(werte[0], ausgabewert);
SerWrite("\nMesswert links: ", 17);
SerWrite(ausgabewert, 6);
IntZuString(werte[1],ausgabewert);
SerWrite("\tMesswert rechts: ", 18);
SerWrite(ausgabewert,6);
speicher[0] = speicher[0] + werte[0];
speicher[1] = speicher[1] + werte[1];
}
speicher[0]=speicher[0]/5;
speicher[1]=speicher[1]/5;
IntZuString(speicher[0], ausgabewert);
SerWrite("\n===== Messwert schnitt links: ", 31);
SerWrite(ausgabewert, 6);
IntZuString(speicher[1],ausgabewert);
SerWrite("\n===== Messwert schnitt rechts: ", 32);
SerWrite(ausgabewert,6);
if(speicher[0] >= speicher[1])
{
werte[1] = speicher[0] - speicher[1];
werte[0] = 0;
}
if(speicher[1] > speicher[0])
{
werte[0] = speicher[1] - speicher[0];
werte[1] = 0;
}
return(speicher[0] + speicher[1]);
}
//Macht aus einer Integer-Zahl einen String
void IntZuString(int quelle, unsigned char *ziel)
{
sprintf(ziel, " %+5i", quelle);
}
Ich muss den Asuro auf einer schwarzen Linie aufstellen, und er ermittelt selbst was für ihn schwarz ist. um eventuellen Unterschieden der beiden Sensorwerte entgegen zu wirken addiere ich "werte[0] und [1]" jeweils zu meinem gemessenen Wert. Zu guterletzt habe ich noch zwei Stoßtaster so programmiert, dass ich einen Toleranzwert, den ich zu meiner Summe addiere (Standardmäßig auf 300 bei Geschwindigkeit 0xff) um 10 pro Betätigung verändern kann. Die anfänglichen 5 Messungen kommen daher, dass ich festgestellt habe, dass der ASURO kurz nach dem Einschalten gelegentlich etwas schwankende Werte aufwies.
Double_A
19.10.2010, 16:30
Kann jemand bitte meinen Linienfolger testen?
https://www.roboternetz.de/phpBB2/viewtopic.php?t=56454
Der braucht zwar ne etwas breitere Linie 2.5 cm , aber dafür kann er auch Abzweigungen und Sackgassen erkennen...
IcePlay3r
25.01.2012, 14:43
Hey, also ich weiß das der thread schon uhralt ist, aber ich bekomme das programm nicht zum laufen. Ich hab zwar die Library nicht installiert, aber die hex datei wurde ja verlinkt. Wieso fährt der bei mir nicht los? Ich bekomme zwar mit den Led's signalisiert ob ich auf der linie bin oder eben nicht. Aber wenn ich den button drücke, passiert einfach gar nichts -.-
Ich hoffe ihr könnt mir helfen
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.