Meine Bots
Meine Bots
In meiner Galerie habe ich gestern ein paar Bilder vom Zusammenbau meines ersten Bots gestellt. Der zweite wird erst angefangen, wenn der erste hardwaretechnisch ok ist. Die vier Tage Zusammenbau waren über knapp zwei Wochen verteilt, da ich aus mir gänzlich unbegreiflichen Gründen zwischendurch arbeiten muß.
Die Bilder sind unspektakulär, ein paar kleine Änderungen gegenüber dem Standardbau erwähne ich aber doch (noch ungetestet, da ich wegen meines wahrscheinlich defekten BlueMP3 ISP noch nicht flashen kann):
- beide Distanzsensoren und die beiden Sensorplatinen sind mit schwarzem Karton auf Aluträgerseite und Plastikunterlegscheiben auf Schraubenseite isoliert (bei der linken Sensorplatine kann man den Karton sehen).
- auf der Maussensorplatine habe ich das Umlenkprisma mit zwei Plastikstreifen befestigt, da die Standardbefestigung zu klobig und auch zu fest war. So läßt sich die Platine leicht etwas tiefer legen, allerdings eher hinten, damit die beiden Liniensensoren nicht schleifen.
- die beiden LDRs sind relativ streulichtempfindlich, deshalb habe ich beide in abgeschnitte 5er Dübel gepackt, vielleicht hilft das etwas, um die Lichtempfindlichkeit richtungsabhängiger zu machen.
- die Stecker von beiden Kabeln zu den Distanzsensoren waren nicht verpolungssicher (außerdem habe ich einen beim Abisolieren abgerissen), deshalb habe ich bei Conrad neue Stecker inklusive Kabel (Artikel 741760-62) geholt, und drangebaut. Im gleichen Arbeitsschritt habe ich auch gleich überstehende Drahtenden der Stecker in den Sensoren abgeknipst, die waren mir zu lang (das roch schon nach Kurzschlüssen).
Michail
Die Bilder sind unspektakulär, ein paar kleine Änderungen gegenüber dem Standardbau erwähne ich aber doch (noch ungetestet, da ich wegen meines wahrscheinlich defekten BlueMP3 ISP noch nicht flashen kann):
- beide Distanzsensoren und die beiden Sensorplatinen sind mit schwarzem Karton auf Aluträgerseite und Plastikunterlegscheiben auf Schraubenseite isoliert (bei der linken Sensorplatine kann man den Karton sehen).
- auf der Maussensorplatine habe ich das Umlenkprisma mit zwei Plastikstreifen befestigt, da die Standardbefestigung zu klobig und auch zu fest war. So läßt sich die Platine leicht etwas tiefer legen, allerdings eher hinten, damit die beiden Liniensensoren nicht schleifen.
- die beiden LDRs sind relativ streulichtempfindlich, deshalb habe ich beide in abgeschnitte 5er Dübel gepackt, vielleicht hilft das etwas, um die Lichtempfindlichkeit richtungsabhängiger zu machen.
- die Stecker von beiden Kabeln zu den Distanzsensoren waren nicht verpolungssicher (außerdem habe ich einen beim Abisolieren abgerissen), deshalb habe ich bei Conrad neue Stecker inklusive Kabel (Artikel 741760-62) geholt, und drangebaut. Im gleichen Arbeitsschritt habe ich auch gleich überstehende Drahtenden der Stecker in den Sensoren abgeknipst, die waren mir zu lang (das roch schon nach Kurzschlüssen).
Michail
Wenn das Teil nicht so sauteuer wäre, hätte ich sogar drei bestellt. Neben den offensichtlichen Experimenten/Projekten interessiert mich auch ein Verhalten zwischen mehreren Bots.
Erkennen von Bots untereinander? Linke Front-LED sendet immer ein bestimmtes Muster (Beacon mit Bot-ID), mit der rechten kann CRC-abgesichert gesendet werden. Ob die LDRs derartige Ideen erlauben, wage ich zu bezweifeln, bis dahin gibt es wahrscheinlich schon längst ein Bluetooth-Modul. Um sowas aber irgendwann mal rauszubekommen, braucht man halt mindestens zwei.
Michail
Erkennen von Bots untereinander? Linke Front-LED sendet immer ein bestimmtes Muster (Beacon mit Bot-ID), mit der rechten kann CRC-abgesichert gesendet werden. Ob die LDRs derartige Ideen erlauben, wage ich zu bezweifeln, bis dahin gibt es wahrscheinlich schon längst ein Bluetooth-Modul. Um sowas aber irgendwann mal rauszubekommen, braucht man halt mindestens zwei.
Michail
Auch nicht schlecht. Das Senden von RC5-Codes ist natürlich etwas zeitkritisch, keine Ahnung, ob sowas ähnlich wie das Empfangen periodisch timergesteuert (ir-rc5.c/ir_isr()) geschehen sollte.
RC5 bringt zudem nur wenig Nutzdaten, da muß man improvisieren. Man könnte ein paar unbenutzte RC5-Adressen nehmen (z.B. Geräteadresse 24 = c't-Bot Anfrage, 25 = c't Bot Antwort und 27 = c't-Bot Daten) und in den 6-Bit Nutzdaten jeweils Bot-ID und Daten unterbringen:
Adresse 24:
Bit 0-3: ID des Senders (15 maximal, nicht 1111)
Bit 4-5: Kommando:
0=Hallo, ich bin (ID)
1=Direkte Anfrage (Empfänger kommt in Adresse 25)
2=Direkte Antwort (Empfänger kommt in Adresse 25)
Adresse 25:
Bit 0-3: ID des Empfängers
Bit 4-5: Kommando:
0=Nutzdaten kommen in Adresse 27
Adresse 27:
Bit 0-5: Nutzdaten
Die ID sollte nicht fest sein, sondern von einem Startwert solange benutzt werden, bis ein "Hallo, ich bin (eigene ID)" empfangen wurde, dann wird eine andere (zufällige, ungleich 1111) genommen. Nach 15 neuen Adressen wird die Kommunikation eingestellt, zu viele Bots scheinen in der Nähe zu sein. Adresse 1111 ist empfängerseitig die Broadcast-Adresse (alle Empfänger sind gemeint).
Alle Adresse 25 und 27-Pakete werden verworfen, solange keine direkte Anfrage empfangen wurde. Adresse 27-Pakete werden ebenso verworfen, wenn zwar eine direkte Anfrage aber nicht der richtige Empfänger empfangen wurde. Broadcasts werden nicht beantwortet.
Also z.B. treffen Bot1 und Bot2 aufeinander. Bot1 fragt Bot2 "17"?, Bot2 antwortet "18", worauf Bot1 den Befehl "42" ("Everyone after me") broadcastet (immer RC5-Adresse[Kommando,ID]):
[pre]
Bot1 Bot2
24[0,0] Hallo, ich bin Bot1 (ID 0)
24[0,3] Hallo, ich bin Bot2 (ID 3)
24[1,0] Direkte Anfrage von Bot1
25[0,3] Empfänger ist Bot2
27[17] Nutzdaten "17"
24[2,3] Direkte Antwort von Bot2
25[0,0] Empfänger ist Bot1
27[18] Nutzdaten "18"
24[1,0] Direkte Anfrage von Bot1
25[0,15] Empfänger sind alle
27[42] Nutzdaten "42"
[/pre]
Das ist jetzt nur kurz "gebrainstormt" und wahrscheinlich nicht sehr funktionell oder gar unlogisch, machbar ist da aber einiges.
Michail
RC5 bringt zudem nur wenig Nutzdaten, da muß man improvisieren. Man könnte ein paar unbenutzte RC5-Adressen nehmen (z.B. Geräteadresse 24 = c't-Bot Anfrage, 25 = c't Bot Antwort und 27 = c't-Bot Daten) und in den 6-Bit Nutzdaten jeweils Bot-ID und Daten unterbringen:
Adresse 24:
Bit 0-3: ID des Senders (15 maximal, nicht 1111)
Bit 4-5: Kommando:
0=Hallo, ich bin (ID)
1=Direkte Anfrage (Empfänger kommt in Adresse 25)
2=Direkte Antwort (Empfänger kommt in Adresse 25)
Adresse 25:
Bit 0-3: ID des Empfängers
Bit 4-5: Kommando:
0=Nutzdaten kommen in Adresse 27
Adresse 27:
Bit 0-5: Nutzdaten
Die ID sollte nicht fest sein, sondern von einem Startwert solange benutzt werden, bis ein "Hallo, ich bin (eigene ID)" empfangen wurde, dann wird eine andere (zufällige, ungleich 1111) genommen. Nach 15 neuen Adressen wird die Kommunikation eingestellt, zu viele Bots scheinen in der Nähe zu sein. Adresse 1111 ist empfängerseitig die Broadcast-Adresse (alle Empfänger sind gemeint).
Alle Adresse 25 und 27-Pakete werden verworfen, solange keine direkte Anfrage empfangen wurde. Adresse 27-Pakete werden ebenso verworfen, wenn zwar eine direkte Anfrage aber nicht der richtige Empfänger empfangen wurde. Broadcasts werden nicht beantwortet.
Also z.B. treffen Bot1 und Bot2 aufeinander. Bot1 fragt Bot2 "17"?, Bot2 antwortet "18", worauf Bot1 den Befehl "42" ("Everyone after me") broadcastet (immer RC5-Adresse[Kommando,ID]):
[pre]
Bot1 Bot2
24[0,0] Hallo, ich bin Bot1 (ID 0)
24[0,3] Hallo, ich bin Bot2 (ID 3)
24[1,0] Direkte Anfrage von Bot1
25[0,3] Empfänger ist Bot2
27[17] Nutzdaten "17"
24[2,3] Direkte Antwort von Bot2
25[0,0] Empfänger ist Bot1
27[18] Nutzdaten "18"
24[1,0] Direkte Anfrage von Bot1
25[0,15] Empfänger sind alle
27[42] Nutzdaten "42"
[/pre]
Das ist jetzt nur kurz "gebrainstormt" und wahrscheinlich nicht sehr funktionell oder gar unlogisch, machbar ist da aber einiges.
Michail