Back | << | Index | >> |
La carte Nucleo F411 doit :
REMARQUE : Le paramètre ROS_DOMAIN_ID ( défini dans main.c ) sera à ajuster en fonction du numéro indiqué sur le Robot.
Stratégies d’utilisation de l’ADC
Les convertisseurs sont suffisamment rapides pour scruter la fin de conversion plutôt que de réagir à une interruption de fin de conversion qui prendrait plus de temps.
Initialisation :
Récupération de la Distance Mesurée :
REMARQUE : Les fonctions groveLCD_clear() ou groveLCD_home() prennent beaucoup de temps du fait des temporisations.
Il peut être plus intéressant d’utiliser groveLCD_setCursor(0,0) suivi de groveLCD_term_printf(), en gardant en tête que les fonctions d’affichage prennent du temps
( tout affichage ne doit pas perturber les autres éléments du robot ).
Du fait de la sérialisation, la gestion de l’envoi ou de la réception de données par l’ UART prend du temps.
Pour libérer le Processeur, le DMA ( Direct Memory Access ) permet de stocker directement en mémoire
les données reçues par l’UART, sans perturber le processeur.
Une fois la zone mémoire remplie, le processeur peut alors traiter l’ensemble des données disponibles ( sans attendre la réception de chaque caractère ).
Il en va de même pour l’émission : le processeur remplit une zone mémoire dédiée, et le DMA se charge de transmettre chaque caractère à l’UART, qui le sérialise.
La communication avec le RPI se fera au formalisme ROS2, la fonction rmw_uros_set_custom_transport() permet d’indiquer le périphérique UART utilisé par la bibliothèque microros
Les fonctions publish et subscribe permettent alors d’envoyer un message ou de s’abonner à la réception d’un message.
La fonction printf() est configurée pour envoyer des caractères au périphérique UART2.
En effet la fonction élémentaire __io_putchar() utilisée par printf() est redéfinie afin d’envoyer un caractère sur UART2 :
Côté PC Host
Un terminal série ( minicom ou gtkterm ) permet, côté PC, d’afficher le message :
REMARQUE : Afin de respecter la période d’échantillonage pour le contrôle des moteurs en boucle fermée, éviter de placer trop de printf dans le code ( cette fonction a un temps d’exécution non négligeable ).
Back | << | Index | >> |