Wie hast du die Kommunikation zum Roboter umgesetzt? Ich versuche gerade ein ähnliches Projekt mit einem Raspberry Pi statt mit einem Notebook um zu setzen.
Bild hier
auf dem linux-Notebook habe ich einen apache-server laufen, den ich über das VPN anspreche. Bild und Ton werden direkt auf dem Browser des Heim-PCs übertragen, die Steuerungsmasken laufen auf dem Apache des Linux-servers.
Die Steuerkommandos werden mittels cgi-bin abgehandelt und dort mittels php abgearbeitet. In den php-Scripten findet dann die Kommunikation zur RN-Control via RS232 statt.
Im Linux-Notebook werden auch die gefahrenen Schritte gespeichert. verliert es das UMTS-Signal, dann wartet er 2 Minuten ob es wieder zum Kontakt kommt. Ist dies nicht der Fall fährt den Weg exakt so weit zurück (Abruf aus Logfiles), wie das letzte gute UMTS-Signal noch verfügbar war. Klappt es dann wieder nicht, fährt er nochmals zurück. Dies macht er aber nur max. 50m wegen möglicher Wegeabweichungen.
Insgesamt läuft bei mir nur eine Browserverbindung, die aber Objekte direkt (Kamera, Ton) adressiert und die Steuerung vom Linux-apache adressiert.
Da man umts-Verbindungen nicht routen kann, baut robby immer die Verbindung zum "Festnetz-PC" auf. Dann wird ein openvpn-tunnel aufgebaut und schon kann man mit robby "reden".
Dabei verwende ich für den "Festnetz-PC" einen dynamischen DNS-Dienst. so sucht robby immer nur nach robby.dyndnsprovider.org und ich kann von jedem PC mit eindeutiger IP darauf zugreifen.
Ist ein Router dazwischen, dann muss ein Port-forwading eingetragen werden, sonst findet robby nur den weg bis zum Router aber nicht mehr zum PC.
Das war auch mein erster Ansatz (mit einem PHP Server), allerdings bekommt man dadurch doch eine relativ große Verzögerung, bis ein Befehl ausgeführt wird oder? Wobei die große Verzögerung über UMTS ja sowieso gegeben sein sollte.
Ich will die Webcam direkt über einen CSI BUS ansprechen und zwischen meinem Handy und dem Raspberry Pi (Arch Linux, nur das Nötigste installiert) eine AdHoc Wlan Verbindung aufbauen.
Die Befehle sollen dann direkt von einem in Java oder in C geschriebenen Server an den RP6 weiter gegeben werden.
Von da aus soll es dann wie bei Dir per I2C weiter gehen.
Eventuell kommt dann auch ein Umbau auf UMTS, das werde ich dann wohl ebenfalls mit einem VPN Tunnel machen müssen.
Wie groß war bei Dir die Verzögerung bei der Webcam und den Befehlsausführungen?
Damals rund 1 Sekunde, heute schafft man rund 300-500ms (gute Webcam mit schnellem mpeg-decoder vorausgesetzt). Beim vpn keinen langen Schlüssel verwenden und vor allem KEINE Komprimierung. Denn 99% des Datenverkehrs ist das mpeg4 und das komprimieren von mpeg4 kostet nur unnötige Rechenzeit und bringt nichts. Wegen der Verzögerungen habe ich das schwenkbare Radarmodul installiert.
Es hatte 2 Funktionen:
1) Notbremse, wenn Objekt <10cm entfernt war.
2) Anzeige der Entfernung zum nächsten Objekt in mm.
php ist nicht wirklich sehr viel langsamer, wenn man das php mit sticky-bit versieht, damit es speicherresitent bleibt. Direkt in c sparst du keine 10ms pro Anweisung, da ja auch die RS232 kein Datenturbo ist.
Zudem solltest du keine kontinuierliche Fahrt zulassen, sondern immer nur vorgegebene Entfernungen.
Geändert von raidy (24.05.2013 um 23:51 Uhr)
Lesezeichen