Building a home robot: Part 2 - Neck design and movement

(see all parts of "building a home robot")

My first approach to move the neck and head was to use servos. Because the rotation has to move a large weight to rotate the head left/right, I bought a servo driven ball-bearing base.

The first try was a servo driven ball-bearing base.



Mechanical everything worked fine – the base had : enough power solve the movement.
But it was very loud. It made the typical plastic server “scrieeeee” sound and the base amplified the sound by acoustic resonance.
It all sounded like a big cheap RC toy from the 80s :-/ Nothing you want to hear from a futuristic robot with a cute and modern body design.

The next idea was to create laser cut gears on my own and mount them on a big ball-bearing:

As engine I wanted to use a stepper motor

Everything seems fine – even a first manual test moving the motor and gears by hand.
But the first electronic driven test was a little bit annoying: It was much more quiet and strong than the RC servo but still loud.

The next idea to solve this was to use a fan belt to connect the gears to prevent the plastic-on-plastic sound. But for this the complete construction would have to be changed.

So I tried another idea: Creating the motor gear  with 3d printing from rubber instead of laser cut acryl:

This worked very fine and now the gears are working very silent.

The endstop to home the rotation:

First AI approach for the traffic system

With more than one vehicle on the road a little bit of artificial intelligence is needed. 

I decided to attach three Unity3D collider (with activated “trigger” property and one rigidbody component) to each vehicle:

  • An active front collider to detect if the vehicle is about to crash into another car or pedestrian
  • A passive body collider to be detected by the front collider of another vehicle
  • A passive back collider – also to be detected by another front collider

 

First idea of the collider and the AI behavior:

If the front collider of the vehicle hits a body collider it stops and tries to drive back a little bit. 

When the back collider is hit, the other car is probably just driving on the same track but with less speed. In this case the vehicle with the triggered front collider adjusts to the speed of the car in front of it.

The result looks more like a cartoon character using trial and error  than a defensive driving style. I call this AI behavior “Italian  driving mode” ;-)

A first animated video of some vehicles using the AI:

 

BTW: One thing I learned about Unity3Dwhile working on this: Because Unity seems to serialize enums as numbers and not by name: Use a flag number for every enum value. Otherwise when you change the order inside the enum definition the meaning swaps.

Kinect for Windows V2: USB 3.0 ist nicht USB 3.0 :-/

Die für die Entwicklung eines Piratenspiel-"Ganzkörper"-Jump´n´Run vorgesehene Kinect für Windows V2 ist nun eingetroffen.

Im Vergleich zur ersten Version der Kinect scheint das Gerät noch etwas schwerer geworden zu sein und sondert (ebenso wie der Vorgänger) reichlich Wärme ab. Wahrscheinlich zusammen mit dem damit verbundenen Stromverbrauch ist dies auch der Grund, warum (leider) weiterhin ein externes Netzteil nötig ist.

Dafür ist das ganze etwas stylischer, da die Infrarot-Komponenten offenbar hinter die für das menschliche Auge undurchsichtige Frontblende versteckt wurde. Dadurch sieht man bei der neuen Kinect nur eine statt drei Objektive.

Eine dicke Enttäuschung dann aber gleich zu Anfang:
Die Kinect arbeitet nicht mit meinem PC zusammen. Nach längerer Recherche im Internet stellte sich dann heraus: Es wird USB 3.0 benötigt. Ok, das wusste ich und mein Desktop PC hat auch entsprechende Ports.

ABER: Die Kinect arbeitet nicht mit jedem USB 3.0 Controller zusammen. Genauer gesagt scheint Sie nur mit den Chipsätzen exakt zweier Hersteller zu funktionieren.
In meinem PC war aber "natürlich" eine andere USB 3.0 Karte verbaut. Da frage ich mich doch ernsthaft, wie Microsoft es hin bekommen kann, ein Gerät auf den Markt zu bringen, welches offiziell mit einem Standard zusammenarbeitet, dann praktisch aber doch nicht...
Wenn es noch die Vorabversion wäre: ok. Aber hier handelt es sich um die normale Verkaufsversion :-/

Nach dem Kauf und Einbau einer weiteren USB 3.0 PCI Karte klappt das ganze dann nun einigermaßen-  die gelieferten Framerate sind aber relativ instabil und berechen teilweise auf 5 FPS zusammen, obwohl der PC sich laut Taskmanager langweilt.

Der WortWecker ist fertig

Nachdem das Projekt nun ein paar Monate in der Schublage lag (siehe Teil 2 und Teil 1) ist die Uhr nun endlich einsatzbereit.

Ein erster Funktionstest vor dem endgültigen Zusammenbau:

Die Taster zur Einstellung der Alarmzeit und der Lautsprecher müssen noch angebracht werden:

Noch ein letzter Blick in das Innenleben:

Ein abschließender Test aller LEDs:

Die Uhr an ihrem Bestimmungsort :-)

Wird es dunkel, dimmt das Licht der LEDs (gesteuert durch den verbauten Helligkeitssensor) entsprechend ab:

Oculus-Rift und Kinect kombinieren

Die erste Alpha Version des FireTouchVR Frameworks ist nun lauffähig. Sie arbeitet aktuell mit der Oculus Rift, dem Kinect Sensor und dem selbst gebauten Datenhandschuh zusammen.

Verbindet man die virtuelle Kamera mit der Kinect-Position des Kopfes, kann die Kamera im Raum bewegen. Der Bewegungssensor der Okulus Rift Brille wiederum erkennt nur die Drehung des Kopfes, nicht aber Position innerhalb des Raumes.

Gleichzeitig die Kinect für die Position und die Oculus Rift Brille für die Drehung des Kopfes zu verwenden, ergänzt sich daher sehr gut. Man kann dadurch Dinge von mehreren Seiten oder aus der Nähe anschauen.

Kinect Sensor - FireTouchVR
Die Kinect misst die Position von Hand und Kopf

Mit etwas eigener Hardware-Entwicklung kann zusätzlich auch eine Hand zu Interaktion verwenden.

Der fertige Datenhandschuh - FireTouchVR
Der fertige Datenhandschuh

Dazu kann man einen Handschuh günstig mit Dehnungsmesstreifen ausstatten. Oder wie hier einen fast 20 Jahre alten Nylonhandschuh mit eingebauten Glasfasern verwenden.

Synchrone Darstellung der virtuellen Hand - FireTouchVR
Synchrone Darstellung der virtuellen Hand


Wie bei der Oclulus Rift Brille benötigt man für die Drehung der Hand ebenfalls einen Rotationssensor. - FireTouchVR
Wie bei der Oclulus Rift Brille benötigt man für die Drehung der Hand ebenfalls einen Rotationssensor.

Bringt man die Oculus Rift Brille, die Kinect und den Handschuh zusammen, kann man sich im virtuellen Raum bewegen und dabei seine eigene Hand sehen. Dadurch sind Manipulationen im Raum auch für komplett unerfahrene Nutze durch einfache Greifen oder Bewegen mit der Hand möglich.

FireTouchVR

Hier das Ganze noch einmal zusammen gefasst als Video:

Hier noch ein paar weitere Impressionen:

FireTouchVR

FireTouchVR

FireTouchVR

FireTouchVR