The final version of the SmartBot Smartphone robot is now out. If you’re looking for a phone-programming robot for your Windows Phone, Android phone or iPhone, SmartBot is the perfect choice. New shape, new design, new SDK – everything is new and improved! The documentation for Windows Phone and the other OS is very clear, with code snippets and instructions to guide you step by step through programming the robot.

La version finale de SmartBot, le robot Smartphone est maintenant disponible. Si vous cherchez un robot programmable pour Smartphone pour votre Windows Phone, votre téléphone sous Android ou votre iPhone, SmartBot est le bon choix. Nouvelle forme, nouveau design, nouveau SDK – tout est nouveau et amélioré dans cette version Mk2! La documentation pour Windows Phone et les autres OS est très claire avec des snippets de code et toutes les instructions pour être guidé pas à pas dans la programmation du robot.

 

SmartBot Mini has grown and it became SmartBot, the Smartphone robot.
Discover this new Smartphone robot which is now compatible with Windows Phone and also Android and IOS!
He is bigger, smarter, he has a complete range of accessories, an SDK and HDK and several apps. It gives you a complete mobile robotic platform, open and affordable, which lets them develop robotic applications, play games, enjoy interactive services and learn robotics.

SmartBot Mini a grandi. Il est devenu SmartBot, le robot smartphone.
Découvrez ce nouveau robot smartphone qui est maintenant compatible avec Windows Phone mais aussi Android et IOS!
Il est maintenant plus grand, plus intelligent et dispose d’une gamme complète d’accessoires, de plusieurs applications ainsi que d’un SDK et d’un HDK complet. Il vous permet de disposer d’une plateforme de robotique mobile, complète, ouverte et simple pour programmer des applications robotiques, jouer à des jeux, et apprendre la robotique.

 

Here are the videos of the SmartBot Mini which I talked in the previous article :
The first video shows the robot which is controlled by a small application. It uses the methods available in the SDK and allows to modify the speed of the robot in real time.
To talk about performance, the robot can modify its speed from 10 mm/s to 70 mm/s and of course 0 mm/s when it is stopped ;-).

Voici les vidéos du SmartBot Mini dont j’avais parlé dans l’article précédent :
La première vidéo présente le robot piloté par une petite application de télécommande. Elle utilise les commandes disponibles dans le SDK et permet de modifier la vitesse du robot en live.
Au niveau performance, le robot peut faire varier sa vitesse de 10 mm/s à 70 mm/s et bien sur 0 mm/s à l’arrêt ;-).

The SDK runs on Windows Phone and Android for now. We can see the remote app on a HTC Mozart 7 (Windows Phone Mango 7.5) and a Samsung galaxy S WIFI 5.0 tablet (Android 2.3.5).

Le SDK tourne sur Windows Phone et Android pour le moment. On peut voir l’application Remote sur un HTC Mozart 7 (Windows Phone Mango 7.5) ainsi que sur un Samsung galaxy S WIFI 5.0 tablet (Android 2.3.5).

Here are two others videos that show an object tracking app.
The first one follows a red object and rotate to stay in front of it. The algorithm works like that :

Voilà maintenant 2 vidéos qui montrent une application de tracking d’objets.
La première suit un objet rouge et pivote pour rester en face. L’algorithme fonctionne de la façon suivante :
On the picture (YCbCr format) from the camera (640*480),

  • I extract the Cr channel (red component).
  • Downscaling by 8.
  • Thresholding.
  • 3x Dilate (Kernel 3×3).
  • 3x Erode (Kernel 3×3).
  • Segmentation of the binarised picture by labelisation.
  • Extraction of the biggest blob.
  • Drawing of a red cross in overlay on the biggest blob and blue cross on the others.
  • Control of the robot depending of the biggest blob position.

Final performance about 2 fps.

The second video shows the tracking of a blue object. The technic is different, the idea is to scan a row of the picture instead of the entire picture. The row is from 8*480 pixels on the 640*480 of the picture.

  • Extraction of the Cb channel (blue component).
  • Extraction of the row of pixel.
  • Thresholding
  • 3x Dilate (Kernel 3×3).
  • 3x Erode (Kernel 3×3).
  • Segmentation of the binarised picture by labelisation.
  • Extraction of the biggest blob.
  • Drawing of a red cross in overlay on the biggest blob and blue cross on the others.
  • Control of the robot depending of the biggest blob position and of the width of the blob.

Final performance about 3 fps.

Après avoir récupéré l’image au format YCbCr de la camera (640*480),

  • J’extrais le canal Cr (composante rouge).
  • Downscaling par 8.
  • Seuillage sur ce canal.
  • 3x Dilatation (noyau 3×3).
  • 3x Erosion (noyau 3×3).
  • Segmentation de l’image binarisée par labellisation.
  • Récupération du plus gros blob.
  • Dessin d’une croix rouge en overlay sur le plus gros blob et bleu sur les autres.
  • Commande du robot en fonction de la position du plus gros blob.

Performance finale environ 2 fps.

La deuxième vidéo suit un objet bleu. La technique est différente. Ici, l’idée est de scanner une bande de l’image. La bande est de 8*480 pixels sur les 640*480.

  • Extraction du canal Cb (Composante bleue).
  • Récupération de la bande de pixels
  • Seuillage
  • 3x Dilatation (noyau 3×3).
  • 3x Erosion (noyau 3×3).
  • Segmentation de l’image binarisée par labelisation.
  • Récupération du plus gros blob.
  • Dessin d’une croix rouge en overlay sur le plus gros blob et bleu sur les autres.
  • Commande du robot en fonction de la position du plus gros blob et de sa largeur.

Performance finale environ 3 fps.

There will be some big surprises (already in progress) for the SmartBot Mini. I will reveal them in the following weeks.
And Yes, for those who ask about it, I will commercialize this robot when it will be ready and that will be at low cost.
Il y aura quelques grosses surprises (déjà en préparation) pour le SmartBot Mini. Je les révélerai dans les semaines qui viennent.
Et Oui, pour ceux qui posent la question, je vais commercialiser ce robot dès qu’il sera prêt et ce sera low cost.

 

Here is my new dev : SmartBot Mini : A mini robot for Smartphone.
Smartphone are now equipped with a full list of high tech sensors (GPS, 3 axis accelerometer, gyro, compass, camera, microphone). It brings also sound production, vibration and a large tactile screen.
By adding at least a pair of wheels, it turns your smartphone into a powerful robot.
SmartBot mini is a very small robot with a smartphone brain. It is equipped with 2 caterpillar tracks, 2 DC gear motors, an homemade analog PCB which is a dual motor driver with full speed control controlled by smartphone and it is powered by 2*AAA batteries. I want to thank my friend Florian for his help on the controller.
This new PCB allows the robot to be controlled by the smartphone. It doesn’t use the Windows Phone serial  port cable that I have designed earlier and it works with no micro-controller. The PCB is equipped with some additionnal outputs which give the ability to control some additionnal actuators with the smartphone.
The robot works with Smartphone under Windows Phone and Android for now and I will add IOS and Blackberry OS compatibility later.
It is design to accept even the biggest Windows Phone available like the HTC HD7 or the HTC TITAN.

Voilà mon nouveau dev : SmartBot Mini : un mini robot pour Smartphone.
Les smartphones sont maintenant équipés avec une liste complète de capteurs high tech (GPS, accéléromètre 3 axes, gyroscope, boussole, camera, microphone). Ils apportent également la capacité à produire du son, des vibrations et un large écran tactile. En ajoutant une paire de roue, cela transforme le smartphone en une puissante plateforme robotique.
Smartphone mini est un très petit robot avec un smartphone pour cerveau. Il est équipé de deux chenilles, 2 moto-réducteurs DC, une carte analogique faite maison qui est un driver double canal pour moteur DC avec contrôle total de la vitesse contrôlé par smartphone. Le tout est alimenté par 2 piles AAA. Merci à mon pote Florian pour son aide sur le contrôleur.
Ce contrôleur permet au robot d’être piloté par le smartphone. Il n’utilise pas le câble série pour Windows Phone que j’ai conçu précédemment et fonctionne sans micro-contrôleur. Il est également équipé de sorties supplémentaires permettant au smartphone de contrôler des actionnaires additionnels.
Le robot marche avec des smartphones sous Windows Phone et Android pour l’instant et j’ajouterai la compatibilité avec IOS et Blackberry OS plus tard.
Le robot est conçu pour accepter même les plus gros Windows Phone disponibles comme le HTC HD7 ou le HTC TITAN.






The SDK allows to control the robot with 7 different kind of actions :
Le SDK permet de contrôler le robot avec 7 différents type d’actions :

 public void GoForward(byte Speed) //Go forward with speed control
 public void GoBackward(byte Speed) //Go backward with speed control
 public void GoLeft(byte Speed) //Go Left with speed control
 public void GoRight(byte Speed) //Go Right with speed control
 public void Stop() //Stop
 public void Sing(byte message) //Sing with a list of short singing message
 public void ChangeSpeed(Byte Speed) //Change the speed value during a motion

I will add a video of the SmartBot mini during the week.
J’ajouterai une vidéo du SmartBot mini au cours de la semaine.


With the new Windows Phone Mango OS, WP developpers have now access to the Windows Phone camera API. It allows a ton of new robot control strategies like :
- Face tracking
- Object tracking
- Face recognition
- Light tracking
- OCR
- Tag reading (data matrix, bar code, …)
- Edge detection for maze resolver
- Line follower
and it allows to create strong interacting robot.

Avec le nouvel OS Windows Phone Mango, les développeurs WP ont maintenant accès à l’API de la camera. Cela permet une tonne de nouvelles stratégies de contrôle du robot comme :
– Suivi de tête
– Suivi d’objet
– Reconnaissance faciale
– Suivi de lumière
– Reconnaissance de caractères
– Lecture de tag (data matrix, code barre, …)
– Détection de contours pour solveur de labyrinthe
– Suiveur de ligne
et cela permet la création de robot vraiment interactif.

I have started a Windows Phone Image Processing library. Here is the list of available image processing methods that I have already implemented inside :
J’ai commencé une librairie de traitement d’images pour Windows Phone. Voilà une liste des méthodes disponibles que j’ai déjà implémenté à l’intérieur :

 public int[] ConvertYtoColor(byte[] YData) //Convert Y data from YCbCr to ARGB int info in order to display it
 public byte[] Thresholding(byte[] YData, int threshVal)
 public byte[] Negative(byte[] YData)
 public byte[] Erode(byte[] YData, int PicWidth, int PicHeight) //morphological operation
 public byte[] Dilate(byte[] YData, int PicWidth, int PicHeight) //morphological operation
 public byte[] FiltreConvolution(byte[] YData, int PicWidth, int PicHeight) //Convolution filter (Kernel) like Laplace, Gauss or gradient filter.
 public int[] Histogram(byte[] YData)
 public byte[,] Convert1DTo2D(byte[] YData, int PicWidth, int PicHeight)
 public int[] DrawCross(int[] Data, int posX, int PosY, int crossSize, int PicWidth, int PicHeight) //Adding a cross overlay to localize blob in the picture
 public List<WPBotsImProcSegInfo> Segmentation1(byte[] YData, int PicWidth, int PicHeight) //Blob detection
 public List<WPBotsImProcSegInfo> Segmentation2(byte[] YData, int PicWidth, int PicHeight) //Blob detection
 public void ConvertYCbCrToComprehensiveYCbCr(YCbCrPixelLayout layout, byte[] currentPreviewBuffer, int PicWidth, int PicHeight, out byte[] YMatrix, out byte[] CrMatrix, out byte[] CbMatrix)
 public int YCbCrToArgb(byte y, int cb, int cr) //YCbCr to ARGB color domain
 public Point HeadTracking(byte[] YData, int PicWidth, int PicHeight)
 public Point RedBalloonTracking(byte[] YData, int PicWidth, int PicHeight)

Here is an small example of an live object tracking application. The goal : localize the red balloon and rotate in order to be always in front of it.
Voilà un petit exemple d’une application de tracking live d’objet. L’objectif : localiser le ballon rouge et pivoter de façon à se retrouver toujours en face de lui.

 

Rendez-vous dans une semaine ou deux pour des news sur un tout nouveau robot et sur le premier lot de câbles port série pour Windows Phone.
See you in one week or two for some news about a brand new robot and about the first batch of serial port cable for Windows Phone.

 

Pour résumer le dernier défi : l’idée était de réaliser une transmission série sans fil depuis le Windows Phone alors que l’OS ne propose pas le profil Bluetooth SPP. La proposition : Utiliser le profil Bluetooth A2DP pour streamer le signal envoyé au port série pour Windows Phone qui marche normalement sur le port audio du Smartphone.

To summarize the last challenge : The idea is to make a wireless transmission from the Windows Phone although the OS doesn’t propose the SPP Bluetooth profile. The proposal : Use the A2DP Bluetooth profile to stream the signal sent to the Windows Phone serial port which works usually on the audio port of the Smartphone .

Donc finalement, j’ai reçu le récepteur Bluetooth A2DP de chez Nokia (11j après …). Et ça ne marche pas !

Double problème :

  • Le récepteur s’active bien quand j’envoie de la musique mais pas quand j’envoie le signal série.
  • Quand j’envoie de très longues trames, la première trame passe mais le signal est modifié et donc les caractères envoyés sont mauvais.

En fouillant, on peut lire que le BH-111 de Nokia dispose d’un filtrage numérique (DSP) du signal permettant de traiter le son. Cela pourrait être la cause du problème numéro 2.

So finally, I have received the A2DP Bluetooth receiver from Nokia (11 days after …) And it doesn’t work !

Double trouble :

  • The receiver is well activated when I send some music but not when I send the serial signal.
  • When I send some very long frames, the first one is received but the signal is modified and so, characters sent are wrong.

By searching, We can read that the Nokia BH-111 has a numerical filter (DSP) of the signal allowing to treat the sound. That could be the cause of the second trouble.

Je décide d’acheter un autre modèle qui ne présente pas cette caractéristique : Le Sony Ericsson MW600.
Ce modèle est plus cher mais possède un écran OLED, une meilleure autonomie, la radio FM et est vraiment petit.

I decided to buy another receiver which does not present the same feature : The Sony MW600.
This receiver is more expensive but it has a OLED screen, a better autonomy, a FM radio and is really small.

Je recommence les tests. Ça ne marche toujours pas mais ça s’annonce un peu mieux.
Le récepteur ne s’active que lors de l’envoi de la première trame puis ne reçoit plus rien. Par contre, la trame qui passe est correcte (l’hypothèse du traitement du signal du Nokia se confirme).

Je m’attaque alors au problème restant, faire en sorte que le récepteur reçoive bien les trames sans se couper.
Vu que la musique est correctement streamer, mon hypothèse est que l’envoi d’un signal continu permet de garder le récepteur actif. Si l’envoi du son est trop court, alors le récepteur ne s’active pas (genre de filtrage de pic parasite).

Pour valider ceci, je génère un bruit blanc en temps réel. Le récepteur le reçoit sans problème et sans coupure à partir du moment où sa durée est suffisante. Hypothèse confirmée : en jouant un son continu, le récepteur reste connecté. Je peux donc utiliser un bruit blanc faible et continu de façon à garder la connexion.

Reste alors à mettre en place une façon d’envoyer mes signaux séries entre le bruit blanc.
Je modifie le soft pour générer des petits buffers PCM (105 ms) de bruit blanc faible amplitude que j’envoie sur le buffer audio du Windows Phone.
La faible amplitude permet de garder le récepteur actif sans être pris en compte par le port série pour Windows Phone connecté au récepteur et donc de ne pas générer de trame fantôme au repos.

Lorsque je veux envoyer une trame série, j’intercale le buffer PCM créé en temps réel contenant le message série dans la pile du buffer audio du Windows Phone. Le signal série arrive donc au niveau du récepteur sous forme de signal audio puis est convertit en signal RS232 TTL par le port série pour Windows Phone connecté au récepteur Bluetooth A2DP.

I start the test again. It still doesn’t work but it looks like it is a little bit better.
The receiver is activated only when the first frame is sent then nothing. On the other side, the frame which is sent is correct (the signal processing assumption from the Nokia receiver is confirmed).

I tackle the remaining trouble : Make that the receiver will receive every frame without cut off.
Because the music is properly streamed, my assumption is that the streaming of a continuous signal allows to keep the receiver activated. If the streaming is too short, so the receiver is not going to be activated (kind of filter for peak noise).

To validate this, I generate a white noise in real time. The receiver receives it without trouble and without cut off if the signal duration is sufficient. Assumption confirmed : by playing a continuous sound, the receiver stays connected. So I can use a low amplitude white noise in continuous in order to keep the connexion.

Remaining action : Put in place a way to send serial signals between the white noise.
I have changed the software to generate some small PCM buffers (105ms) of low amplitude white noise that I send on the Windows Phone audio buffer.
The low amplitude allows to keep the receiver activated without being taken into account by the Windows Phone serial port connected to the receiver and So, not to generate ghost frame in standby.

When I want to send a serial frame, I interpose the PCM buffer created in real time containing the serial message into the Windows Phone audio buffer stack. The serial signal arrives to the receiver under an audio signal then it is converted into a TTL RS232 signal by the Windows Phone serial port connected the the A2DP Bluetooth receiver.

Évidemment tout ceci ne marche qu’en transmission avec les performances suivantes : RS232 TX niveau TTL 9600 bps sur 100m de portée (Bluetooth)
Les trames reçues sont très propres mais pas autant qu’avec la connexion sur le port audio du Smartphone qui est parfaite.
Il y a de temps en temps quelques caractères parasites qui sont générés en plus mais les caractères envoyés sont toujours reçu sans erreur.
Je pilote donc maintenant mon petit robot en Bluetooth avec Windows Phone. Mission accomplie!

Pour le prochain article, un nouveau robot. Rendez-vous bientôt.

Obviously, all that things work only in transmission with the following performances : RS232 TX TTL Level 9600 bps over a 100m range (Bluetooth).
The received frames are very clean but not as clean as the ones with the connexion on the audio port of the Smartphone which are perfect.
There is from time to time some parasite characters which are generated in addition but the sent characters are always received without error.
So now, I control my little robot through Bluetooth with Windows Phone. Mission accomplished !

For the next article, a new robot. See you soon.