PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie aus einer Ecke kommen



p_mork
01.10.2008, 20:57
Hallo Leute,

also ich habe folgendes Problem: Ein ca. 32cm breiter Roboter soll in einem Raum herumfahren, ohne an irgendetwas anzustoßen. Dazu hat er an den Seiten zwei IR-Distanzsensoren montiert, die nach vorne "sehen". An sich eigentlich ein einfache Sache, doch der Teufel steckt im Detail: wenn der Roboter in eine Ecke fährt, kann unter Umständen passieren, dass er sich dort ständig hin- und herdreht, denn wenn beide Sensoren einen geringen Abstand anzeigen, dreht der Roboter in die Richtung wo er scheinbar am meisten Platz hat. Aufgrund der Umgebung wird jedoch bei der Rotation der Abstand an der Seite kleiner, wo er eigentlich hätte größer werden sollen und umgekehrt. Hier noch ein passendes Bild:
http://www.arips.roboterbastler.de/deadlock.png

Wie kommt man jetzt aus dieser Lage heraus? Eine Möglichkeit, wäre z.B. ihn immer in eine bestimmte Richtung rotieren zu lassen, egal welcher Sensor den geringeren Abstand anzeigt, dies hätte aber zur Folge, dass der Roboter dazu "neigen" würde, in diese Richtung zu fahren. Habt ihr Vorschläge für eine Verhaltensweise, die beide Richtungen gleichermaßen nutzt?

MfG Mark

uwegw
01.10.2008, 21:17
Erst mal sollte der Bot erkennen, dass er festsitzt. Also zb nen Timeout einbauen. Wenn einige Zeit lang nur gedreht und nicht (bzw nur sehr kurz) gefahren wurde, wird eine gesonderte Aktion gestartet (also das Drehen auf eine Richtung beschränkt, oder kurz rückwärts gefahren und abgedreht).

Klingon77
01.10.2008, 22:20
hi,

Wie wäre es, wenn er vor jedem Drehen ein Stück rückwärts fährt?
So wird der Abstand immer größer.

Man könnte ihn auch so programmieren, daß er während der Drehung einen engeren Abstand toleriert.
Beim Aufruf des Unterprogramm´s "Drehen wegen Hindernis" wird die Variable für den Mindestabstand runter gesetzt und beim Verlassen des Unterprogramm´s wieder auf die alten Werte zurückgesetzt.

Bin aber kein Programmierer.
Ist nur aus dem "hohlen Bauch" heraus.

liebe Grüße lieber Nachbar (Hunsrück),

Klingon77

jeffrey
02.10.2008, 14:42
hallo,
ich habe das so gelöst, dass der roboter in die rihtung dreht, wo der größte abstand ist. allerdings wir dies nicht jedes mal neu überprüft, sondern es wird so lange gedreht, bis der roboter nach vorne wieder freie fahrt hat. bei nächsten hindernis wird dann die drehrichtung wieder neu in abhängigkeit vom abstand bestimmt. aber während einer drehung wird die drehrichtung nicht geändert.
mfg jeffrey

oberallgeier
02.10.2008, 15:07
Hallo alle,


... Wie wäre es, wenn er vor jedem Drehen ein Stück rückwärts fährt? ...
... aber während einer drehung wird die drehrichtung nicht geändert ...Bei meinem Dottie (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=390196#390196)habe ich ein ähnliches Problem. Dort messe ich die Entfernungen mit drei nach vorne gefächerten (0°, +45° und - 45°) IR-Sensoren. Besonderheit sind zusätzlich zum genannten Auffächern die schräg von oben nach unten strahlenden Sensoren. Ich mache bei Absturz- oder Crashgefahr eine 60°-Kurve rückwärts: Ein Rad steht, das andere dreht. Es bleibt natürlich die Gefahr, dass man - wenn man das Manöver am Tischrand fährt - über den Tischrand hinaus schwenkt.

Im vorliegenden Fall sehe ich es so, dass man hin und wieder beim Rückwärtsschwenken den Abstand misst und mit - vermutlich geänderten Toleranzen - trotzdem einen Crash verhindert. Hier besteht allerdings die Gefahr der seitlichen Berührung - da wäre ein wenigstens ungefähr arbeitender Sensor (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=38009&highlight=) für den seitlichen Abstand schon ne große Hilfe. Das ist auch der Grund dafür, dass ich die Sensoren etwas schräg-seitlich-strahlend montiert habe.

jeffrey
02.10.2008, 15:51
hi,

Wie wäre es, wenn er vor jedem Drehen ein Stück rückwärts fährt?

ich find das bnicht so sinnvoll. um aus einer ecke herauszu kommen ist das gut. aber das problem ist dann, dass er dass dann ev auch vor einem normalen hindernis, oder an einer wand macht. dann sieht das fahrverhalten sehr unschön aus, weil er dann immer anhält und rückwärts dreht. eine normale kurve um ein hindernis sieht dabei aber wesentlich eleganter aus. rückwärtsfahren würde ich erst, wenn der krurvenradius nicht mehr reicht um um das hindernis herum zu kommen.

mfg jeffrey

p_mork
03.10.2008, 18:22
Hab die Methode von Jeffrey gerade ausprobiert, funktioniert super. danke!

MfG Mark