!! Demenagement du site !! => http://smartrobotics.org/blog

A la suite de la coupe de France de robotique 2012, j’ai décidé de faire peau neuve au site internet et de changer d’adresse.

.

.

.

Voici donc la nouvelle adresse :  http://smartrobotics.org/blog

.

.

.

.

Implementation of ROS libraries on STM32F4

Les travaux sur le STM32F4 progressent !
Aprés avoir fait fonctionner un USART (les autres fonctionnent de la même manière mais je n’en ai pas besoin pour l’instant), ainsi que 2 decodeurs de signaux en quadrature (sur 32bits), je me suis attaqué aux interruptions.
Tout d’abord, une interruption timer pour pouvoir calculer l’odométrie régulierement et faire l’asservissement.
Ensuite, une des interruptions de l’USART pour la reception des datas. Lorsqu’une data arrive sur l’uart, une interruption est déclenchée. Je mets alors la data dans un buffer circulaire pour pouvoir l’utiliser plus tard. Ceci permet de ne pas avoir de “lecture bloquante”.

Une fois tout ceci fonctionnel, je me suis attaqué à implémenter les libraries ROS sur le STM32F4.
Le code est totalement en C++, et est donc compilable sur l’architecture.
Il faut juste re implémenter les quelques fonctions de communication. J’ai donc utilisé l’USART2 pour communiquer les messages spécifiques avec le pc, et maintenant tout ceci fonctionne.

Voici une démonstration ou le STM32 calcul la position du robot avec une entrée de codeur, et envoie un message ROS au pc, qui l’affiche :

L’implémentation sur la carte avance :
Faire marcher un UART / DONE
Faire fonctionner 2 entrée de codeur en quadrature / DONE
Faire fonctionner une interruption de timer / DONE
Implémenter la librairie de communication avec ROS / DONE
– Utiliser les interruptions de l’UART / STARTED
– Implémenter l’asservissement / STARTED
– Faire fonctionner une interruption externe / TODO
– Faire fonctionner l’USB en mode port série / TODO

Arrivée des cartes STM32F4 !

Aprés avoir utilisé des microcontroleurs Atmel pendant plusieurs années, j’ai décidé de passer aux STM32F4. (convaincu par les bons conseils de l’APBTeam ! )

J’ai donc commandé 2 cartes d’évaluation (au cas ou) pour effectuer des tests.

Voici les caracteristiques principales qui m’interessent :

– Core: ARM 32-bit Cortex™-M4 CPU with FPU, Adaptive real-time accelerator (ART Accelerator™) allowing 0-wait state execution from Flash memory, frequency up to 168 MHz, memory protection unit, 210 DMIPS/1.25 DMIPS/MHz (Dhrystone 2.1), and DSP instructions
– Up to 17 timers: up to twelve 16-bit and two 32-bit timers up to 168 MHz, each with up to 4 IC/OC/PWM or pulse counter and quadrature (incremental) encoder input
– Up to 15 communication interfaces
– USB 2.0 full-speed device/host/OTG controller with on-chip PHY

STM32F4 portée par L'Indomptable

STM32F4 portée par L’Indomptable

Le but de cette carte va donc etre de faire l’asservissement du robot (grâce aux compteurs interne, alors que c’était fait en software sur l’Atmel) ainsi que l’utilisation des I/O pour s’interfacer facilement avec des relais/capteurs. Etant donné son grand nombre d’entrée pour codeur en quadrature, je pourrais meme asservir d’autres moteurs (pas de propulsion) grâce à cette carte.

Les étapes à effectuer sont :
Faire marcher un UART / FAIT
Faire fonctionner 2 entrée de codeur en quadrature / FAIT
Faire fonctionner une interruption de timer / FAIT
– Utiliser les interruptions de l’UART
– Faire fonctionner une interruption externe / TODO
– Faire fonctionner l’USB en mode port série / TODO
– Implémenter la librairie de communication avec ROS / TODO
– Implémenter l’asservissement / TODO

Pour l’instant, la carte commence à être prise en main et à montrer ses possibilités. Je pense que c’était un bon choix et remercie ceux qui m’en ont parlé !

A bientot pour peut-etre une vidéo du robot asservit par le STM32 !

Detection automatique de couleur et prise d’objets.

Pour être capable de trouver des objets de manière autonome (ou voler l’adversaire ! 😉 ), j’ai équipé le robot d’une caméra.

J’ai ensuite utilisé OpenCV pour le traitement d’image.
Une premiere étape de calibration est fait au début du match (on montre un CD et un lingot au robot), ensuite, le robot fait une binarisation sur la couleur des CD et une binarisation sur la couleur des lingots.
Il calcul enfin le barycentre des objets.

Si le module vision est mis en mode “autonome”, le module envoit automatiquement la position de l’objet au module des bras.

Dans la vidéo, le robot mets un peu de temps pour prendre les objets car j’ai mis une latence pour que ce soit plus visible (il attends d’avoir vu l’objets sur 40images d’affilé, en match, ca sera plutot 10) :

Driver ROS pour centrale inertielle CH6dm.

Il y a un moment, j’avais acheté une centrale inertielle pour mon hexapod ( https://smartrobotics.wordpress.com/2010/08/22/test-of-an-imu-on-the-hexapod-roll-and-pitch-adaptation/ ).

Utilisant maintenant ROS, je me suis dit qu’il était temps de faire un petit driver au cas ou je la réutilise pour d’autres projets futurs.

Les sources sont disponible ici : https://github.com/JBot/smart-ros-pkg

Et une vidéo ici :

L’Indomptable : Intelligence artificielle

N’ayant que peu de temps pour le robot en ce moment, j’ai juste eut le temps de vaguement regler l’odométrie (encore trop peu précis).
Je suis ensuite passé à l’écriture de l’intelligence du robot. Celle-ci est assez basique.

Elle est basée sur une liste d’objectif interessant avec pour chaque objectifs une priorité (dépendant du nombre de points que ça apporte, de la difficulté de réalisation et du temps).

On calcul ensuite la distance necessaire pour atteindre chaque objectifs et on ajoute l’inverse de la distance pour privilégier les objectifs proches (Si une distance est nulle, c’est qu’un objectif est inateignable a cause d’un adversaire déja présent sur l’objectif par exemple).

Voici une petite vidéo avec le mode débug pour montrer les trajets vers les objectifs et le meilleur objectif calculé. (calcul des trajets ralenti pour la démo)

L’Indomptable : Simulation des bras.

Voici la simulation des 2 bras du robot sur le terrain 2012.
Ce sont des premiers tests pour voir si les bras peuvent bien aller dans les endroits souhaités.

Tout le calcul est fait par le soft qui sera dans le robot, les messages finaux sont juste envoyés au simulateur au lieu d’etre envoyés aux moteurs.

La vidéo :