Accueil Nos publications Blog SDK Sphero – Part 1 – Introduction

SDK Sphero – Part 1 – Introduction

sphero-logo-blueIl y a quelque temps j’ai écrit un article pour vous faire part de ma découverte de Sphero. Une petite boule ludique et connectée.

Le SDK dont je vous parlais dans cet article est maintenant disponible, pour Windows Phone 8 ET Windows 8.1. Il est donc temps de commencer une petite série de trois articles pour vous le présenter.


Dans ce premier article, je vais vous donner les informations pour récupérer le SDK, vous présenter la structure du SDK. On entrera ensuite dans le vif du sujet, avec des exemples de codes, pour se connecter à Sphero, le piloter,  et changer la couleur des leds.

Cet article, présente uniquement le SDK, si vous êtes intéressés par le fonctionnement interne de Sphero, je vous invite à lire la documentation complète de Orbotix disponible ici.

Sphero Drive

Avant d’entrer dans le vif du sujet avec les détails sur le SDK, je voudrais vous montrer l’application Sphero Drive que j’ai développé avec :

00 - Home 02 - Drive

Cette application est entièrement basée sur ce SDK et disponible au téléchargement sur le Windows Phone store

Comment se procurer le SDK ?

Pour cela rien de plus simple, il suffit de se rendre à cette adresse : https://github.com/SoatExperts/sphero-sdk

Les sources y sont disponibles, et vous y trouverez également les releases dans le répertoire du même nom

Un package nuget viendra dans les jours à venir.

La structure du SDK

Les versions Windows phone 8 et Windows 8.1 sont iso fonctionnelle.

Le SDK est découpé en namespaces relativement explicites dont voici la liste :

Namespace

Description

Sphero.Communication

Dans ce namespace sont disponibles les classes qui gère la communication avec Sphero.

Les deux classes principales sont SpheroConnection et SpheroConnectionProvider. Elles sont détaillées plus loin dans l’article

Sphero.Controls

Pour l’instant il n’y a que le contrôle xaml Joystick qui est fournit dans ce namespace, mais il y en aura d’autres dans le futur

Sphero.Devices

On retrouve trois classes qui permettent, d’envoyer des ordres aux différents Virtuals Devices.

Sphero.Locator

Tout ce qui concerne le Locator et plus généralement les Sensors de Sphero sont dans ce namespace. Cette partie sera détaillé dans le deuxième article de la série

Sphero.Macros

Tout ce qui concerne les macros s’y retrouve. Les macros seront présentées dans le troisième article.

Lister les spheros disponibles et s’y connecter

Bon il est temps de passer aux choses sérieuses avec un peu de code quand même.

Après avoir créer votre projet, il faut tout d’abord autoriser la capacité ID_CAP_PROXIMITY. Puis ajoutez la référence au SDK sphero.

Il est possible d’obtenir la liste des spheros disponibles en utilisant la classe SpheroConnectionProvider comme ceci :


try
{
    // Découverte de sphero
    IEnumerable<SpheroInformation> spheroInformations = await SpheroConnectionProvider.DiscoverSpheros();

        if (spheroInformations != null && spheroInformations.Any())
    {
        // spheroInformations contient la liste des spheros
    }
    else
    {
        // Aucun Sphero n'est couplé
    }
}
catch (BluetoothDeactivatedException)
{
    // Le bluetooth est désactivé
}

Il suffit ensuite de choisir dans la liste le sphero auquel vous voulez vous connecter (on va prendre le premier de la liste pour faire simple), et utiliser la méthode SpheroConnectionProvider.CreateConnection :



// Création d'une connexion et établissement de la connexion
SpheroConnection connection = await SpheroConnectionProvider.CreateConnection(spheroInformations.First());

Facile non ?

Pour plus de détails vous pouvez télécharger les sources de l’exemple ici : https://github.com/SoatExperts/sphero-sdk/tree/master/Samples/WindowsPhone8/ConnectionSample

Piloter sphero et utiliser le control Joystick

L’objet SpheroConnection crée précédemment gère la communication avec le périphérique. Pour accéder aux méthodes de pilotage du sphero il faut créer un objet SpheroDevice en lui fournissant la connexion :


SpheroDevice spheroDevice = new SpheroDevice(connection);

Sphero étant une boule, il est difficile de savoir où il “regarde”. Pour ça il est équipé d’une LED arrière, que l’on peut activer grâce à la méthode SetBackLED :


// Intensité maximum sur la LED arrière
// Pour éteindre la LED il suffit de rappeler cette méthode avec 0 en paramètre
spheroDevice.SetBackLED(1.0f);

Pour déplacer la boule, la méthode Roll a besoin d’un angle, et d’une vitesse. L’angle doit être compris entre 0 et 359 degrés. 0 fait avancer le sphero tout droit vers l’origine.

Pour définir l’origine, il faut appeler la méthode SetHeading. Un angle de zéro définit l’origine vers l’avant du sphero.


// Définit l'origine en face du sphero
spheroDevice.SetHeading(0);

// Fait avancer sphero dans la direction opposé à la vitesse maximum
spheroDevice.Roll(180, 1.0f);

Maintenant que l’on a vu comment déplacer sphero, voyons comment utiliser le joystick et bien utiliser les événements pour prendre le contrôle de sphero.

Commençons par ajouter le contrôle dans notre page en nous abonnant aux événements utiles que j’expliquerai après :


<sphero:Joystick xmlns:sphero="clr-namespace:Sphero.Controls;assembly=Sphero"
                                 x:Name="spheroJoystick"
                                 Calibrating="spheroJoystick_Calibrating"
                                 CalibrationReleased="spheroJoystick_CalibrationReleased"
                                 Moving="spheroJoystick_Moving"
                                 Released="spheroJoystick_Released" />

Dans le code behind de la page vous pouvez démarrer ou arrêter le joystick


// Démarre l'écoute des événements tactiles du joystick
spheroJoystick.Start();

// Arrête l'écoute des événements tactiles du joystick
spheroJoystick.Stop();

Comme vous avez pu le voir il y a 4 événements :

  • Moving : Se déclenche quand on déplace le joystick, après avoir appuyer au moins une fois dans le cercle central
  • Released : Se déclenche lorsqu’on lâche le joystick
  • Calibrating : Se déclenche quand on déplace le bouton de calibrage, après avoir appuyer dessus la premier fois
  • CalibrationReleased : Se déclenche lorsqu’on lâche le bouton de calibrage

Il reste plus qu’à mettre le code de déplacement dans les méthodes associées :


private void spheroJoystick_Calibrating(object sender, Sphero.Controls.JoystickCalibrationEventArgs e)
{
    if (spheroDevice != null)
    {
        // On fait juste tourner sphero sur lui même
        spheroDevice.Roll(e.Angle, 0);
    }
}

private void spheroJoystick_CalibrationReleased(object sender, Sphero.Controls.JoystickCalibrationEventArgs e)
{
    if (spheroDevice != null)
    {
        // Lorsque l'on quitte le calibrage, on définit l'origine en face du sphero
        spheroDevice.SetHeading(0);
    }
}

private void spheroJoystick_Moving(object sender, Sphero.Controls.JoystickMoveEventArgs e)
{
    if (spheroDevice != null)
    {
        // Fait avancer sphero dans la direction et à la vitesse demandée
        spheroDevice.Roll(e.Angle, e.Speed);
    }
}

private void spheroJoystick_Released(object sender, Sphero.Controls.JoystickMoveEventArgs e)
{
    if (_spheroDevice != null)
    {
        // Envoi un message avec une vitesse de 0 pour dire à sphero de s'arrêter
        _spheroDevice.Roll(e.Angle, 0);
    }
}

Le pilotage n’a maintenant plus de secret pour vous !
Vous trouverez un exemple d’application de pilotage ici : https://github.com/SoatExperts/sphero-sdk/tree/master/Samples/WindowsPhone8/DriveSample

Changer la couleur du sphero

Sphero est également équipé d’une LED RGB.

Si vous souhaitez en changer la couleur rien de plus simple, il suffit d’appeler la méthode SetRGBLED en lui fournissant les trois composantes de couleur :


// Rouge
spheroDevice.SetRGBLED(1.0f, 0, 0);

// Vert 
spheroDevice.SetRGBLED(0, 1.0f, 0);

// Bleu 
spheroDevice.SetRGBLED(0, 0, 1.0f);

Vous trouverez un exemple d’application pour changer la couleur de sphero ici : https://github.com/SoatExperts/sphero-sdk/tree/master/Samples/WindowsPhone8/ColorLEDSample

Conclusion

Comme vous avez pu le constater au court de cet article, le sdk est vraiment très simple d’utilisation. Et il vous réserve encore beaucoup de surprise, pour les découvrir, je vous donne rendez-vous dans quelques jours pour la deuxième partie de ma série.

Dans cette partie nous parlerons des capteurs du sphero et de la détection des collisions.

A bientôt !