Partage de technologie

Tutoriel sur le système de navigation du robot intelligent STM32

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Table des matières

  1. introduction
  2. Préparation environnementale
  3. Bases du système de navigation robot intelligent
  4. Implémentation du code : Implémentation d'un système de navigation robot intelligent 4.1 Module de collecte de données 4.2 Traitement des données et algorithme de navigation 4.3 Implémentation du système de communication et de réseau 4.4 Interface utilisateur et visualisation des données
  5. Scénarios d'application : application et optimisation de la navigation du robot
  6. Résolution de problèmes et optimisation
  7. Clôture et résumé

1. Introduction

Le système de navigation intelligent du robot combine divers capteurs, actionneurs et modules de communication via le système intégré STM32 pour réaliser une planification en temps réel, une navigation automatique et une transmission de données de la trajectoire du robot. Cet article présentera en détail comment implémenter un système de navigation robot intelligent dans le système STM32, y compris la préparation de l'environnement, l'architecture du système, la mise en œuvre du code, les scénarios d'application, les solutions aux problèmes et les méthodes d'optimisation.

2. Préparation de l'environnement

Préparation du matériel

  1. Tableau de développement: Carte de développement série STM32F4 ou série STM32H7
  2. débogueur: ST-LINK V2 ou débogueur intégré
  3. capteur: Tels que lidar, capteur infrarouge, IMU, etc.
  4. Actionneur: Tels que les moteurs, les appareils à gouverner, etc.
  5. Module de communication: Tels que le module Wi-Fi, le module Bluetooth, etc.
  6. Afficher: Tel que l'écran OLED
  7. Bouton ou bouton: utilisé pour la saisie et les paramètres de l'utilisateur
  8. source de courant:Batterie

Préparation du logiciel

  1. Environnement de développement intégré (IDE): STM32CubeIDE et Keil MDK
  2. Outils de débogage:Utilitaire STM32 ST-LINK ou GDB
  3. Bibliothèques et middleware:Bibliothèque STM32 HAL et bibliothèque FATFS

étapes d'installation

  1. Téléchargez et installez STM32CubeMX
  2. Téléchargez et installez STM32CubeIDE
  3. Configurez le projet STM32CubeMX et générez le projet STM32CubeIDE
  4. Installer les bibliothèques et les pilotes nécessaires

3. Bases du système de navigation robot intelligent

Architecture du système de contrôle

Le système de navigation du robot intelligent se compose des éléments suivants :

  1. Module d'acquisition de données: Utilisé pour collecter la distance, l'attitude et d'autres données dans l'environnement du robot
  2. Module de traitement des données et d'algorithme de navigation: Traiter et analyser les données collectées et exécuter des algorithmes de navigation
  3. Systèmes de communication et de réseau: Réaliser la communication entre les robots et les serveurs ou autres appareils
  4. système d'affichage: Utilisé pour afficher l'état du système et les informations de navigation
  5. système de saisie utilisateur: Paramètres et ajustements via des boutons ou des molettes

Description de la fonction

Les données clés de l'environnement du robot sont collectées via divers capteurs et affichées sur l'écran OLED en temps réel. Le système réalise la planification et la navigation en temps réel de la trajectoire du robot grâce à l'algorithme SLAM (Simultaneous Positioning and Map Construction) et à la communication réseau. Les utilisateurs peuvent effectuer des réglages via des boutons ou des boutons et afficher l'état actuel via l'écran.

4. Implémentation du code : implémentation d'un système de navigation robot intelligent

4.1 Module d'acquisition de données

Configurer le lidar

Utilisez STM32CubeMX pour configurer l'interface UART :

  1. Ouvrez STM32CubeMX et sélectionnez votre modèle de carte de développement STM32.
  2. Dans l'interface graphique, recherchez la broche UART qui doit être configurée et réglez-la en mode UART.
  3. Générez du code et importez-le dans STM32CubeIDE.

Code:

  1. #include "stm32f4xx_hal.h"
  2. #include "usart.h"
  3. #include "lidar.h"
  4. UART_HandleTypeDef huart1;
  5. void UART1_Init(void) {
  6. huart1.Instance = USART1;
  7. huart1.Init.BaudRate = 115200;
  8. huart1.Init.WordLength = UART_WORDLENGTH_8B;
  9. huart1.Init.StopBits = UART_STOPBITS_1;
  10. huart1.Init.Parity = UART_PARITY_NONE;
  11. huart1.Init.Mode = UART_MODE_TX_RX;
  12. huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  13. huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  14. HAL_UART_Init(&huart1);
  15. }
  16. void Read_Lidar_Data(float* distance) {
  17. Lidar_Read(distance);
  18. }
  19. int main(void) {
  20. HAL_Init();
  21. SystemClock_Config();
  22. UART1_Init();
  23. float distance;
  24. while (1) {
  25. Read_Lidar_Data(&distance);
  26. HAL_Delay(100);
  27. }
  28. }
Configurer l'IMU

Utilisez STM32CubeMX pour configurer l'interface I2C :

  1. Ouvrez STM32CubeMX et sélectionnez votre modèle de carte de développement STM32.
  2. Dans l'interface graphique, recherchez la broche I2C qui doit être configurée et réglez-la en mode I2C.
  3. Générez du code et importez-le dans STM32CubeIDE.

Code:

  1. #include "stm32f4xx_hal.h"
  2. #include "i2c.h"
  3. #include "mpu6050.h"
  4. I2C_HandleTypeDef hi2c1;
  5. void I2C1_Init(void) {
  6. hi2c1.Instance = I2C1;
  7. hi2c1.Init.ClockSpeed = 100000;
  8. hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
  9. hi2c1.Init.OwnAddress1 = 0;
  10. hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  11. hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  12. hi2c1.Init.OwnAddress2 = 0;
  13. hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  14. hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  15. HAL_I2C_Init(&hi2c1);
  16. }
  17. void Read_IMU_Data(float* accel, float* gyro) {
  18. MPU6050_ReadAll(accel, gyro);
  19. }
  20. int main(void) {
  21. HAL_Init();
  22. SystemClock_Config();
  23. I2C1_Init();
  24. MPU6050_Init();
  25. float accel[3], gyro[3];
  26. while (1) {
  27. Read_IMU_Data(accel, gyro);
  28. HAL_Delay(100);
  29. }
  30. }

4.2 Traitement des données et algorithmes de navigation

Le module de traitement des données convertit les données du capteur en données pouvant être utilisées dans le système de contrôle et effectue les calculs et analyses nécessaires.

Algorithme SLAM

Implémentez un algorithme SLAM simple pour la navigation des robots :

  1. typedef struct {
  2. float x;
  3. float y;
  4. float theta;
  5. } RobotPose;
  6. RobotPose current_pose = {0.0f, 0.0f, 0.0f};
  7. void SLAM_Update(RobotPose* pose, float* distance, float* accel, float* gyro, float dt) {
  8. // 数据处理和SLAM算法
  9. // 更新机器人的位姿
  10. pose->x += accel[0] * dt * dt;
  11. pose->y += accel[1] * dt * dt;
  12. pose->theta += gyro[2] * dt;
  13. }
  14. int main(void) {
  15. HAL_Init();
  16. SystemClock_Config();
  17. UART1_Init();
  18. I2C1_Init();
  19. MPU6050_Init();
  20. float distance;
  21. float accel[3], gyro[3];
  22. float dt = 0.01f;
  23. while (1) {
  24. Read_Lidar_Data(&distance);
  25. Read_IMU_Data(accel, gyro);
  26. SLAM_Update(&current_pose, &distance, accel, gyro, dt);
  27. HAL_Delay(10);
  28. }
  29. }

4.3 Mise en œuvre du système de communication et de réseau

Configurer le module Wi-Fi

Utilisez STM32CubeMX pour configurer l'interface UART :

  1. Ouvrez STM32CubeMX et sélectionnez votre modèle de carte de développement STM32.
  2. Dans l'interface graphique, recherchez la broche UART qui doit être configurée et réglez-la en mode UART.
  3. Générez du code et importez-le dans STM32CubeIDE.

Code:

  1. #include "stm32f4xx_hal.h"
  2. #include "usart.h"
  3. #include "wifi_module.h"
  4. UART_HandleTypeDef huart2;
  5. void UART2_Init(void) {
  6. huart2.Instance = USART2;
  7. huart2.Init.BaudRate = 115200;
  8. huart2.Init.WordLength = UART_WORDLENGTH_8B;
  9. huart2.Init.StopBits = UART_STOPBITS_1;
  10. huart2.Init.Parity = UART_PARITY_NONE;
  11. huart2.Init.Mode = UART_MODE_TX_RX;
  12. huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  13. huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  14. HAL_UART_Init(&huart2);
  15. }
  16. void Send_Data_To_Server(RobotPose* pose) {
  17. char buffer[64];
  18. sprintf(buffer, "Pose: x=%.2f, y=%.2f, theta=%.2f", pose->x, pose->y, pose->theta);
  19. HAL_UART_Transmit(&huart2, (uint8_t*)buffer, strlen(buffer), HAL_MAX_DELAY);
  20. }
  21. int main(void) {
  22. HAL_Init();
  23. SystemClock_Config();
  24. UART1_Init();
  25. UART2_Init();
  26. I2C1_Init();
  27. MPU6050_Init();
  28. float distance;
  29. float accel[3], gyro[3];
  30. float dt = 0.01f;
  31. while (1) {
  32. Read_Lidar_Data(&distance);
  33. Read_IMU_Data(accel, gyro);
  34. SLAM_Update(&current_pose, &distance, accel, gyro, dt);
  35. Send_Data_To_Server(&current_pose);
  36. HAL_Delay(1000);
  37. }
  38. }

4.4 Interface utilisateur et visualisation des données

Configurer l'affichage OLED

Utilisez STM32CubeMX pour configurer l'interface I2C :

  1. Ouvrez STM32CubeMX et sélectionnez votre modèle de carte de développement STM32.
  2. Dans l'interface graphique, recherchez la broche I2C qui doit être configurée et réglez-la en mode I2C.
  3. Générez du code et importez-le dans STM32CubeIDE.

Code:

Tout d’abord, initialisez l’écran OLED :

  1. #include "stm32f4xx_hal.h"
  2. #include "i2c.h"
  3. #include "oled.h"
  4. void Display_Init(void) {
  5. OLED_Init();
  6. }

Implémentez ensuite la fonction d'affichage des données pour afficher les données de navigation du robot sur l'écran OLED :

  1. void Display_Data(RobotPose* pose) {
  2. char buffer[32];
  3. sprintf(buffer, "x: %.2f", pose->x);
  4. OLED_ShowString(0, 0, buffer);
  5. sprintf(buffer, "y: %.2f", pose->y);
  6. OLED_ShowString(0, 1, buffer);
  7. sprintf(buffer, "theta: %.2f", pose->theta);
  8. OLED_ShowString(0, 2, buffer);
  9. }
  10. int main(void) {
  11. HAL_Init();
  12. SystemClock_Config();
  13. I2C1_Init();
  14. Display_Init();
  15. UART1_Init();
  16. I2C1_Init();
  17. MPU6050_Init();
  18. float distance;
  19. float accel[3], gyro[3];
  20. float dt = 0.01f;
  21. while (1) {
  22. Read_Lidar_Data(&distance);
  23. Read_IMU_Data(accel, gyro);
  24. SLAM_Update(&current_pose, &distance, accel, gyro, dt);
  25. // 显示机器人导航数据
  26. Display_Data(&current_pose);
  27. HAL_Delay(100);
  28. }
  29. }

5. Scénarios d'application : application et optimisation de la navigation du robot

Entrepôt automatisé

Les systèmes de navigation robotisés intelligents peuvent être utilisés dans les entrepôts automatisés pour améliorer l’efficacité et la précision de la manutention grâce à des itinéraires de planification et de navigation en temps réel.

Sécurité intelligente

Dans le domaine de la sécurité intelligente, les systèmes de navigation robotisés intelligents peuvent réaliser des patrouilles et une surveillance autonomes, améliorant ainsi les effets de sécurité.

navigation intérieure

Le système de navigation robot intelligent peut être utilisé pour la navigation intérieure, fournissant aux utilisateurs des services de navigation en créant des cartes et en planifiant des itinéraires en temps réel.

Fabrication intelligente

Les systèmes de navigation robotisés intelligents peuvent être utilisés dans la fabrication intelligente pour améliorer l’efficacité et la flexibilité de la production grâce à une navigation et un fonctionnement autonomes.

⬇Aidez tout le monde à organiser les informations sur les microcontrôleurs

Une collection de projets dont stm32 [code source + documents de développement]

Cliquez sur les mots bleus ci-dessous pour l'obtenir, merci pour votre soutien ! ⬇

Cliquez pour plus de détails intégrés

Pour discuter du problème, vous pouvez envoyer un message privé pour recevoir les informations stm32 !

 

6. Résolution de problèmes et optimisation

Questions fréquemment posées et solutions

Les données du capteur sont inexactes

Assurez-vous que la connexion entre le capteur et le STM32 est stable et calibrez régulièrement le capteur pour obtenir des données précises.

Solution : Vérifiez si la connexion entre le capteur et le STM32 est ferme, et ressoudez ou remplacez le fil de connexion si nécessaire. Dans le même temps, les capteurs sont calibrés régulièrement pour garantir des données précises.

Système de navigation instable

Optimisez l'algorithme de navigation et la configuration matérielle pour réduire l'instabilité du système de navigation et améliorer la vitesse de réponse du système.

Solution : optimisez l'algorithme SLAM, ajustez les paramètres et améliorez la précision et la stabilité du positionnement et de la construction de cartes. Utilisez des capteurs de haute précision pour améliorer la précision et la stabilité de la collecte de données. Choisissez un actionneur plus efficace pour améliorer la vitesse de réponse du système de navigation.

Le transfert de données a échoué

Assurez-vous que la connexion entre le module Wi-Fi ou Bluetooth et STM32 est stable, optimisez le protocole de communication et améliorez la fiabilité de la transmission des données.

Solution : Vérifiez si la connexion entre le module Wi-Fi ou Bluetooth et le STM32 est solide, et ressoudez ou remplacez le câble si nécessaire. Optimisez les protocoles de communication pour réduire les délais de transmission des données et les taux de perte de paquets. Choisissez un module de communication plus stable pour améliorer la fiabilité de la transmission des données.

L'écran affiche une anomalie

Vérifiez la ligne de communication I2C pour vous assurer que la communication entre l'écran et le MCU est normale afin d'éviter un affichage anormal dû à des problèmes de ligne.

Solution : Vérifiez si les broches I2C sont correctement connectées et assurez-vous que l'alimentation est stable. Utilisez un oscilloscope pour détecter le signal du bus I2C et confirmer si la communication est normale. Si nécessaire, remplacez l'écran ou le MCU.

Suggestions d'optimisation

Intégration et analyse des données

Intégrez davantage de types de données de capteurs et utilisez la technologie d’analyse des données pour prédire et optimiser les conditions environnementales.

Suggestion : ajoutez davantage de capteurs de surveillance, tels que des capteurs à ultrasons, des caméras de profondeur, etc. Utilisez des plateformes cloud pour l'analyse et le stockage des données afin de fournir des services de surveillance et de gestion environnementale plus complets.

Optimisation de l'interaction utilisateur

Améliorez la conception de l'interface utilisateur, fournissez un affichage des données plus intuitif et une interface de fonctionnement plus simple, et améliorez l'expérience utilisateur.

Recommandation : utilisez un écran couleur haute résolution pour offrir une expérience visuelle plus riche. Concevez une interface utilisateur simple et facile à comprendre pour faciliter l’utilisation des utilisateurs. Fournissez un affichage graphique des données, telles que des graphiques de paramètres d'environnement en temps réel, des enregistrements historiques, etc.

Amélioration du contrôle intelligent

Ajoutez un système intelligent d'aide à la décision pour ajuster automatiquement les stratégies de contrôle en fonction des données historiques et en temps réel afin d'obtenir un contrôle et une gestion environnementaux plus efficaces.

Recommandation : Utiliser la technologie d'analyse des données pour analyser les données environnementales et fournir des suggestions personnalisées de gestion environnementale. En combinaison avec les données historiques, nous pouvons prédire les problèmes et besoins possibles et optimiser les stratégies de contrôle à l'avance.

7. Clôture et résumé

Ce didacticiel présente en détail comment implémenter un système de navigation robot intelligent dans un système embarqué STM32. Il explique de manière exhaustive tout, depuis la sélection du matériel et la mise en œuvre du logiciel jusqu'à la configuration du système et les scénarios d'application.