PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ortung in einem Raum mit Hindernissen



Checker108
12.03.2010, 18:07
Hallo

Wir haben einen Roboter mit 2 Rädern, die so angebaut sind, dass der Roboter mit ihnen seitlich fahren kann. Links und rechts sind 2 Ultraschallsensoren. Der Roboter soll in einem Raum von den Maßen 120x60cm immer in der Mitte der 120 cm sein. Auf einer der beiden Seiten kann jedoch ein Hindernis sein, wir müssten also im Programm irgendwie herasufinden welcher Ultraschallsensor blockiert ist und welcher korrekte Werte ausgibt. Das soll zu allem Überfluss auch noch die ganze Zeit und möglichst schnell passieren.

Hat jemand eine Idee wie man das machen könnte?

P.S: Ich will keine fertigen Programmcodes sondern nur Ansätze wie man es machen könnte.

Gruß Checker

rolber
12.03.2010, 18:43
Hallo !

Aus deiner Beschreibung werde ich nicht so richtig Schlau !
Mach doch mal eine kleine Skizze, aus der ersichtlich wird, wie die Räder angebracht sind und wo sich in Fahrtrichtung die Hindernisse und die Sensoren befinden.

Roland

Richard
12.03.2010, 18:49
Irgendwie kann ich mir nach Der Beschreibung nicht
"Bildlich" vorstellen wie das aussehen soll? Mit 2 Rädern
seitlich fahren OK. und wie fährt das Ding dann vor/zurück?

Um in der Mitte zu Bleiben reicht auch auf einer Seite ein
Sensor der das Teil auf 60 cm von der/einer Wand hält...
Wo sollen Hindernisse herkommen wenn nur Die Mitte gehalten
wird und es kein Vor/zurück gibt?

Mach besser ein Bild oder eine Zeichnung um das zu Erklären.

Gruß Richard

Checker108
13.03.2010, 10:02
Hier ist eine Skizze:

Das Hindernis kann aber auch auf der rechten Seite stehen und daher muss der Robo i-wie rausfinden welcher Ultraschall die Wand sieht und welcher das Hindernis.

@Richard: Momentan muss er nicht vorwärtsfahren, später kriegt er evtl. Omniwheels.

Edit: Die Hindernisse kommen daher, dass die Hindernisse auch robos sind und sich mit Omniwheel bewegen können. Unser Robo soll das später auch machen aber immer wieder die ausgangsposition finden, trotz hindernissen im US. https://www.roboternetz.de/phpBB2/download.php?id=18764

Richard
13.03.2010, 10:27
Hallo

Wir haben einen Roboter mit 2 Rädern, die so angebaut sind, dass der Roboter mit ihnen seitlich fahren kann. Links und rechts sind 2 Ultraschallsensoren. Der Roboter soll in einem Raum von den Maßen 120x60cm immer in der Mitte der 120 cm sein. Auf einer der beiden Seiten kann jedoch ein Hindernis sein, wir müssten also im Programm irgendwie herasufinden welcher Ultraschallsensor blockiert ist und welcher korrekte Werte ausgibt.

Da der Bereich klar ist, sollten beide Sensoren einen Abstand von
60 cm - 1/2 Botbreite ausgeben, zeigt eine Seite weniger an ist ein
Hindernis vorhanden. Zeigt eine Seite mehr als 60cm - 1/2 Botbreite an,
befindet sich der Bot nicht mehr in der Mitte.

Mit einem Timer IRQ kann man die Abfrage der Sensoren z.B. alle
100 ms in einer ISR machen und die ermittelten Werte dann in der
Hauptroutine auswerten.

Das dürfte nicht allzu schwer sein, ob jetzt US oder IR Sensoren
besser geeignet sind? Ich habe beide nicht im Einsatz schaut doch
mal ins RN Wissen, da sind sicher Beispiele zu finden. :-) Ich würde
aber eher zu IR greifen, wenn US Reflektiert (Echo) und vom "falschen"
Empfänger aufgefangen wird.....ansonsten halt etwas zwischen den
Abfrage Links/Rechts warten.

Gruß Richard

Checker108
13.03.2010, 10:39
Hi


Zeigt eine Seite mehr als 60cm - 1/2 Botbreite an,
befindet sich der Bot nicht mehr in der Mitte.


Aber wie mache ich es, dass der Robo wieder in die Mitte findet? Weil wenn ich den größeren abfrage funzt es ja nicht.

Searcher
13.03.2010, 11:31
Weil wenn ich den größeren abfrage funzt es ja nicht
Wieso nicht?

Der Robo muß doch nur wieder soweit fahren, bis der Sensor wieder von >60cm bis =60cm mißt.

Gruß
Searcher

ranke
13.03.2010, 11:46
Solange ein Hindernis im Messbereich ist, kann das festgestellt werden, man weiss aber nicht auf welcher Seite das Hindernis ist. Die Mitte kann also nicht eindeutig gefunden werden. In dem Moment, wo kein Hindernis da ist, kann die Mitte gefunden werden. Ab dann ist die Strategie eigentlich klar: nicht mehr bewegen!

Checker108
13.03.2010, 11:48
Hi

Skizze:
https://www.roboternetz.de/phpBB2/files/skizze3.png


Wenn ich jetzt den linken (größeren) abfrage steht er ja zu weit rechts.

Searcher
13.03.2010, 11:54
Vielleicht reicht es dann, wenn man sich zusätzlich merkt, in welche Richtung man gefahren ist. Ausgehend davon, daß der Robo beim Einschalten in der Mitte sitzt und noch kein Hindernis da ist.

Gruß
Searcher

Richard
13.03.2010, 15:28
Hi


Zeigt eine Seite mehr als 60cm - 1/2 Botbreite an,
befindet sich der Bot nicht mehr in der Mitte.


Aber wie mache ich es, dass der Robo wieder in die Mitte findet? Weil wenn ich den größeren abfrage funzt es ja nicht.

Warum nicht? Wenn der Abstand > 60cm ist, einfach auf die Wand
zu fahren bis es wieder passt, wo ist das Problem?

Ärger gibt es wenn auf beiden Seiten ein Hindernis ist, dann hat
man keine Referenz mehr und beide Seiten sind < 60 cm. Dann
bleibt nur noch (um eine Kollision zu vermeiden) der Bot hält sich
in der Mitte zwischen den Hindernissen, gleicher Abstand auf beiden
Seiten. Das ist dann zwar nicht die reale Mitte im "Spielfeld", aber
der sicherste Weg zwischen den Hindernissen.

Der Fall den Du in der Zeichnung schilderst, darf/kann wenn richtig
programmiert wird auch nicht vorkommen. Wenn alle (bleiben wir mal
bei den 100ms) eine Abweichung festgestellt wird und in "Echtzeit"
gegen geregelt wird, bleibt der Bot quasi in der Mitte. :-)

Das bedeutet das 60 cm die Referenz für die Mitte ist, alles unter 60cm
wird als Hindernis gewertet. Alles über 60 cm als Abweichung von der
Mitte.

Gruß Richard

Checker108
13.03.2010, 20:04
Hi

Welchen US soll ich denn dann aber abfragen? Weil wenn ich den gößeren abfrage stimmt die Position ja später nicht. Und wenn ich den kleineren abfrage dann funktioniert es wieder nicht wenn er in der Mitte steht. ](*,)

Richard
14.03.2010, 06:55
Du musst natürlich beide Sensoren permanent abfragen, es ist ja nicht
bekannt auf welcher Seite ein Hindernis auftaucht. Wir reden hier von
"ms" = Millisekunden 100 ms sind 0,1 Sekunde, der Bot wird Optisch
"für Dich Mensch" immer "genau" in der Mitte bleiben. Jedenfalls wenn
die Motorregelung ordentlich programmiert ist. Ich würde das einfach
einmal aufbauen und Planung mit Realverhalten vergleichen. Alleine schon
um herauszufinden wie genau die Sensoren den Abstand überhaupt
messen können. Dann eine Wand verschieben und den Bot dazu bringen
immer einen Abstand von 60 cm zu Halten. Erst wenn das klappt kann
eine zusätzliche Routine für die Hindernis Erkennung dazu geschrieben
werden.

Gruß Richard

Searcher
14.03.2010, 09:17
Ich hab auch keine Lösung gefunden, bei dem der Robo durch einfaches Messen wieder zur Mitte zurückfindet.

Wie Richard schreibt, müssen die Sensoren ja sowieso permanent abgefragt werden.

Dann brauchen zu Hinderniserkennung doch eigentlich nur die aktuellen Meßwerte mit den vorher gemessenen verglichen zu werden. Auf der Seite, auf der sich die Werte drastisch verringert haben, ist das Hindernis aufgetaucht; der Sensor auf der anderen Seite wird dann zur Abstandsmessung für die Mitte verwendet.

Auch wenn der Robo sich mal aus der Mitte fortbewegt, wird eine schnellere Änderung der Meßwerte auf der Seite auftreten, auf der das Hindernis auftaucht. Das kann man auch durch ständigen Vergleich der aktuellen Meßwerte beider Sensoren mit vorher gemessenen Werten feststellen.

Ob überhaupt (noch) ein Hindernis da ist kann ja durch einfache Addition der Messungen festgestellt werden. Die muß ja ohne Hindernis die Raumbreite von 120cm ergeben (abgesehen von Meßungenauigkeiten und Abstand der Sensoren voneinander).

Oder? :-k


Gruß
Searcher

Checker108
14.03.2010, 13:59
Ich hab es jetzt so ungefähr hinbekommen. Danke für die Antworten.
Wenns Probleme gibt melde ich mich wieder.

P.S: Ich weiß was ms sind. ;-)