Je suis toujours intéressé par les systèmes d’exploitation en temps réel (RTOS) pour microcontrôleurs (MCU) grâce à mes expériences passées en µC/OS-II, mbed et FreeRTOS. Lorsque l’opportunité s’est présentée de mettre la main sur la carte RT-Thread Vision, grâce à l’équipe RT-Thread et à Raspberryme Software, j’étais ravi de l’essayer. Cette carte, une collaboration entre RT-Thread et Renesas, contient un puissant MCU Renesas RA8D1 Cortex-M85 et est préchargée avec le micrologiciel OpenMV. Le moteur MicroPython d’OpenMV vous permet de vous lancer directement dans le développement de vision embarquée, idéal pour expérimenter des tâches de vision par ordinateur. Mais le véritable pouvoir réside dans la capacité de RT-Thread à gérer les tâches très rapidement, ce que nous explorerons avec le développement C/C++ dans la deuxième partie. Cette première partie visera à vous familiariser avec le matériel utilisant le micrologiciel OpenMV, ce qui en fera un point d’entrée fluide pour les débutants. De plus, j’ai une collection d’autres cartes d’évaluation Renesas, vous pouvez donc être sûr que je vais également essayer RT-Thread sur celles-ci ! Restez à l’écoute!

La carte RT-Thread Vision est livrée avec du matériel parfait pour le développement de vision embarquée. Le cœur de la carte est un appareil photo de 5 mégapixels (OV5640) permettant de capturer des images et des vidéos de haute qualité. Il est également livré avec un stockage suffisant (8 Mo de flash et 32 Mo de SDRAM) pour stocker les données d’image. La carte intègre un microcontrôleur AT32F425 supplémentaire (ARM Cortex-M4) qui agit comme un débogueur DAP-Link, permettant une programmation et un débogage faciles via USB. Pour les besoins de connectivité sans fil, la carte RT-Thread Vision comprend un module WiFi RW007 séparé (Realtek RTL8710BN à l’intérieur) qui gère la communication via SPI/UART à l’aide de simples commandes AT. Cela le rend idéal pour les projets nécessitant un transfert ou un contrôle de données à distance. Et le meilleur ? Les schémas de la carte sont disponibles sur le référentiel officiel Github, ce qui permet aux développeurs expérimentés de personnaliser facilement le matériel pour leurs projets spécifiques.

Qu’est-ce que RT-Thread ?
Depuis ses débuts en 2006, RT-Thread RTOS s’est initialement concentré sur la fourniture d’un noyau léger adapté aux MCU aux ressources limitées. À mesure que le paradigme de l’Internet des objets (IoT) gagnait du terrain, RT-Thread a évolué vers une plate-forme logicielle intégrée complète. L’architecture RT-Thread offre désormais de riches couches de noyau, de middleware et de logiciel prenant en charge les systèmes de fichiers, les piles réseau et les composants GUI. De plus, RT-Thread prétend incorporer des mécanismes de sécurité couvrant plusieurs couches (assez intéressant mais cela devrait prendre du temps à explorer). J’ai également trouvé plusieurs projets RT-Thread intéressants répertoriés sur le site Web de Raspberryme Software : 25 $ Renesas « HMI Board », Art-Pi STM32H750 Cortex-M7 et 4 $ DshanMCU Pitaya Lite.

RT-Thread fonctionne bien avec une large gamme de MCU, des cœurs ARM classiques (ARM7/9/11) aux processeurs Cortex-M et Cortex-A modernes. Ce n’est pas difficile et peut même fonctionner avec les puces x86, RISC-V et MIPS32 ! Pour répondre à différents besoins, RT-Thread est disponible en deux versions. La version Nano réservée au noyau est parfaite pour les MCU aux ressources limitées (3 Ko de ROM et 1,2 Ko de RAM revendiqués). Pour les projets plus complexes, la version standard complète fournit un riche ensemble d’extras tels que des systèmes de fichiers, des outils de mise en réseau et même des progiciels populaires. Le projet RT-Thread fournit un SDK appelé RT-Thread Studio, vous permettant de choisir le matériel, de configurer le noyau, de choisir les outils dont vous avez besoin et d’intégrer des packages logiciels prédéfinis. Il utilise ensuite la chaîne d’outils GCC pour créer votre firmware. Mais si vous préférez un environnement différent, RT-Thread peut également exporter des projets pour les utiliser avec des IDE populaires tels que Keil MDK-ARM ou IAR.

Contrairement aux RTOS orientés MCU comme FreeRTOS, RT-Thread va encore plus loin. Il offre un riche ensemble de fonctionnalités prédéfinies telles que des systèmes de fichiers et des piles réseau, ce qui permet d’économiser du temps et des efforts lors de la création de projets complexes. Cela en fait une alternative solide aux systèmes d’exploitation volumineux comme Linux, qui peuvent s’avérer excessifs pour les MCU aux ressources limitées. Nous pouvons accéder à FinSH – un utilitaire de terminal – sur la carte RT-Thread Vision en connectant le port USB-DBG à un ordinateur, puis en utilisant un programme de terminal série comme TeraTerm (115200, 8, n, 1). Nous pouvons taper des commandes, telles que list thread pour vérifier les discussions actives.

Une autre fonctionnalité intéressante est le module dynamique qui peut importer des modules binaires (programmes .mo, bibliothèques .so) au moment de l’exécution. Cela rend votre logiciel plus flexible et adaptable. Imaginez créer de petits programmes et les charger sur le tableau quand vous en avez besoin, tout comme des applications sur votre smartphone ! Vous pouvez consulter un projet innovant sur Hackster.io qui démontre la compilation de code de type Arduino en binaires, leur stockage sur un système de fichiers et leur exécution en tant qu’applications dans RT-Thread. Malgré sa structure complète, une étude universitaire a révélé que les capacités de planification en temps réel de RT-Thread sont comparables à celles d’autres RTOS de premier plan comme FreeRTOS et uC-OS/II. Cela fait de RT-Thread un excellent choix pour les projets où le timing est crucial.
Le projet RT-Thread vend plusieurs cartes d’évaluation sur son site Web via AliExpress avec des prix allant de 29 $ à 49 $ pour l’option la plus puissante (prix vérifiés le 1er juin 2024).
- La carte RT-Thread Vision propose deux options : une carte pour caméra uniquement à 29 $ et une carte pour caméra et LCD à 39 $.
- Carte ART-Pi avec un microcontrôleur STM32H750 Cortex-M7 (49 $).
- La « carte HMI RT-Thread × Renesas × LVGL » utilise le microcontrôleur Renesas RA6M3 et fonctionne avec la bibliothèque graphique LVGL pour l’interface graphique intégrée. Le prix d’un kit comprenant la carte et un écran de 4,3 pouces est de 36 $.
Ces cartes abordables suggèrent que le projet RT-Thread positionne ces cartes d’évaluation pour encourager les développeurs à explorer et à adopter leur plate-forme RTOS.

Microcontrôleur Renesas RA8D1
Bien que l’architecture ARM Cortex-M soit toujours présente, les options de base s’étendent au-delà des séries à un chiffre comme M0 ~ M7. Avec l’apparition de séries à deux chiffres comme M33 et M55, les changements d’architecture reflètent les besoins croissants des appareils IoT, qui nécessitent une sécurité renforcée et la capacité de gérer des tâches d’intelligence artificielle (IA). Renesas entre dans l’arène des MCU hautes performances avec la série RA8. Cette centrale dispose d’un cœur ARM Cortex-M85 32 bits avec Helium MVE (M-Profile Vector Extension) pour les applications de traitement du signal numérique (DSP) et d’apprentissage automatique (ML). Cela se traduit par un traitement plus rapide et la capacité d’aborder des tâches plus complexes pour des projets IoT de pointe. La série RA8 défie d’autres offres hautes performances telles que le STM32H7 de ST Microelectronics, le PSOC Edge E84 d’Infineon et le nRF7002 de Nordic Semiconductor.

Je suis très impressionné par le Renesas RA8D1 qui alimente la carte RT-Thread Vision. Le MCU Renesas RA8D1 qui alimente la carte RT-Thread Vision comprend un contrôleur LCD et un moteur de dessin graphique 2D au-dessus de l’interface de la caméra CEU. Ces fonctionnalités, combinées à la puissance des fonctionnalités DSP et ML, font du RA8D1 un excellent choix pour les projets de vision embarquée et d’informatique de pointe. La meilleure partie? La carte RT-Thread Vision vous permet d’essayer pour seulement 29 $, soit une fraction du coût de la carte d’évaluation EK-RA8D1 (332 $). Bien sûr, il lui manque peut-être le port Ethernet de la carte officielle, mais c’est un petit compromis pour un point d’entrée aussi abordable.

Il existe de facto des connecteurs standard pour le prototypage, ce qui facilite l’échange de composants et la création rapide de projets. Les options familières incluent Grove de SeeedStudio, Pmod de Digilent et les connecteurs de groupe multibroches trouvés sur les boucliers Arduino et les HAT Raspberry Pi. La carte RT-Thread Vision opte pour un connecteur polyvalent compatible Raspberry Pi HAT qui comprend des interfaces couramment utilisées telles que UART, SPI, I2C et PWM. La beauté réside dans sa compatibilité : vous pouvez exploiter les Raspberry Pi HAT existants avec la carte RT-Thread Vision. De plus, le connecteur à code couleur (rouge pour 5 V, jaune pour 3,3 V, etc.) simplifie ces connexions initiales, vous permettant d’économiser du temps et de la frustration lorsque vous donnez vie à votre projet.
Premiers pas avec OpenMV sur la carte RT-Thread Vision
Je suis particulièrement impressionné par l’inclusion d’OpenMV en tant que progiciel préchargé sur la carte RT-Thread Vision. OpenMV est un choix populaire pour les projets de vision embarquée, en particulier parmi les étudiants et les amateurs de robotique mobile. Avec OpenMV gérant des tâches de traitement d’image telles que le suivi de ligne ou la détection d’objets, la carte RT-Thread Vision devient un noyau puissant pour construire un cerveau de robot mobile. Ceci, combiné à la taille compacte et au prix abordable de la carte RT-Thread Vision, en fait une plate-forme convaincante pour construire des robots mobiles économiques.
OpenMV a été créé pour combler une lacune sur le marché des tableaux de vision embarqués à la fois programmables et faciles à utiliser. Pour ce faire, il exploite MicroPython, une version simplifiée de Python conçue pour les MCU. La facilité d’utilisation d’OpenMV et ses puissantes fonctionnalités de traitement d’image en font un choix populaire pour la construction de robots. La facilité d’utilisation d’OpenMV s’étend au-delà du langage de codage lui-même. L’IDE OpenMV fournit un environnement convivial pour développer vos projets de vision. En se connectant au port USB-OTG, l’IDE fonctionne comme un éditeur de code, vous permettant d’écrire et d’éditer vos scripts MicroPython. Mais ce n’est pas tout! L’IDE propose également une fonction de prévisualisation d’image intégrée, vous permettant de voir ce que voit votre caméra en temps réel. Cela facilite la visualisation et l’affinement de vos algorithmes de traitement d’image. De plus, l’EDI fournit des outils pour vérifier les caractéristiques de l’image telles que les histogrammes de couleurs et les statistiques d’images, facilitant ainsi le processus de développement.

Le firmware OpenMV est construit comme une bibliothèque dans un environnement MicroPython. Nous pouvons écrire du code Python (sous-ensemble) pour capturer des images de la caméra à l’aide du module capteur et effectuer un traitement d’image à l’aide du module image. Une structure de code simplifiée est similaire au code Arduino, c’est-à-dire une section de configuration pour que tout soit prêt et une boucle principale qui s’exécute en continu. L’exemple de code suivant montre comment détecter des objets à l’aide de la méthode find_blobs(). Quiconque souhaite explorer davantage de fonctionnalités OpenMV sur la carte RT-Thread Vision peut consulter ce lien YouTube démontrant plusieurs capacités de détection basées sur la vision.
import sensor import time sensor.reset() # Réinitialise et initialise le capteur. sensor.set_pixformat(sensor.RGB565) # Définissez le format de pixel sur RGB565 (ou GRAYSCALE) sensor.set_framesize(sensor.QVGA) # Définissez la taille d’image sur QVGA (320×240) sensor.skip_frames(time=2000) # Attendez que les paramètres prennent effet. clock = time.clock() # Crée un objet horloge pour suivre le FPS. seuils = [(0, 100, 56, 95, 41, 74), # generic_red_thresholds
(0, 100, -128, -22, -128, 99), # generic_green_thresholds
(0, 100, -128, 98, -128, -16)] # generic_blue_thresholds while True : clock.tick() # Mettre à jour l’horloge FPS. img = sensor.snapshot() # Prenez une photo et renvoyez l’image. Bs = img.find_blobs(thresholds) # trouver des objets avec des seuils de couleur pour b dans Bs : # dessiner une boucle sur les blobs détectés img.draw_rectangle(b[0]b[1]b[2]b[3]) print(clock.fps()) # imprimer les performances FPS
|
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 |
importer un capteur heure d’importation sensor.reset() # Réinitialise et initialise le capteur. sensor.set_pixformat(sensor.RGB565) # Définir le format de pixel sur RGB565 (ou GRAYSCALE) sensor.set_framesize(sensor.QVGA) # Définir la taille de l’image sur QVGA (320×240) sensor.skip_frames(time=2000) # Attendez que les paramètres prennent effet. clock = time.clock() # Crée un objet horloge pour suivre le FPS. seuils = [(0, 100, 56, 95, 41, 74), # generic_red_thresholds (0, 100, -128, -22, -128, 99), # generic_green_thresholds (0, 100, -128, 98, -128, -16)] # generic_blue_thresholds tandis que Vrai : clock.tick() # Mettre à jour l’horloge FPS. img = sensor.snapshot() # Prenez une photo et renvoyez l’image. Bs = img.find_blobs(thresholds) # trouver des objets avec des seuils de couleur for b in Bs : # dessin de boucle sur les blobs détectés img.draw_rectangle(b[0]b[1]b[2]b[3]) print(clock.fps()) # imprimer les performances FPS |

Analyse comparative du tableau de vision RT-Thread
La carte RT-Thread Vision est dotée du dernier Renesas RA8D1 avec un cœur Arm Cortex-M85 de pointe, qui prétend être le processeur ARM Cortex-M le plus performant. Étant donné que la première partie de la test se concentre sur le prototypage rapide, mettons cette affirmation à l’épreuve au niveau de l’application. J’ai une carte WeAct STM32H743 avec une vitesse d’horloge similaire (480 MHz) et OpenMV installé. Cette configuration nous permet de comparer les performances des cœurs ARM Cortex-M à un chiffre et à deux chiffres. Dans ce benchmark, nous adopterons une approche simplifiée, en nous concentrant sur les images par seconde (FPS) tout en exécutant le même code avec un aperçu de la caméra en direct. Les deux cartes utilisent leurs propres caméras pour la capture d’images : la carte RT-Thread Vision dispose d’un capteur OV5640, tandis que la WeAct STM32H743 utilise un OV2640. Cela nous donnera une comparaison réelle de la façon dont ces deux architectures principales gèrent les tâches de traitement d’image.

La connexion de l’IDE OpenMV aux cartes a révélé une légère différence dans la façon dont elles sont reconnues par le logiciel. La carte RT-Thread Vision apparaît sous le nom d’OpenMV Cam M4 version 4.5.0, indiquant que le micrologiciel a probablement été construit avec les paramètres ARM Cortex-M4. Alors que la carte WeAct STM32F743 est considérée comme OpenMV Cam M7 version 4.4.1. Cela pourrait influencer les résultats du benchmark, car le micrologiciel de la carte RT-Thread Vision peut être limité par rapport à la carte WeAct. Nous garderons cela à l’esprit lors de l’interprétation des données. Pour évaluer les performances dans le monde réel, nous évaluerons trois tâches de vision clés :
- Capture d’image brute pour tester les performances de l’interface de la caméra.
- Détection de blob pour tester la capacité de traitement d’image.
- Détection de visages pour tester le calcul des données circulant le long du pipeline Haar Cascade.


Notez que la carte RT-Thread Vision est un peu désavantagée dans ce benchmark car le firmware a été construit avec une architecture plus ancienne. Étonnamment, la carte RT-Thread Vision a obtenu de meilleurs résultats que la carte WeAct dans les tâches de détection de blob et de détection de visage. Cela suggère que la vitesse de traitement plus rapide du cœur Arm Cortex-M85 compense les limitations potentielles observées lors du test de capture d’image brute (18,0 FPS < 26,5 FPS). Nos résultats concordent avec les scores CoreMark, où le RA8D1 avec le cœur M85 atteint un score plus élevé (6,38 CoreMark/MHz) que le STM32H743 avec le cœur M7 (5,05 CoreMark/MHz). Imaginez les performances potentielles si le firmware OpenMV était entièrement optimisé pour utiliser les capacités du cœur M85 ! Nous avons pu constater une différence de performances plus significative en faveur de la carte RT-Thread Vision pour ces tâches de traitement d'image.
Et après?
La carte RT-Thread Vision a retenu notre intérêt avec son puissant MCU et son logiciel OpenMV préchargé. Nous avons exploré son potentiel de prototypage et l’écart de performances entre les cœurs ARM Cortex-M. Mais le voyage continue ! Ensuite, nous plongerons dans le monde des fonctionnalités RTOS à l’aide de RT-Thread Studio. Nous analyserons les fonctionnalités spécifiques offertes par RT-Thread : comment ils gèrent les progiciels au-delà des simples tâches de vision.
Notre objectif est SQLite, un système de gestion de bases de données populaire. L’inclusion de bases de données dans les applications MCU offre plusieurs avantages : un stockage et une récupération efficaces des données, une intégrité améliorée des données et une évolutivité pour gérer des volumes de données croissants. Nous explorerons comment RT-Thread facilite l’utilisation de SQLite et d’autres composants logiciels, nous donnant une compréhension plus approfondie du fonctionnement interne de la carte RT-Thread Vision et de la manière dont elle gère l’interaction matériel-logiciel pour une exécution fluide.
Retrouvez l’histoire de Raspberry Pi dans cette vidéo :

-
ZLXCAOB 1 pièces Petit Dispositif de Gravure de Test par Lots pour Carte de développement de système Minimum ESP-WROOM-32
-
ZAICOLER Carte de Test D'amplificateur OPérationnel, Module de Test D'ampli OP PCB Stable pour Testeur Simple Double Quad pour LM741 LF356 NE5534 TL071 TL081
