Cozmos interne virtuelle Landkarte

(Foto ist von Lukas, fand es nur auch sehr passend für diesen Beitrag)

 

Ein besonderes Feature von Cozmo ist die virtuelle Landkarte die Cozmo besitzt. Wenn Cozmo startet ist diese generell leer, sollte Cozmo aber einen Cube sehen während er steht oder herum fährt dann merkt sich Cozmo seine Position durch die Klasse Pose und kann diesen Cube selbstständig anfahren. Wenn ein neues Programm ausgeführt wird oder Cozmo kurz angehoben wird dann setzt sich die Landkarte wieder zurück und Cozmo startet bei (0|0|0) und kann quasi die Objekte neu entdecken und in seine Landkarte eintragen wo sie dann wieder so lange gespeichert werden bis ein neues Programm ausgeführt wird oder Cozmo angehoben wird. Man kann allerdings auch Objekte in Cozmos Landkarte programmieren die dann immer wenn das Programm ausgeführt wird direkt erstellt und gespeichert werden. Es gibt zwei Möglichkeiten Objekte für Cozmos Karte zu programmieren. Die erste sind „FixedCustomObjects“ also Objekte die sich fixiert an einer Position(Pose) befinden. Dazu gibt es die Methode create_custom_fixed_object() bei der in den Klammern die Pose und die Maße angegeben werden. Dann hätte man zum Beispiel create_custom_fixed_object(Pose(10,10,0),20,5,3) . In diesem Beispiel würde an der Stelle (10|10|0) ein 2 Zentimeter langer und 5 Millimeter breiter Quader stehen der 3 Millimeter hoch ist. Dabei ist jedoch zu beachten das die Koordinaten den Mittelpunkt des Objekts angeben und die Achsen anders verlaufen als gewohnt. Die X-Achse verläuft in Cozmos Blickrichtung und die Y-Achse nach Links von Cozmo. Also würde das Objekt bei (0|7,5|0) anfangen und bei (20|12,5|3) enden und in dem Bereich zwischen den Beiden Koordinaten stehen. Das ganze sähe dann so aus :

 

 

 

 

 

Die zweite Möglichkeit Objekte zu programmieren sind „CustomObjects“ die nicht direkt eine Position zugewiesen bekommen. Stattdessen werden werden „CustomObjects“ mit der Methode define_custom_box(), define_custom_cube() und define_custom_wall() erstellt. Jedem Objekt wird ein Objekt Type zur Refferenz zugewiesen und ein „CustomObjectMarker“ für jede Seite des Objekts also sechs verschiedene für eine Box, einen für einen Cube(Würfel) und einen für beide Seiten einer Wall(Wand). Danach folgen die Maße des Objekts sowie die Größe des Markers. Das besondere an diesen CustomObjects ist das sie erst dann von Cozmo in seiner Landkarte gespeichert werden wenn Cozmo einen der Marker mit seiner Kamera sieht. Je nachdem welchen Marker Cozmo wie groß sieht weiß er von welcher Seite und mit welchem Abstand er das Objekt sieht und dann einspeichern muss. Von diesen Objekten kann es mehrmals das selbe geben oder man setzt is_unique auf True sodass Cozmo weiß das es das Objekt und dementsprechend die zugehörigen Marker nur einmal gibt. Marker gibt es 16 verschiedene alle auf der Dokumentationsseite einsehbar und sie sehen beispielsweise so aus:

Das ist Circles 3

Diamonds 4

Hexagons 5

Und Triangles 2

Wie man sieht gibt es vier Formen immer mit 2 bis 5 Exemplaren der Form in unterschiedlichen Anordnungen damit Cozmo diese unterscheiden kann wenn er sie sieht.