ARTURo (Augmented Reality Terrestrial Unmanned Rover)


ARTURo from HackLab Terni on Vimeo.


Che cosa è

ARTURo è un Rover con due ruote motrici e un ball caster, capace di muoversi e guardarsi intorno con una webcam. Il Rover viene controllato a distanza tramite comandi inviati via rete WiFi. I comandi sono inviati al Rover usando un dispositivo wireless (smartphone, tablet, netbook).

Un'applicazione sviluppata in openFrameworks (scaricabile in fondo alla pagina) permette ad ARTURo di funzionare in tre modalità differenti: "moveAround", "faceDetect" e "findMarker". Nella modalità "moveAround" l'utente può controllare sia la direzione di movimento del Rover sia il pan e il tilt della webcam installata a bordo; nella modalità "faceDetect" il Rover rimane fermo e la webcam riconosce il primo viso inquadrato e lo segue autonomamente con i movimenti di pan e tilt; nella modalità "findMarker" ARTURo riconosce e traccia N marker per Realtà Aumentata e li usa per muoversi autonomamente in un percorso stabilito dalla posizione dei marker. Per queste ultime due modalità sono stati usati gli addon di openFrameworks ofxOpenCV (basato sulla libreria OpenCV) per il riconoscimento facciale e ofxARtoolkitPlus (basato sulla libreria ARtoolkitPlus) per il riconoscimento dei marker per Realtà Aumentata. Sia openFrameworks che le altre librerie usate sono open source.

Per le comunicazioni wireless tra il Rover e l'applicazione remota abbiamo usato un Router WiFi sul quale è stata installata una distribuzione Linux pensata per questo tipo di dispositivi: OpenWRT. Per il Router abbiamo anche sviluppato un'applicazione capace di ricevere i comandi da dispositivi remoti via WiFi e di inoltrarli ad Arduino attraverso la porta seriale. Il Router WiFi è stato inoltre configurato per ricevere il flusso video dalla webcam (collegata alla sua porta USB) e per inviarlo in streaming sulla rete WiFi tramite MJPG-streamer.

Per l’azionamento dei motori DC, ai quali sono collegate le due ruote, viene utilizza una scheda Motor Shield in grado di controllare anche i movimenti dei due servo motori per la direzione di visuale della webcam.

E’ in fase di studio un sistema di Simultaneous Localization and Mapping (SLAM) per permettere al Rover di muoversi in un ambiente sconosciuto, costruire una mappa di questo ambiente e al tempo stesso localizzarsi all'interno di questa mappa. Il riconoscimento e il tracciamento dei marker costituisce un primo passo in questa direzione: quando un marker viene tracciato è possibile calcolare la posizione e l'orientazione della webcam rispetto al marker fisico in tempo reale.




Description

ARTURo is a little two-wheel-drive rover with a ball caster, that can move and see around and is remotely controlled by commands sent via WiFi network. This commands can be sent to the rover using a wireless device (smartphone, tablet, netbook).

An application developed in openFrameworks (you can download it at the end of this page) allows ARTURo to operate in three different modes: "moveAround", "faceDetect" and "findMarker". In "moveAround" mode the user can control both the motion direction of the Rover and the webcam pan and tilt; in "faceDetect" mode the Rover remains firm, the webcam recognizes the first face covered and autonomously follows it with pan and tilt movements; in "findMarker" mode ARTURo recognizes and traces N Augmented Reality markers and uses them to move autonomously in a path determined by the markers position. For the latter two methods we used the openFrameworks addons ofxOpenCV (based on the OpenCV library) for facial recognition and ofxARtoolkitPlus (based on the library ARtoolkitPlus) for the recognition of Augmented Reality markers. OpenFrameworks and the other libraries used are open source.

A wireless router has been used for WiFi communication between the rover and the remote application. On this wireless router we have installed OpenWRT (a Linux distribution for little devices like this) and developed an application able to receive the commands via WiFi and to communicate this commands to Arduino via serial port. The wireless router has been also configured to receive video from the webcam and to stream the video on the WiFi network using MJPG-streamer software.

In order to drive the DC motor, and the attached wheels, we used a Motor Shield that is also able to control the servos for the webcam pan and tilt.

In the future we would like to add a system of “Simultaneous Localization and Mapping” (SLAM) to permit the Rover to build up a map within an unknown environment or to update a map within a known environment while keeping track of its current location. Marker recognition and tracking is a first step towards this direction: when a marker is tracked it is possible to calculate the webcam position and orientation relative to the physical marker in real time.

Schema a blocchi del sistema - System Block Diagram


Schema concettuale
Conceptual Diagram

COMPONENTI UTILIZZATI

  • 1 scheda Arduino Uno
  • 1 scheda Motor Shield
  • 1 Router WiFi TP-Link TL-MR3020 (wiki openwrt)
  • 2 Motori DC
  • 2 Servomotori con staffe per sistema PAN-TILT
  • 1 WebCam
  • 1 Ball Caster
  • 2 Ruote gommate recuperate da gioco telecomandato non più utilizzato.
  • 1 Pacco batterie da 8 x 1,5 V (12 V per Arduino UNO e Motor Shield)
  • 1 Pacco batterie da 6 x 1,5 V (9 V stabilizzati a 5 V per il Router)

La struttura del Rover è stata realizzata con due basi di compensato di dimensioni 20x12 con nr. 4 distanziatori di alluminio da 8 cm di lunghezza e 8 mm di diametro.

COMPONENTS

  • 1 Arduino UNO
  • 1 Motor Shield
  • 1 WiFi Router TP-Link TL-MR3020 (openwrt wiki)
  • 2 DC Motor
  • 2 Servos with frame for PAN-TILT
  • 1 WebCam
  • 1 Ball Caster
  • 2 Rubber Wheels from an old RC toy car
  • 1 Battery pack 8 x 1,5 V (12 V for Arduino UNO and Motor Shield)
  • 1 Battery pack 6 x 1,5 V (9 V stabilized at 5 V for WiFi Router)

The Rover frame is made up of two 20cm x 12cm plywood boards and four 8cm-long 8mm-diameter aluminum spacers.

Here the source code for Arduino, OpenWrt and openframeworks:

ARTURo.zip - Sorgenti per Arduino, OpenWrt e openFrameworks (955.2 kB) Redmine Admin, 01/25/2014 08:03 pm