Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Software zur Kartenerstellung
Da ich plane, mit einem Roboter mein Appartment erkunden zu lassen, bin ich auf der Suche nach Software bzw. wenn sie nicht verfuegbar ist, werde ich sowas wohl selbst schreiben muessen *alte-C-Kenntnisse-herauskram*
Problem ist folgendes: ein Roboter vorausgesetzt, den man Steuern kann und der soetwas wie ein Wegstreckenmesser hat als auch ein Hindernis-Sensor soll durch die Wohnung fahren. Jedesmal wenn er an ein Hindernis stoesst soll er ausweichen bzw. die Richtung aendern. Was ich brauche ist eine Software, die aus diesen Informationen (zurueckgelegter Weg) die Hindernisse auf einer 2D-Karte eintraegt und so nach und nach ein komplettes Kartenabbild der Wohnung darstellt.
Hat jemand Ideen, wie ich daran gehen koennte?
LLiinnuuxx
28.07.2004, 17:03
Kann kein C aber ich würde sagen du machste ein Array of arrays
Als eine art bild array 1 mit 10000 arrays und darin arrays mit 1000
true and false werten so kannst du deine Wohnung in eine Art bild (10000*1000 pixel) Verwandel; Nach eine Bestimmten strecke in eine Bestimmte Richtung wird auf den nächsten "pixel" übergegangen nacher kannst du die Pixel die am Rand sind Verbinden und den Rest weg lassen!!!
Es entsteht eine Karte mit x Graden!!!
Schreibe mir rühig mal deine ansätze per pn wie gesagt kann zwar kein C deswegen besser nur die Gedankengänge aber ich habe mal was ähnliches für meinen zur Zeit im bau befindlichen Roboter vorgehabt!
Könnten ein Zweckgemeinschaft oder sowas gründen!
LLiinnuuxx
28.07.2004, 17:04
Du kannst die Pixel anzahl auch verändern und so die Genauigkeit einstellen.
Es geht auch ein Bild mit mehr oder wenigern Pixel.
LLiinnuuxx
LLiinnuuxx
28.07.2004, 17:15
Entschuldigung das ich soviele Einträge schreibe aber mir ist eingefallen das mir der Gast gar keine pn schreiben kann Also entweder ICQ oder E-Mail!!!
Entschuldigung wenn du falsche Hoffnungen hattest als du gesehen hast das drei Antworten da sind!!!
:roll:
Registrieren ist auch gut da ofenbaren sich dir viel mehr Möglichkeiten!!!!
synczero
28.07.2004, 20:23
Hab mich jetzt auch registriert und bin auch per Mail erreichbar.
Also der Ansatz hört sich schonmal nicht schlecht an, ist wohl nur sehr speicherintensiv. Ich hab mir nämlich auch noch überlegt, daß wenn man ein Array hat von sovielen Werte, daß es noch sehr praktisch wäre, die Uhrzeit und Datum festzuhalten, wann diese Wand erreicht wurde. So könnte der Robby nämlich unterscheiden, ob es sich um eine feste Wand handelt oder nur ein Möbelstück bzw. ein Mensch, der gerade im Weg war. Das ließe sich im Bild später anders markieren. Also wenn er die "Wand" die er erreicht hat beim nächsten Gang durch die Wohnung nicht mehr findet -> einfach als "vorübergehend" markieren.
LLiinnuuxx
28.07.2004, 20:34
HI,
Ich habe ja auch schon überlegt und das mit dem speicher ist echt wichtig !
Man könnte anders Verfahren: (Weniger speicher mehr Logik)
Es werden alle Anstoßpunkte zusammen zu einem N-Eck gefasst.
Dazu wird dann die Graden gleichung in einem Virtuellen Koordinaten System ermittel!!
So würde später nur für jede Wand in einem Logbuch eine Graden gleichung Stehen!!!
Wenn Fragen zur Berechnung frag mich habe mich ausführlich damit beschäftigt!!!
LLiinnuuxx
28.07.2004, 20:38
Das Problem liegt allerdingst in der Abweichungs erlaubnis der Positionserkennung:
Gehört der Punkt noch zu dieser Graden? Kann er also unberücksichtigt
bleiben
Oder muss ich evtl. eine neue Grade anlegen?
Welcher 2. Punkt gehört noch zu der neuen Grade?
Aber ich denke wenn der Roboter deine Wohnung lange genug durfahren hat wird alles doch detailierter!!
Bonne chance!!
synczero
29.07.2004, 07:25
Ich denke auch, dass es guenstiger waere, auf Vektoren zu setzen und jede Wand die entdeckt wurde zunaechst als eine Gerade darzustellen. Ich stelle es mir so vor, dass es nach folgendem Schema ablaufen koennte:
- Roboter wird in die Mitte des Raumes gestellt
- er laeuft geradlinig zur naechsten Wand
- wenn Wand erreicht, traegt er den ersten Punkt in der Karte ein
- Roboter bewegt sich zurueck
- laeuft naechsten Wandpunkt an
- alle Punkte werden verbunden
So...falsch sich nun naemlich z. B. mal sowas ergibt, dass eine Wandecke drin ist und der Roboter trotzdem einfach die Punkte verbunden hat, dann ist - erstmal - in der Karte die Ecke nicht zu sehen...allerdings sind ja nur die Punkte gesichert...ALSO: der Roboter erkundet das "dazwischenliegende" Gebiet und fuegt weitere Punkte ein. So entsteht dann eine immer genauer Verbindungslinie von vielen Punkten.
Problem koennten Gegenstaende machen, die nicht mit der Wand verbunden sind. Dies muss erkannt werden und in einen neuen Polygonzug aufgespalten werden.
Matthias
29.07.2004, 10:13
Hi, hab grad den Thread gelesen, und da mir in ein paar wochen das gleiche Problem droht, schliess ich euch mal an:
Also die Karthographierungssytheme, die ich bisher gesehen hab, hatten meistens einen Hosterechner, der über genügend Speicherplatz verfügte, aber ich glaube das das hier nicht erwünscht ist, also ist die idee mit den Punkten schon jut. Am besten wär's, wenn der Robby zuerst die groben Umrisse, also nur die Wände, abfährt und immer dort wo er wenden muss (also in den ecken) die Koordinaten speichert. Danach könnte er die erste reihe beenden und das per zufallsprinzip durch den Raum Schlendern beginnen. Wenn er nun auf einen Gegenstand trifft, dreht er sich nach recht (oder links) und probiert mit der Kante auf eine Linie zu kommen(2 Sharps). Danach kann er den Gegenstand abfahren, also probieren ihn immer im definierten Abstand Links(oder Rechts) von sich zu halten und macht wie vorhin die punkte. Wenn er an seiner ausgangsposition angekommen ist beendet er diese Reihe von Punkten und zieht weiter...
Ich wuerde gerne mal ein paar Ideen durchprobieren, hab leider keinen Robot mit den passenden Sensoren. Also, ich denke mal, ich werde anfangen, ein kleines Programm zu schreiben, dass die Bewegung steuern und die Informationen der Sensoren bearbeiten kann.
Mit einer Standardschnittstelle koennte jeder dann die kleinen Programmaufrufe einbauen, die noetig sind, um dem Robby zu sagen: linksdrehen (x Grad), rechtsdrehen (xGrad), vorwaerts (x Meter), rueckwaerts (x Meter) und die Sensoren sollten einfach die Entfernung in Metern zum Hindernis zurueckgeben. Das sollte schonmal reichen, um abstrakt die Steuerung zu bauen.
NumberFive
30.07.2004, 10:11
so ähnliche ideenen haben wir auch vielleicht guckt ihr mal vorbei.
jn5.mindrobots.de
StoneColdCrazy
30.07.2004, 10:45
Plane fast das gleich nur nicht mit einem Raum sondern mehreren. Dabei versuche ich gerade eine Speicherlösung zu finden und fummle hier mit einem USB SD-Kartenlesegerät rum.... noch habe ich keine optimale Lösung dafür... sobald ich das habe hätte man genug Speicher zum aufzeichnen.
Meine Idee ist etwas andenders. Unzwar anhand von sensoren messe ich entfernungen von hindernissen ohne sie erst berühren zu müssen. Daraus ergeben sich beim Starten Linien die einen Umriss der Fläche bilden die "befahrbar" ist. Der Roboter geht zurerst einmal immer davon aus das ein Raum 4 Ecken hat. Wenn sich nun ein Hinderniss, zB. ein schrank, im Raum befinden muss er dies genauer untersuchen. Z.B.:
http://www.visions-eleven.com/StoneColdCrazy/Vorstellung.jpg
Der Blaue Punkt bildet mögliche Positionen des Roboters die er abfährt. In der ersten Spalte ist es ein gewöhnlicher Raum den er ohne bewegen erfassen kann. In der 2. Spalte ist jedoch zB ein Schrank im Weg. Fazit ergibt sich aus der Startposition vorerst das 2 Bild. Da dies aber nun nicht einem Raum mit 4 Ecken entspricht muss er genauer nachsehen. Zu dem muss er noch bis an die Wand fahren um auszuschließen das es sich nicht um einen Gegenstand handelt der mitten im Raum steht.
Das Ganze könnte man dann in einem Raster machen. Jedoch wäre dazu Speicher notwendig. Man nehem eine 1000x1000 Pixel große Fläche. Dann sagen wir mal das jeder einzelne Schrit eines Schrittmotors einem Pixel entspricht. Sobald also das signal für einen erfolgreichen Schritt abgeschlossen ist verändert er zB das Pixel von Weiss zu Schwarz. Um das zu Testen will ich demnächst anfangen mit einer Kabelverbindung direkt zwischen PC und Bot zu arbeiten. Dachte dann auch schon an funk was auch möglich wäre. Aber wie gesagt versuche ich gerade eine SD-Karte mit einem ATMEL chipsatz zu beschreiben. Wennn das ginge bräuchte man dann nur noch die Karte raus ziehen und auslesen.
Matthias
30.07.2004, 12:30
1000x1000 ist gut... In diesem Thread wird ja gerade das Karthographieren mit möglichst wenig Speicher Diskutiert... Ich könnte meine C-Control 2.0 zwar auf bis zu 8x64k hochpumpen, aber das wäre zimlich kostspielig, da ich nur das Conradmodul für 12€ kaufen könnte, weil Conrad mal wieder so asi war und irgendwelche Teile die ich nur in Japan bestellen kannt verwendet hat... Sonst würde ich's nartürlich machen...
Wie willst du USB Simulieren? Wäre es nicht einfacher, die Karte direkt anzusprechen? Oder vielleicht direkt nen 1MB-e² nehmen?
Obwohl, jetzt hab ich wieder ne neue Anschauung des ganzen: Am besten wäre nen e²prom, dann würden die Daten nicht beim Resetten verloren gehen... Ich guck ma nach günstigen Möglichkeiten...
Gotta get away from this stone cold floor.
Crazy, stone cold crazy, you know.
synczero
30.07.2004, 13:30
Also ich schlage vor, den Speicher auf keinen Fall im Roboter zu belassen, sondern die Festplatte eines angeschlossenen PCs zu nutzen. Vorteil waere auch, dass man dann aufwendigere Berechnungen dort durchfuehren kann und auch eventuell eine Nachbearbeitung der gesammelten Daten (so liessen sich die Daten von mehreren Durchlaeufen mitteln und Fehlerquellen ausmerzen).
Matthias
30.07.2004, 13:59
Dazu brauch man aber ne Funkverbindung und ein Programm auf'm rechner, dass warscheinlich auch noch massig Fehlerquellen aufwerfen wird.
synczero
30.07.2004, 14:31
Die Funkverbindung schon, das Programm auf dem Rechner aber bestimmt nicht ganz so viel. Wie gesagt, da ich leider keinen Roboter habe, werde ich erstmal ein wenig mit ein paar simulierten Daten spielen. Wie das Programm dann aussehen wird, wird immer klarer in meinem Kopf. Und zwar werde ich wirklich ein 3-dimensionales Netz aufspannen und dann die Sensordaten einzeichnen. Allerdings nicht fest, sondern mit einer bestimmten Wahrscheinlichkeit.
Man kann sich das so vorstellen:
- wenn der Roboter eingeschaltet wird bzw. das Programm angestartet wird dann bekomme ich direkt eine Sensorinformation (z. B. Entfernung zum Hindernis 3 Meter)
- Der Roboter wird im Zentrum eines 3D-Drahtgitternetzes dargestellt
- In 3 Meter Entfernung wird ein Teil einer Kugelschale dargestellt (Problem ist nämlich mit den Sensoren, daß die Entfernung ja nicht direkt voraus gemessen sein muss sondern auch etwas abseits stehen kann...ganz abhängig vom Sensor)
- Roboter bewegt sich (z. B. einen Meter vorwärts)
- erneute Sensorinformation wird wieder als Kugelschale eingezeichnet...allerdings liegt diese ja nur an der Stelle mit der anderen übereinander, die auch tatsächlich die Richtung zum Hindernis darstellt
- da ich mit Wahrscheinlichkeiten arbeite, müßte ich also nur die Wahrscheinlichkeiten der beiden überlappenden Kugelschalen addieren (dort wo sie übereinander liegen wird die Wahrscheinlichkeit hoeher, dass dort ein Hindernis ist, dort wo kein Hindernis ist, wird auch die Wahrscheinlichkeit immer niedriger, weil es durch immer weitere Messungen weniger bestätigt wird
- so kann man also grobe Intoleranzen von Sensoren langsam ausmerzen
...
so nun kann ja aber auch die zurückgelegte Strecke mit dem Roboter (die Wegstreckenmessung) ungenau sein...heisst ich weiß nicht mal, wie weit genau die Entfernung eines Hindernisses ist, geschweige denn genau seine Richtung, ich weiß auch nicht, wie weit ich gefahren bin...
also das ganze weiter: nicht mehr nur Kugelschalen nehmen, die dünn sind, sind eine dickere Wandung haben...irgendwann mittelt sich dann nämlich auch durch viele Bewegungen die Ungenauigkeit des Entfernungsmesser raus.
Wenn ich hier irgendwie falsch liege, sage man mir bescheid :-) bin gerne auf Diskussionen gespannt.
Achja...ein Algorithmus muß natürlich auch her (siehe Beitrag oben von StoneColdCrazy), der den Roboter steuert, so daß er nicht ziellos erkundet. Aber ich habe ja erstmal nur die Auswertung der Sensordaten beschrieben, die intelligente Steuerung muß man sich noch ausdenken. Denke aber, daß es darauf hinauslaufen wird, daß der Roboter erstmal davon ausgeht, alle Objekte wären Wände und diese Theorie dann auch versucht zu bestätigen (testen, ob das Objekt keinen Durchgang mehr erlaubt, daß heißt mit der Wand verbunden ist).
Matthias
30.07.2004, 15:01
Eine intelligente Steuerung ist (meiner meinung nach) nur dann effektiv, wenn man die Aussenumrisse des Terrains kennt. Also müsste man zuerst diese feststellen (abfahren), um danach nach Objekten im Raum zu suchen. Sorum währ's auch viel praktischer, da die Sache höherer Priorität vor der Nidrigererer (erererereror ;-) abgearbeitet werden würde.
Hallo,
verfolge den Thread schon einige Zeit und habe eine Möglichkeit zum Entfernungsmessen gesehen.
Das ganze war bei RS-Components o. Conrad, da gibts Schrittmotoren die pro realer Umdrehung X Pulse abgeben -> die dann zählen -> über Radumfang Entfernung berechnen
JohnMcClane
19.08.2004, 22:28
kleiner Tipp über diese Thema gibt es ganze Diplomarbeiten und sonstige Forschungsprojekt. Das Problem an sich ist nicht die Aufnahme der Koordinaten oder die Speicherung. vielmehr ergeben sich zwei große Probleme:
1. Die Datenverarbeitung, es reicht nicht viele Punkt zu haben, man muss ein gutes Programm schreiben, welches aus diesen Punkten ein vernünftiges Bild macht.
2. und noch viel schlimmer. DIE UNGENAUIGKEIT Wenn euer Roboter zehmal die Richtung wechselt habt Ihr ne super große Ungenauigkeit drin. Diese Ungenauigkeit könnt ihr nur mit einem "neuronalen" Netz(ich glaube es heißt so) lösen. Hört sich schlimmer an als es ist:
Also es reicht nicht nur Abstandssensoren und Drehwinkel zu Orientierung zu benutzen, es muss auch noch weitere Daten geben, wie zum Beispiel eine schon einprogrammierte Karte oder Videobilder.... etc Mit anderen Worten es muss mehrere Informationsquellen für die Position geben, damit die Ungenauigkeiten ausgebügelt werden. Ich interessiere mich auch dafür nur ich glaube und weiß, dass es sehr sehr schwer zu programmieren ist...
Ich hab mir die Idee auch schon überlegt als Diplomarbeit an meiner Schule:
Wie wäre es einen runden roboter mit, naja ich sage mal 36 tastsensoren zu verwenden der bei berührung keinen punkt sondern eine gerade normal auf den sensor macht
=> geraden schneiden
=> bild
wird wohl nur mit pc funktionieren!
problem ist nur wieder die bestimmung der position.
LLiinnuuxx
14.09.2004, 20:09
Ja dass wird wohl so sein!!!
Also meine Maturagruppe wird nen Putze Roboter bauen :-D
Also Jungs Kompass Modul, damit könts Position bestimmen
mein Problem ist, woher weis der Roboter ob Wand oder HInderniss ? da grübel ich noch drann 8-[
JohnMcClane
18.09.2004, 22:49
Mit nem Kompassmodul kann man doch nur die Richtung bestimmen, oder steh ich jetzt auf dem Schlauch?
Ja man weis die Richtung
und wenn du weist wielange/wieweit du dich fortbewegst
hast do schon Vektoren
:-k
JohnMcClane
19.09.2004, 17:31
Ich studiere Maschinenbau... und hatte schon einiges im Thema höherer Mathematik und Koordinatenberechnung...das dazu..
Nur mit der Zeit und dem Weg fangen die Probleme doch an, es geht darum ein Navigationssyytem zu entwerfen, dessen Genauigkeit unabhängig von dem zurückgelegten Weg ist! Also eine maximale Abweichung bestimmen.
dann bleibt nurnoch GPS
oder den Weg genau mitmessen
oder man fängt in einer ecke sucht die nächste usw. und die ecken immer als referenzpunkte nehmen => fehler eliminieren!
und woher weist den unterschied zwischen ende der Wand und
Gegenstand an der wand ?
die software müsste die ecken auch vernachlässigen können wenn sie ausserhalb einer tolleranz ist.
z.b.:
man hat den abstand zwischen zwei ecken, der robot fährt erneut die länge ab und wenn nicht inerhalb einer gewissen toleranz (welche den schlupf etc. berücksichtigt) nicht wieder die ecke kommt bzw. sie kommt vorher dann ist entweder ne neue ecke da oder es ist ne alte plötzlich weg.
sorry... nicht angemeldet!
Ich Arbeite Gerade an nem Putzroboter
er muss lernfähig werden,
einfach bei hindernissen eine wahrscheinlichkeit in % einbauen, dann wenn der robo des erste mal des hinderniss sieht, dann ist noch 50 % wahrscheinlichkeit das es (bewegliches) hinterniss oder wand ist.
wenn der robo dann am nächsten tag/stunde (vllt. sogar minute) wieder mal vorbei kommt,
auf den koordinaten der karte in seinem speicher ein hinderniss hat, seine sensoren aber nichts erkennen können, dann wird diese hindernisswahrscheinlichkeit gesenkt (z.b bei TÜREN *wichtig*) also ist dann nur noch ~40%...
wenn des nächste mal das hinderniss wieder da ist, dann wird diese wahrscheinlichkeit dementsprechend gesteigert.
das wär mein ansatz.
-poke
Ich arbeite grad " nebenher" an sowas ähnlichem, und hab meinen Bot mit ner GPS- MAUS ausgerüstet, die über USB- Funk mit meinem Rechner verbunden ist.
Das gleiche über RS323 mit dem AVR. Wär doch ne Möglichkeit. Ist allerdings leicht ungenau ( Genauigkeit auf ca. 5 - 10 cm maximal ) in kleinen Räumen also weniger zu empfehlen, in normalen bis größeren bis hin u ner ganzen Wohnung allerdings schon zu gebrauchen
( ich weis nur noch nicht, wie ich die Sensordaten und die der Maus in ne KARTE eintrag :Haue )
Michi
Johannes
19.10.2004, 17:51
>Genauigkeit auf ca. 5 - 10 cm
Was für ein Modul hast du da genau?
Gruß
Johannes
ne normale Funk- Gps mas, die Ihre Signale über Ps2 auf den Rechner überträgt. dort wird das Signal dann ausgewertet. Ist so untgenau, weil sie offiiell nem Freund gehört. der hat da Cola drübergekippt. Jetzt funzt sie nimmer so gut ( manchmal sendet sie absoluten schrott) und dasshalb hat er sie mir geschenkt... Bonze halt ... Ich weis selbst nicht, was genau kaput ist ...
Am Rechner wird die Mausbewegung dann mit nem Programm ausgewertet, das diese "Schrottwerte erkennt (z.b. ist es unmöglich dass der bot auf einmal überschall fährt :-b ) und beabsichtigt "übersieht"... (so weit bin ich aber noch nicht... )
Man muss halt , wärend der Bot fährt, auf ne Maus verzichten :cry:
MichiE
Also ich denke auch, dass ein kompassmodul sehr sinvoll wäre, damit kann man schonmal den Fehler der bei Drehungen entsteht minimieren. Dennoch wird nach entsprechender Zeit ein Fehler auftreten, deshalb wäre es vielleicht sinnvoll mit Wahrscheinlichkeiten zu arbeiten.
Vielleicht wäre aber auch eine Art Wiedererkennung zu Prositionsbestimmung möglich, also wenn er eine Wnad findet, und sie abfährt, und sie eine bestimmte größe Errreicht, wäre ja vielleicht gut, diese als Fixpunkt zu nehmen, und alle weiteren Messungen von dort auszuführen.
Roboter startet, sucht sich Fixpunkt (gerade etc.), fährt weiter misst, kehrt zurück richtet sich neu aus etc., vielleicht könnte man sogar beim zurückfahren zum Fixpunnkt den Fehler errechnen, also wenn Robby jetzt hier eine Wand (Fixpunkt) erwartet, diese aber erst 10 cm später kommt, könnte er eine 'Sicherheit' zu den vorher gesammelten Daten geben.
Damit die ganze Geschihte mit den Fixpunkten einfacher wird, könnte man ja auch sagen, dass Robby immer in einer Zimmerecke starten soll!
Zur Datenspeicherung, könnte man da nicht evtl. SD, oder MMC, karten nehmen? Also mit den AVRs klappt die Ansteuerung ja anscheinend, ich weiß allerdings nciht, wie aufwendig das ist.
Die Pixelvariante ist vermutlich nciht die beste, denn wenn abweichungen auftreten, ergibts das ein sehr unklares BIld, besser wäre vielleicht, dass Robby, wenn er in der Ecke ausgesezt wird erstmal nur eine Wandverfolgung macht, bis er wieder die Ausgangsecke erreicht, rein theoretisch sollte sich das mit Hilfe der ZUrückgelgeten Wegstrecke und des Kompasses errechen lassen.
Ja, ich quatsche zeimlich lang, aber habe ne gute Idee:
Wen Robby eine Wans findet, richtet er sich parallel dazu aus, vielleicht mit 2 seitlichen Abstandssensoren, dann erstellt er eine Gerade, die mit Hilfe des Kompasses sehr genau ausgerichtet sein sollte.
MFG Moritz
Sorry, hab die 2. Seite nicht gesehen :oops:
robbenjamin
12.11.2004, 08:46
kann man da nicht ne PC-MAUS nehmen (optisch)?
Das wurde hier schon diekutiert:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=4299&highlight=positionsbestimmung+maus
man muss halt besonders drauf achten, wo man eine Maus anbringt, sie darf auf keinen fall am Drehpunkt des Robos sein.
MFG Moritz
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.