IRobot Roomba an IPS

Einen Mod gibt es immo noch nicht. Das XBee ist noch „normal“ über den I/O-Port des Roomba oben drauf angeschlossen, da ich noch nicht weiss, wo ich evtl. ein Einschaltsignal des Roomba abgreifen kann, um das XBee mit auszuschalten.
Wenn mir das klar wäre, wäre das XBee schon längst drinnen verbaut.

Grüße,
Doc

Die Frage ist für mich ja noch, ob das Modul mit seinen 50 mA so sehr ins Gewicht fällt, dass sich ein Abschalten lohnt? Wenn der Roomba tatsächlich mal irgendwo festhängt und nicht zur Station zurückkommt dann meistens für deutlich weniger als einen Tag. Jedenfalls bei mir. Insofern finde ich das nicht so wahnsinnig wichtig. Und Lagern soll man ihn ohnehin auf der Ladestation - das werde ich dann auch weiterhin so machen. Und wenn man ihn wider Erwarten mal längere Zeit lagern muss ohne ihn zu betreiben, dann ist es ja vielleicht ohnehin ganz gut den Akku herauszunehmen.

Wie viel mAH hat eigentlich der Akku wenn er einigermaßen in Schuss ist? Steht leider nicht drauf :frowning:

Poah, jetzt bin ich ja gerade echt vollkommen ratlos! Habe das Xbee-Modul eingebaut und probiere seit Stunden, erst über IPS, dann über X-CTU, vernünftig mit dem Ding zu kommunizieren, aber Pustekuchen. Egal was ich sende, der Roomba interpretiert offenbar jede Sendung als „Loslegen im Spotmodus“ bzw wenn er bereits dabei ist, dann hört er auf (um einige Sekunden später wieder im Spotmodus loszugehen).

Es ist wie gesagt völlig gleich, was ich sende, er macht immer nur diese eine Aktion. Egal, welches Byte ich sende, egal ob aus IPS oder per Terminal… selbst X-CTU lässt ihn loslegen, sobald ich damit Geräte suche (Remote Configuration, selbst mit falscher Baudrate!) Irgendwo ist das was falsch eingestellt, aber ich kapiere es einfach nicht! Gna!:mad::confused:

Edit: WTF?! Wenn ich im Terminal Enter drücke (13) dann macht ers auch. Und wenn ich sofort wieder drücke, dann hört er sofort auf.

Ich hab echt schon alles probiert was mir einfällt. Fällt vielleicht jemand anderem was ein? Jemandem, eventuell, der sich im Gegensatz zu mir schon mit Xbees herumgeschlagen hat?

Ich habe heute mal das XBee endgültig in den Roomba eingebaut.
Bilder gibt es die Tage davon.
Mal schauen, wie das ohne eine Abschaltung des XBees funktioniert.

Ich habe dann den Roomba mal provisorisch in den Designer eingepflegt. Mal schauen, die man das am Besten darstellen kann.

Grüße,
Doc

@Doc: So, ich habe den Roomba jetzt auch (endlich) mit IPS verbunden. Es funktioniert auch, zumindest zeitweilig. Leider ist es aus irgendeinem Grund so, dass der Roomba jeweils nach einigen Minuten keine Daten mehr sendet bzw. manchmal auch gar nicht mehr auf Befehle reagiert. Ich weiß noch nicht woran das liegt und ich bin jetzt auch langsam mit den Nerven am Ende was die Fehlersuche betrifft.

Ich habe die XBees auf 115200 Baud eingestellt und mache entsprechend die Kommunikation mit dieser Rate. Du hattest ja geschrieben dass du auf 19200 Baud gegangen bist. Wie bekommt man denn das hin, ohne dass man den Roomba jedes Mal von Hand umschalten muss?

Das Abfragen der Sensoren habe ich durch ein Skript gelöst, welche in regelmäßigen Abständen (bei mir alle 5 Sek.) den Befehl zur Übermittlung einiger, ausgewählter Sensoren sendet. Ich setze denn per Registervariable eine Stringvariable namens „XBee Buffer“, welche die zurückgesandten Bytes enthält. Ein Refresh dieser Variable löst dann ein weiteres Skript aus, welches die Werte in die entsprechenden Formate umwandelt.

All dies funktioniert bei mir ziemlich gut, allerdings nur jeweils ein paar Minuten lang, dann kommt auf einmal nichts mehr vom Roomba, auch kein Müll - mitunter ist vorher mal ein Datenpaket dabei das zu klein ist und das verwerfe ich dann eben. Aber ab diesem seltsamen Punkt X kommt wie gesagt plötzlich gar nichts mehr.

Ich muss dann immer die Bodenplatte vom Roomba ausschrauben und den Akku rausnehmen, manchmal zusätzlich den USB-Dongle vom IPS-Server abnehmen und einmal musste ich den Server sogar neustarten damit es wieder ging. Des nervt sehr und ich habe allmählich keine Nerven mehr, die immer neuen Verbindungsprobleme anzugehen. Vielleicht morgen.

Kann es denn mit diesen Verbindungsabbrüchen an der zu hoch gewählten Datenrate liegen? Oder würde sich ein Problem mit der Datenrate anders äußern?

Ich werde mir auf jeden Fall erstmal einen Watchdogtimer schreiben, der warnt sobald die Verbindung abreißt, aber das kann ja nun auch nicht sein dass es so häufig passiert. Ich vermute eher ein Problem mit den Xbees.

Was ich auch sehr schade finde ist, dass man den Roomba gar nicht aus dem Standby aufwecken kann per OI. Insofern verstehe ich dein Argument, dass das Xbee dann auch keinen Strom verbrauchen sollte. Ich dachte natürlich, man könne den Roboter jederzeit über Funk erwecken. Dann hätte es zumindest ein bisschen Sinn gehabt.

Nun ja, alles nicht so einfach offenbar. Ich habe zwar schon ein wenig Erfahrung mit solchen Sachen (RS-232, auch schon mal andere Funkstrecken benutzt), aber insbesondere die Xbees bringen mich schon gehörig ins Schwitzen (und immer wieder auch auf die Palme). Man hat irgendwie keinen Schimmer was sie tun und was nicht.

@sokkederheld

bei 115kb hatte ich auch Probleme mit Datenmüll, was den Roomba dann lamgelegt hatte. Steht auch in der OI-Beschreibung, das bei falschen Daten dieser belastet wird und nicht mehr antwortet.
Beim Einschalten die Cleantaste einfach 10s. festhalten, dann ist der Roomba im 19200 Mode und bleibt auch da, bis man den Akku herraus nimmt oder einen Reset auslöst - steht auch im Manual.
Das der Roomba manchmal keine Daten mehr sendet, habe ich auch ab und an. Ich sende dann einfach ein paar Daten und dann antwortet er wieder.

Grüße,
Doc

Hallo,

danke für den Hinweis, das war genau der Grund. Jetzt funktioniert das ganze doch recht anständig und ich bin wieder etwas überzeugter davon, dass ich doch kein technischer Analphabet geworden bin :slight_smile:

Ich hatte geglaubt, dass der Roomba seine Baudrate automatisch wieder hochsetzt, sobald er ausgeschaltet wird, aber das scheint ja zum Glück nicht der Fall zu sein. Den Akku baut man ja nun nicht soo häufig aus…

Machen die XBees eigentlich irgendeine Art von Überprüfung, ob die Daten korrekt empfangen wurden? Es gibt ja leider vom Roomba keine Checksumme.

Die fehlende Checksumme des IRobot finde ich eigentlich auch bedauerlich.
Die XBees werden das aber im „Funkverkehr“ irgenwie abfangen, bleibt aber noch die Fehlerquelle in und aus dem Buffer.

Gruß,
Doc

…und was ja irgendwie ganz blöde ist, ist die Tatsache dass es keine Funktion gibt, um herauszufinden was der Roomba gerade tut bzw. „vorhat“, also quasi ob er in einem Reinigungsmodus ist und wenn ja in welchem, ob er gerade nach einem bestimmten Lighthouse sucht oder nach dem Dock…

Ich habe jetzt erstmal eine Erkennung eingebaut, wo der Roomba gerade ist (durch Auslesen der Character von den IR-Empfängern), das funktioniert vmtl. aufgrund meines sehr großen Abfrageintervalls von 5 Sekunden eher so leidlich. Aber dadurch bekommt man zumindest mit, in welchem Raum er gerade ist (ich achte nur auf die „Bojen“).

Auch fehlt mir eine Funktion, mit der ich den Roomba aus dem Modus „Safe“ wieder zurück auf „Passive“ setzen kann. Das geht momentan nur durch Auslösen eines Reinigungsprogramms über das OI. Schade, denn man braucht den Safe-Modus ja schon mal, wenn man den Roomba z.B. auf Wunsch zur Wartung aus der Garage fahren lassen will. Oder für eine Spot-Reinigung. Da wäre es schon praktisch, wenn man wieder auf „Passive“ gehen könnte, sonst reagieren auch dei Buttons am Gerät nicht.

Das ist doch kein Problem, einfach das Char 128 senden, schau mal in die Beschreibung. Das nutze ich um den Roomba zu wecken, wenn er die Verbingung verliert, einfach passive-safe-passive.
Vllt. kannst du ja mal ein Teil deiner Scripte hier posten.

Grüße,
Doc

Na klar. Hier zum Beispiel das Skript das den Raum erkennt:

			for($i = 0; $i <= 2; $i++)
			   {
				switch($character[$i] + 0)
			      {
					case 10: // gruene boje bad
					SetValueInteger("Roomba Raum", 3);

					break;
					case 83: // rote boje wozi
					SetValueInteger("Roomba Raum", 2);

					break;
					case 11: // rote boje bad
					case 82: // grüne boje wozi
					case 161: // chg halo
					case 164: // chg grüne
					case 165: // chg halo + grüne
					case 168: // chg rote
					case 169: // chg halo + rote
					case 172: // chg grüne + rote
					case 173: // chg alle
					SetValueInteger("Roomba Raum", 1);

					break;
			      }
				}

Das Skript muss an die entsprechenden IDs der Lighthouses angepasst werden (wert ausgeben lassen).

Wobei das wie gesagt bei dem von mir genutzten Abfrageintervall von fünf Sekunden eher in Ausnahmefällen klappt. Der Roomba muss den Character der entsprechenden Boje ja genau in dem Moment empfangen, in dem die Abfrage passiert. Da er aber in der Regel sofort wendet, geschieht dies sehr selten. Es müsste also noch mal irgendwie eine schlauere Methode her.

Öfter als die Bojen empfängt man die Force Fields, aber natürlich tut man das von jeder Seite des Lighthouses.

Welches Intervall benutzt du eigentlich zur Abfrage der Sensoren? Ich habe ja irgendwie Angst, IPS zu sehr abzubremsen, es läuft so schon viel zu langsam bei mir (wenn ich mehrere Designer offen habe, dauert es manchmal mehrere Sekunden ehe auf einen Lichtschalter reagiert wird).

Mein „Herausfahren zur Wartung“-Skript sieht jetzt so aus und funktioniert mit dem Semaphor auch vernünftig. Vorher haben die periodischen Abfragebefehle immer für seltsames Verhalten gesorgt, aber die Prozedur benutzt jetzt auch den Semaphor und nun funktioniert das.

IPS_SemaphoreEnter("Roomba Sperre", 1000);

SetValueBoolean("Robotergarage offen", true);
IPS_Sleep(2000);

XBee_Sendtext(56206 /*[Geräte\XBee\XBee Device]*/, chr(131)); // Safe Mode
IPS_Sleep(200);
XBee_Sendtext(56206 /*[Geräte\XBee\XBee Device]*/, chr(145) . chr(255). chr(0) . chr(255) . chr(0)); // Rückwärts
IPS_Sleep(2500);
XBee_Sendtext(56206 /*[Geräte\XBee\XBee Device]*/, chr(145) . chr(0). chr(0) . chr(0) . chr(0)); // Stop
IPS_Sleep(200);
XBee_Sendtext(56206 /*[Geräte\XBee\XBee Device]*/, chr(128)); // Passive Mode

IPS_SemaphoreLeave("Roomba Sperre");

Wobei die Länge des Sleeps nach dem Fahrbefehl die Wegstrecke angibt. Ein bisschen „variabel“ manchmal, aber man kann auf diese Weise schon grob bestimmte Punkte aus einer definierten Ausgangsposition anfahren. Den Befehl, um Integers in zwei Bytes zu zerlegen habe ich noch nicht so richtig raus, diesen hier hab ich mir mit dem Windows-Taschenrechner zusammengepuzzelt.

Hallo

Habe diesen Beitrag mit Interesse verfolgt und mir auch einen
Roomba angeschafft.
Dazu meinen ersten XBee !
Dachte es gaebe Probleme hat aber alles auf Anhieb funktioniert.
Mein Xbee ist jetzt fest im Roomba eingebaut.

http://www.k170.de/ips/roomba.html

Hab das komplette „Open Interface“ in eine Funktionpool geschrieben.
Wers habe will einfach ne mail.

So sieht bei mir das script fuer die Batterieanzeige auf dem LCD-Display aus:

// Include Roomba Funcpool
include "52920.ips.php"; 
command(SAFE,0);
$batterie = (string) get_batterie();
show_lcd_text($batterie);

Nun zu einer Frage:
Hat jemand schon „Songs“ auf den Roomba geladen?
Kann irgendwelche Daten als Song hochladen und abspielen aber bin kein
Musiker oä.
Gibt zwar Toene von sich aber nix was ich mir anhoeren will.

Zum hochladen benutze ich :

command(SONG,array(0,7,60,16,58,16,60,16,60,16,60,8,33,8,43,8));
command(PLAY,array(0));

Gibt es ein Konvertierungsprogramm von ??? nach Roombaformat?

Hallo,

tolle Arbeit, deine Skripte sind ja wirklich sehr umfassend und strukturiert geraten!

Die Songfunktion habe ich aber leider auch noch nicht benutzt, mir fiel bisher auch nicht ein welchen Nutzen sie hat :wink:

Hast du dich auch schon mit der Erkennung der Räume beschäftigt? Und in welchen Intervallen wertest du den Roomba aus?

Hallo
Wie gesagt hab mein Verbundung zu IPS erst seit 5 Tagen und XBee laeuft
erst seit gestern.
Song Function wollte ich mal testen, nach dem Motto „Teste was geht“ :slight_smile:
Mein Interval war bis jetzt alle 10 Sekunden um zu schauen ob alles stabil laeuft.

Raumerkennung hab ich mir heute zum erstenmal angeschaut.
Hab irgenwo gelesen die Lighthause und der Roomba haben auch so einen XBee
eingebaut. Roomba schaltet den Sleepmodus der Lighthaus wohl an und aus.
Laut OI-Beschreibung werden die IDs der Lighthaus vom Roomba vergeben.
Sind die immer die gleichen? Oder koennen die von einem um anderen Tag verschieden sein?
Zum Abfrageintervall wuerde ich die Streamfunction benutzen.
Bin gerade am testen.
Mit :
command(STREAM,array(2,52,53));

Bekomme ich alle 15 ms die Daten der Infrareds.
Das muesste ausreichen kein Signal zu verpassen.
In meinen hochgeladen Script ist die Streamauswertung noch nicht drin , weil ich gerade dran arbeite.
Sobald es funktioniert meld ich mich wieder.

Naja
Datenstream vom Roomba funzt.
Auswertung funzt
und wie ich das sehe gehen da keine Daten der Lighthouse verloren
aber…
Der „Flaschenhals“ ist jetzt IPS.
Die Daten kommen schneller rein als sie verarbeitet werden.
Genauer - selbst wenn ich Roomba auschalte oder XBee-Stick rausziehe
werden immer noch Daten verarbeitet. Bis zu mehreren Minuten.
Wird wohl vom Logging und vom Debugging kommen.
Jede Menge Eintragung vom XBee-Buffer im Logfile.
Beim Streaming von Daten ist ein Logging oder Debugging „uncool“ :wink:
Beispiel aus dem Logfile:
26.12.2008 22:10:58.125 | 20773 | DEBUG | VariableManager | [ROOMBA\XBee Device\Buffer] =
26.12.2008 22:10:58.140 | 20773 | DEBUG | VariableManager | [ROOMBA\XBee Device\Buffer] =
26.12.2008 22:10:58.156 | 20773 | DEBUG | VariableManager | [ROOMBA\XBee Device\Buffer] =
26.12.2008 22:10:58.171 | 20773 | DEBUG | VariableManager | [ROOMBA\XBee Device\Buffer] =
26.12.2008 22:10:58.187 | 20773 | DEBUG | VariableManager | [ROOMBA\XBee Device\Buffer] =
26.12.2008 22:10:58.203 | 20773 | DEBUG | VariableManager | [ROOMBA\XBee Device\Buffer] =
26

Ideal waere wenn man das auschalten koennte.
Also wenn Daten Daten schnell reinkommen kein Logging oder aehnliches.
Geht das ??

Also ich habe das Abfrageintervall auf 1 Sek. festgelegt, da ich auch festgestellt habe, das IPS mit den autom. generierten Stream von 15ms völlig überfordert war. Nutzt du denn den Roomba mit 115kb?

Übrigens gute Fotos zum Umbau, jetzt brauche ich meine gar nicht mehr zu veröffentlichen, hatte schon ein schlechtes Gewissen, nichts mehr geschrieben zu haben. Sieht übrigens genau wie bei mir aus, auch wenn die Adapterplatine bei mir etwas kleiner geraten ist.

Ich habe das Xbee auch noch etwas mit Moosgummi gepuffert, um die Stösse abzufangen.
Wie hast du denn das Problem der Stromaufnahme bei ausgeschalteten Roomba gelöst?

Grüße,
Doc

1 Sek. bremst bei mir IPS dermaßen aus, dass es immer mehrere Sekunden dauert, bis auf einen Lichtschalter o.Ä. reagiert wird. Ich habe es daher auf 5 Sekunden festgelegt.

Die LH IDs sind leider offenbar jedes Mal anders, so dass meine Routine die ich oben gepostet habe mittlerweile auch nicht mehr bei mir funktioniert. Es kommt bei mir leider auch immer noch mitunter vor, dass der Roomba aus einem bestimmten Raum nicht mehr herausfährt.

Hallo
Roomba Intervall 19200.
115kB hab ich nie probiert da ich hier gelesen hab , dass es Probleme gibt.
Platine hab ich als Testaufbau gemacht „bevor“ ich Roomba zerlegt hab.
OK zu gross - hab ich dann gemerkt. Interner Ladestecker musste dann
dran glauben. Wer das nachmacht , dran denken , 2 Draehte muessen gebrueckt werden. ( hat mich einmal Zusammenbau und wieder auseinander gekostet )
Stromaufnahme will ich ueber die die „Sleep“-Function des Xbee loesen.

Hallo 1007,

wie kommst du denn wieder an das XBee ran, musst du dann alles wieder zerlegen?
Wenn du das XBee mit dem Sleep-Modus getestet hast, lass es mich bitte auch mal wissen, ob das so funktioniert und was es dann noch verbraucht. Ich suche auch noch nach einer einfachen Lösung.

Die externe Ladebuchse des Roomba konnte bei mir übrigens problemlos drinnen bleiben. Ich werde mal die Bilder die Tage hier reinsetzen.

Grüße,
Doc

Nein ?

Mit der Software X-CTU geht ab einer bestimmten XBee-Firmware
Remote Config.

X-CTU:
Modem Configuration - Remote Configuration - Open Com port
Discover
Danach listet er alle gefunden XBee auf.
Den gewollten markieren und dann auf READ.
Aendern und WRITE.

Geht einwandfrei.