mercredi 7 juin 2023

Comment programmer un drone en C++

Le première idée qui me vient c'est une question ArduPilot ou PX4 ?

ChatGTP:

ArduPilot est une plate-forme de pilotage automatique open-source qui prend en charge une large gamme de drones, y compris les multirotors, les avions, les hélicoptères et les véhicules terrestres. Il est écrit en langage C++

PX4 est également une plate-forme de pilotage automatique open-source populaire utilisée pour les drones. Il est écrit en C++ et se concentre sur la modularité et la réutilisabilité du code. PX4 est connu pour sa stabilité et sa précision, et il est utilisé dans une variété de drones commerciaux et industriels. Il offre également des fonctionnalités avancées telles que la planification de trajectoires, la vision par ordinateur, etc.

Pour faire un choix :

  1. Type de drone : ArduPilot est souvent utilisé pour les drones DIY (Do It Yourself) et les projets amateurs, tandis que PX4 est plus couramment utilisé pour les drones commerciaux et industriels.
  2. Fonctionnalités requises : Évaluez les fonctionnalités spécifiques dont vous avez besoin pour votre projet et vérifiez si ArduPilot ou PX4 répondent à ces exigences.
  3. Communauté et documentation : Vérifiez la taille et la qualité de la communauté de développeurs et la documentation disponible pour chaque plate-forme. Une communauté active et une documentation détaillée peuvent être utiles lorsque vous avez des questions ou des problèmes.
  4. Expérience de programmation : Si vous avez déjà de l'expérience en programmation en langage C++, vous pourriez trouver plus facile de travailler avec l'une ou l'autre des plates-formes.

Voilà ...

Maintenant voici tous les véhicules que l'on peut programmer avec PX4 :

PX4 - airframes reference.html

C'est impressionnant...

Les capteurs :

Le système nécessite au minimum un gyroscope, un accéléromètre, un magnétomètre (boussole) et un baromètre. Un GPS ou un autre système de positionnement est nécessaire pour activer tous les modes automatiques et certains modes assistés. Les véhicules à voilure fixe et VTOL doivent également inclure un capteur de vitesse (très fortement recommandé).

Le Hardware

PX4 est designé pour s'exécuter sur Pixhawk Series.  

Sortie: Moteurs, Servos contrôles, Actuators ...

QGroundControl

Pour flasher le PX4 runs on Windows, Android, MacOS ou Linux.

https://docs.qgroundcontrol.com/master/en/getting_started/download_and_install.html

Je me lance j'installe, c'est complexe avec plein de Drivers.ArduPilot Ports

Simulation

Que peut-on simuler ?

https://docs.px4.io/main/en/simulation/

Les simulateurs permettent au code de vol PX4 de contrôler un véhicule modélisé par ordinateur dans un "monde" simulé. Vous pouvez interagir avec ce véhicule comme vous le feriez avec un vrai véhicule, en utilisant QGroundControl, une API externe ou une radiocommande/manette de jeu.

Perso je me laisserais tenté par : 

AirSim construit le moteur Unreal, je me souviens de Unreal Tournament quel pied ce jeux, ah les moteurs 3D... 

Gazebo : windows not supported.

Je sais pas vous mais moi ce schéma me fait tripper. Je verrais bien un simulateur AirSim derrière tout ça :

https://github.com/Microsoft/AirSim/releases

https://microsoft.github.io/AirSim/px4_setup/

On s'approche











vendredi 2 juin 2023

C++ avec Visual Studio 2019

Alors ce matin, je reprends le développement en C++ pour voir ce que l'on peut faire avec Visual Studio 2019... en C++. Quel sont les Templates les outils de test qui sont proposés par Visual Studio C++.

Visual Studio 2019 - Instanciation d'un projet Windows Desktop C++
Visual Studio 2019 - Instanciation d'un projet Windows Desktop C++

Après avoir fait pas mal de chose avec Arduino et avoir fait un tour complet des technologies Microsoft UWP, Balzor, WPF, MAUI ... je souhaite retourner faire un tour du côté de C++ mais à nouveau je retombe sur la difficulté de ce projet Template C++ instancié par Visual Studio 2019 et après ... et après on se sens tout nu.

Même Git est perdu avec tout ces fichiers temporaire décidément le développement d'application Desktop avec C++ ce n'est pas une sinécure. Je souhaite absolument ne pas installer les MFC ...

Je trouve une page pour développer une fenêtre :

Microsoft Learn - Créer une fenêtre - Win32 apps

Plus généralement :

Microsoft Learn - Créer des applications Windows de bureau à l’aide de l’API Win32

Je trouve également

Microsoft - Win2d

Je cherche un peu dans mes archives et finalement, je trouve ce projet MFCPlusNiveauSup  :

Visual Studio C++ - MFC - Application à la façon "MS Office"
Visual Studio C++ - MFC - Application à la façon "MS Office"

Je ne vous raconte pas le bouzin, le code tout à la main pas un designer graphiques si je veux vraiment faire du C++ je vais me rabattre sur :

GitHub - mabyre/Console-CPlusPlus-StarterKit
 For developers to work in C++ and C this is the best trace tool ever

Je crois que je vais tout fermer et aller à la plage...

Mais sinon il y a peut être un truc bien Ici  avec une machine virtuelle installée avec un environnement de développement.

Alors sinon, ce matin je reprends cette problématique de "comment développer en C++" et je décide de mettre à jour mon Visual Studio 2019 avec les features MFC et me voilà avec bien plus de possibilités :

Visual Studio 2019 Ajout des features MFC
Visual Studio 2019 Ajout des features MFC

J'ai un tas de choix à effectuer :

  • Type d'applications : on se rappelle MDI (Multiple Document Interface) choix de l'interface avec plutôt des boites de dialogues, un seul document, plusieurs documents
  • Propriétés du modèle de document : le type de document traité par l'application
  • Propriété de l'interface utilisateur : propriété des menus à rubans, des barres d'outils
  • Fonctionnalités avancées : on trouve par exemple Sockets Windows, Aperçu avant impression.
  • Classe générées : possibilité de modifier le nom des classes autre que CMFCApplication1App

On trouve par exemple la possibilité de choisir le style du projet :

Donc plus de doute, pour développer en C++ pas d'autres possibilités que les MFC ... Mais c'est un peu vieillot tout ça "Office 2007" ne date pas d'hier.

Du coup je vous propose de découvrir Qt/C++

Mais bon, allons un peu plus loin en instanciant quelques Templates, je choisie l'utilisation des MFC dans une bibliothèque statique et le thème Windows Native/Default :

Visual Studio 2019 - Application Desktop en C++
Visual Studio 2019 - Application Desktop en C++

C'est joli mais on remarque déjà un problème d'Encodage UTF8 ...

Parce que je suis joueur j'instancie une deuxième application avec un autre thème :

Visual Studio 2019 - Application Desktop en C++
Visual Studio 2019 - Application Desktop en C++

C'est bien vieux tout cela et je ne suis par sûr qu'il faille aller plus loin. C'est clair, le développement d'application modernes ne passe désormais plus que part .NET. Sinon on aurait au moins un concepteur graphique pour les pages .CPP alors que l'on en a un pour les Boites de Dialogues c'est curieux non ?

J'ai une petite technique à vous donner ici lorsque je me trouve face à tous ces choix pour les Template je fais des choix et j'instancie ces projets son le même ici en l’occurrence MFCApplication1 et je les compare. 

Voici deux choix MFC dans une lib statique et MFC dans une DLL partagée voici la différence :

MFC dans une librairies statique ou dans une librairie partagée
MFC dans une librairies statique ou dans une librairie partagée

On vient de voir très rapidement comment aujourd'hui développer une application Desktop en C++ avec Visual Studio 2019.

Si vous avez du code en C++ à faire tourner en mode Console, je vous conseille :

GitHub - mabyre/Console-CPlusPlus-StarterKit

Ou à la rigueur avec une Interface Graphique un peu plus "user friendly" :

GitHub - Mabyre/MFC-CplusPlus-StarterKit

Voilà de bons outils pour travailler votre C++.

Have fun!