PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Projekt: RP6 mit Bluetooth und Tracking



Ingo1988
25.07.2011, 18:25
Hey,
ich wollte euch einmal mein derzeitiges Projekt vorstellen und freue mich über konstruktives Feedback;)

Auf dem RP6:
Hier ist ein Programm, welches alle aufgenommenen Sensordaten an den PC sendet. Und das vom PC Befehle erhält, die der RP6 abarbeitet. Somit ist der Vorteil, dass die begrenzten Kapazitäten nicht zur Auswertung verwendet werden müssen und diese auf den PC ausgelagert werden.

Auf dem PC:
Der RP6 kann per Pfeiltasten gesteuert werden. Desweiteren ist ein einfaches Programm zur automatischen Navigationvorhanden, bei dem der RP6 zur Zeit einfach geradeaus fährt und erkannten Hindernissen ausweicht. (Die Erkennung findet auf dem PC statt)
Desweiteres ist ein einfaches Trackingsystem implementiert, welches die Route des RP6 nachzeichnet.
Das Programm auf dem PC ist in Java geschrieben.

Die Kommunikation zwischen PC und RP6 findet über ein BTM statt. Desweiteren verfügt der RP6 über einen SRF02 und einer Kamera, die das Bild an einen Fernseher überträgt.

Hier sind 2 Videos zur Verdeutlichung der Funktionen. Die Videos sind leider sehr verwackelt, da ich kein Stativ zur Hand hatte, aber ich denke es wird deutlich was gemeint ist.

Tracking System:
http://www.youtube.com/watch?v=wE3nhztBRLc

RP6 im Betrieb:
http://www.youtube.com/watch?v=CgJV1RNLZb0



Ziele für die Zukunft:

auf der Karte mit dem Trackingsystem sollen ebenfalls Hindernisse markiert werden.
Der SRF02 soll zusätzlich dazu eingesetzt werden eine Karte zu erstellen.
Der automatische Modus soll weiter ausgebaut werden.
Der RP6 soll auf Befehl wieder an die Startstelle fahren.
Der RP6 soll auf ökonmischten Weg zu bestimmten Koordinaten fahren.
Das ganze soll ebenfalls auf Android realisiert werden.


Über Rückmeldungen freue ich mich!

Lieben Gruß

ttom
26.07.2011, 07:57
Hallo,

betreibe meinen RP6 auch mit BTM-Modul, nutze im Moment noch RP6RemoteControl, suche aber noch nach Alternativen, kann man das mal testen ? Mein RP6 ist mit GPS und Kompass ausgestattet(Elektor-Projekt), bin mir noch etwas unklar, was die Steuerung angeht....

T.

Ingo1988
26.07.2011, 15:47
klar kann ich machen... dann schick am besten deine mail adresse per pn;)
dazu ist allerdings zu sagen, dass das Programm auf meinen RP6 angepasst ist und nicht dazu gedacht ist das mit anderer Hardware zu verwenden;)

Lieben Gruß

fabqu
27.07.2011, 22:07
:D
Genau das hatte ich mir auch schon vorgenommen. Aber klasse, dass es endlich jemand umgesetzt hat!
Meine Kenntnisse reichen da noch nicht und meine BTM-Adapter für den Funk kommen erst die nächsten Tage.

Ich fänds super, wenn du noch a bissl was drüber erzählst...?

Grüße

Ingo1988
28.07.2011, 14:58
Hey,
das freut mich, dass es euch gefällt. Wenn ihr fragen zu den Programm oder zu Teilen davon habt könnt ihr diese gerne stellen. Aber ich hab keine Lust einfach blind drauf loszuerzählen;)
also fragen stellen und ich beantworte sie;)

Lieben Gruß

fabqu
28.07.2011, 15:44
Gut...
Wie arbeitest du die Trackingroutine ab?
Nimmst Du einfach die gefahrenen Winkel und Strecken, legst sie in einem Array ab und addierst dann?
Und wenn ja, wie berechnest du dann gefahrene Kurven? Die wären in meinem Gedankenmodell nämlich nicht vorgekommen da (meiner Meinung nach) nicht berechenbar.

Grüße

Ingo1988
28.07.2011, 17:45
Hey,
also die kurven realisiere ich indem ich eine gemittelte Strecke die der Roboter pro Abfrage zyklus fährt ermittle und dann einfach die verschiedenen geograpische Ausrichtungen betrachte. Der Abfragezyklus beträgt 200ms und wenn man genau hinsehen würde man sehen, dass das Trackingsystem keine Kurven zeichnet, sonder vielecke, diese haben allerdings so viele ecken, dass sie einen Kreis schon recht gut annähern.

Und das tracking an sich realisiere ich mit Hilfe der Trigonometrischen Funktionen, in dem ich alle Positionen, an denen der Roboter schon war in eine Arraylist speichere. Die arraylist lasse ich dann als polyline zeichnen!

Bei weiteren Fragen, oder wenn die Antworten noch nicht detailiert genug waren melde dich einfach nochmal;) grad bissl wenig Zeit;)

Lieben Gruß

fabqu
30.07.2011, 14:37
Vielleicht magst Du ja mal eine so erstellte "Karte" reinstellen?
Würd mich interessieren, wie das so aussieht...

lg

Ingo1988
31.07.2011, 20:53
Die Karte funktioniert zur Zeit noch nicht so wie ich es gerne hätte. Aber sobald es funktioniert werde ich hier weiter Bilder posten;) das sollte auch eigt diese Woche noch Möglich sein.

edit: Die Funktionalität der Karte ist jetzt hergestellt, wenn ich es schaffe werde ich Morgen die "Karte" hochladen.

Ingo1988
21.08.2011, 19:37
Hey,
ich bin nachwie vor bei der Entwicklung des Programms, momentan beschäftige ich mich mit der Entwicklung eines Navigationsalgorhytmusses. Die Berechechnung findet auf dem PC statt, also muss die Berechnung nicht besonders Ressourceschonend sein.

Zur Verfügung stehen die Start und Zielkoordinaten, sowie 2 Listen mit Koordinaten. Die eine Koordinatenliste enthält alle Koordinaten der Hindernisse, die sich im befahrbaren Raum befinden. Und die andere Koordinatenliste enthält alle Koordinaten die befahren werden können.
Als ersten Ansatz habe ich mir den Ameisenalgorhtytmus angesehen, allerdings scheint mir dieser für meinen Fall nicht so optimal geeignet, da ich ja keine Routenpunkte habe, sonder nur start und Ziel und halt Felder die befahrbar sind;)

Die Karte ist hierbei eine Rasterkarte.

Ich hoffe auf viele interessante Ansätze.

Lieben Gruß Ingo

danimath
25.08.2011, 18:46
Moin Ingo,

willst Du Robby von einem vorgegebenen Punkt zu einem anderen vorgegebenen Punkt fahren lassen? Und was sind das für Koordinaten? Und wie sieht's mit beinharter Mathematik aus?

Meine erste Idee war, dass es ein Netz von Koordinaten gibt, die hindernisfreie Wege beschreiben. Dann könntest Du sowas wie "kürzester Weg im Graphen" probieren (such mal nach Dijkstra).

Und wie machst Du das mit den "blaue Zähnen" ;)? Sowas würde ich auch gerne noch anbauen, aber da fehlt mir gerade noch das Wissen.

viele Grüße
Andreas

Ingo1988
25.08.2011, 20:07
Die Umsetzung von Bluetooth is eigentlich relativ einfach;)
Also zur Zeit habe ich eine Liste von Koordinaten (10cm x 10cm Raster) die der Roboter befahren kann. und am liebsten würde ich jetzt aus der Liste mit verfügbaren Koordinaten den kürzsten Weg berechnen. Somit habe ich im Prinzip nur einen Start und einen Endpunkt, ich weiß allerdings nicht so recht wie ich das jetzt am geschicktesten umsetzen kann. weil ich ja nicht einfach ne liste von routenpunkten hab. diese werden ja im prinzip durch die hindernisse vorgegeben...

Ich hoffe ihr könnt mir irgendwie weiterhelfen!

Lieben Gruß

fabqu
29.08.2011, 17:07
Aber Du hast doch stets einen Kartenpunkt, also die x- und y-Koordinaten und dazu den Winkel, in dem der Robby steht, oder?
Der Winkel wäre nämlich genauso wichtig, wie die Koordinaten.
Ich hab auch mal an sowas gearbeitet, hat sich dann aber im Wind zerschlagen.
Daher bin ich auch scharf drauf, was Du so anstellst :D
Hier mal mein alter Thread:
https://www.roboternetz.de/community/threads/52595-Sensorik-am-RP6-Befehle-und-Allgemeines
Gruß
Fabian

danimath
29.08.2011, 18:30
Moin Ingo,

sorry für die späte Antwort - ich war am Wochenende unterwegs.

Also will ich mal versuchen meine Idee aufzuschreiben:
ACHTUNG: HEFTIGE MATHEMATIK!!!!!!

wenn Du schon ein Gitter mit befahrbaren Koordinaten hast, dann verbinde die benachbarten Punkte mit Linien. Das liefert Dir einen Graphen mit Linien, auf denen Robby von Punkt zu Punkt fahren kann. Mal sehen, ob ich ein Bild hinbekomme:


x-x-x-x-x-x
| | | | | |
x-x-x-x-x-z
| | | | | |
x-x-x-x-x-x
| | | | | |
x-x-x-x-x-x
| | |
x-y-x


y und z sollen später Start und Ziel sein - betrachte sie erstmal als weitere x. Diesen Graph kannst Du z.B. als Adjazenzmatrixspeichern (weil sie nur dünn besetzt ist, speicherst Du sie besser als Array mit Kanten). Wenn Robby nun von y nach z fahren soll, kannst Du mit y und z als Start und Ziel den Dijkstra-Algorithmus starten und erhältst einen kürzesten Weg. Sorry, dass ich die Details gerade nicht genauer hin bekomme - das Ganze liegt schon lange zurück :-k.

Als Erweiterung kannst Du noch die Diagonalen der "Quadrate" hinzunehmen.

Aber das größte Problem wird die genaue Positionsbestimmung und Fahrsteuerung sein.

viele Grüße
Andreas

Ingo1988
30.08.2011, 14:02
ahh das sind schon mal gute tips.
Die werde ich mal in 2 Wochen wenn ich wieder mehr Zeit habe in die Tat umsetzen;) oder zumindest soweit ich es schaffe;)

Lieben Gruß und vielen Dank für die Unterstützung!

Richard
30.08.2011, 17:36
ahh das sind schon mal gute tips.
Die werde ich mal in 2 Wochen wenn ich wieder mehr Zeit habe in die Tat umsetzen;) oder zumindest soweit ich es schaffe;)

Lieben Gruß und vielen Dank für die Unterstützung!

Erst einmal (ich) kann das NICHT, zu wenig Mathematik gelernt . Aber das Problem an sich ähnelt doch einem Autorouter und einen der Besten hat schon vor sehr vielen Jahren ein Herr Bartels (Bartelsrouter) entwickelt. Darüber sollte sich im Netz etwas finden lassen http://www.bartels.de/baedoc/baear_de.htm möglich das man dort etwas "Abkupfern" kann?

Gruß Richard

danimath
31.08.2011, 07:58
Erst einmal (ich) kann das NICHT, zu wenig Mathematik gelernt . Aber das Problem an sich ähnelt doch einem Autorouter und einen der Besten hat schon vor sehr vielen Jahren ein Herr Bartels (Bartelsrouter) entwickelt. Darüber sollte sich im Netz etwas finden lassen http://www.bartels.de/baedoc/baear_de.htm möglich das man dort etwas "Abkupfern" kann?

Gruß Richard

Mehrere Wege führen zum Ziel;). Bei Bartels habe ich nichts zum Algorithmus gefunden; ich vermute das da Dijkstra oder einer der Abwandlungen benutzt wird. Und sooooo schwer ist die Anwendung von Dijkstra auch nicht (die Mathematik dahinter eigentlich auch nicht - aber eben keine Schulmathematik). Auf wikipedia gibt's einen ganz ordentlichen Artikel; und anderswo (http://computer.howstuffworks.com/routing-algorithm3.htm) auch einen Code-Schnipsel.

Ingo: wie bekommst Du die genaue Positionsbestimmung und Fahrtroute hin? Für mich wäre das das größere Problem.

viele Grüße (und keine Angst vor großen Taten :))
Andreas

fabqu
17.12.2011, 15:50
Hi Ingo1988,
wie gehts damit voran?

Hätte auch noch mal zwei fragen hierzu:
1.) DÜrfte ich das mal ausprobieren? Würd mich interessieren, wie das aussieht bei dir.
2.) (könnte mit 1. schon beantwortet werden) Wie genau frägst du gefahrenre Distanzen alle 200ms ab? Im Manual steht, dass man kurze Distanzen (und alle 200ms sind sie denke ich ziemlich kurz) nicht genau abfragen kann, da einfach zu ungenau mit den 36 Zählschritten. Gibts da sowas wie "getDistance" oder so was, das ich noch nicht kenne? Und wie genau war das bei dir? Muss ja nicht auf 1cm ankommen...

Ich mache gerade einiges mit LabView, und da würde ich gerne solch eine Trackingroutine mit hinein bringen!!!
meine eMail würd ich dir mit pn schicken.

Danke dir!
Vg, Fabian