Objectifs • Exigences • Démarrer • Caractéristiques • Todos • Références
La robotique C ++ a les objectifs suivants:
Ce projet est inspiré par la pythonrobotique. Au lieu d'être juste un dépôt éducatif, cette bibliothèque vise à mettre en œuvre des algorithmes rapides avec une API cohérente, pour garantir les performances d'exécution et la facilité d'utilisation.
Bien qu'il s'agisse toujours d'un travail en cours, je l'apprécierais que vous laissiez des suggestions ou joué le repo. Toute aide est grandement appréciée!
Compilateur C ++ 11
CMake 3.14+ (si vous utilisez Visual Studio sur Windows, vous devriez pouvoir importer le projet en tant que projet CMake)
Les dépendances C ++ seront obtenues automatiquement par CPM.CMake. Notez que la bibliothèque dépend uniquement de Eigen , mais matplotplusplus est utilisé dans le dossier examples pour tracer les résultats.
Voici quelques exemples pour commencer. Le dossier examples contient plusieurs exemples utiles pour commencer.
Cpprobotics vise à être modulaire, ce qui signifie:
Une fois que vous avez défini un système dynamique, la plupart des algorithmes seront facilement disponibles pour qu'il puisse utiliser
Les données doivent circuler de manière transparente entre les objets (par exemple, l'estimateur -> contrôleur)
Une fois que vous avez configuré un algorithme, vous devriez pouvoir modifier le système dynamique et l'intégrer directement
git clone https://github.com/giacomo-b/cpprorobotics.git
Étant donné un EXAMPLE générique que vous souhaitez exécuter, les commandes suivantes le construisent:
cmake -S examples/EXAMPLE -B build/EXAMPLE
cmake --build build/EXAMPLE Sur Windows, cela va par défaut une configuration de débogage. Pour construire le projet en mode version, vous pouvez ajouter --config=Release après la première commande.
Pour exécuter l'exemple sur Linux, MacOS et la plupart des systèmes basés sur UNIX:
./build/EXAMPLE/mainSur Windows:
./build/EXAMPLE/CONFIG_TYPE/main où CONFIG_TYPE est Debug ou Release , selon la façon dont vous avez configuré le projet.
# include < robotics/robotics.hpp > SystemBase représente un système dynamique générique. Dans la plupart des cas, vous utiliserez un LinearSystem ou NonlinearSystem .
Étant donné que la bibliothèque est modèle, pour définir un système, vous devez définir:
Le nombre d'États
Le nombre d'entrées (actions de contrôle)
Le nombre de sorties
Par exemple:
static constexpr int N = 2 ; // Number of states
static constexpr int M = 1 ; // Number of inputs
static constexpr int P = 2 ; // Number of outputsLes alias de type peuvent être utiles et empêcher le codeur de mélanger les mauvaises dimensions:
using State = Robotics::ColumnVector<N>;
using Input = Robotics::ColumnVector<M>;
using Output = Robotics::ColumnVector<P>;
using StateMatrix = Robotics::SquareMatrix<N>;
using InputMatrix = Robotics::Matrix<N, M>;
using OutputMatrix = Robotics::Matrix<P, N>;
using FeedthroughMatrix = Robotics::Matrix<P, N>;Définissons un système linéaire dont la forme d'état est
x' = A * x + B * u
y = C * x + D * u
Pour configurer un LinearSystem :
StateMatrix A;
A << 1 , 0 ,
0 , 1 ;
InputMatrix B;
B << 1 , 0 ;
OutputMatrix C;
C << 1 , 0 ,
0 , 1 ;Notez que le fait d'avoir des modèles améliore non seulement les performances de l'exécution, mais applique également la vérification du temps de compilation. Si vous initialisez une matrice avec le mauvais nombre d'éléments, le code ne se compilera pas.
Les matrices C et D ne sont pas requises: elles sont nules par défaut si elles ne sont pas fournies. Dans ce cas, D est nul. Pour définir le système:
Robotics::Model::LinearSystem<N, M, P> system (A, B, C);L'état initial est zéro par défaut. Vous pouvez définir un état initial personnalisé comme suit:
system.SetInitialState(State( 1.0 , - 1.0 ));Consultez TheLartians / Moderncppstarter si vous souhaitez inclure ces fonctionnalités dans votre projet.
Du répertoire racine:
cmake -S test -B build/test
cmake --build build/test
CTEST_OUTPUT_ON_FAILURE=1 cmake --build build/test --target test
# or simply call the executable:
./build/test/RoboticsTests Pour collecter également les informations de couverture de code, exécutez CMake avec l'option -DENABLE_TEST_COVERAGE=1 .
Cela nécessite un format de clang , du format cmake et du pyyaml à installer sur le système actuel.
cmake -S test -B build/test
# view changes
cmake --build build/test --target format
# apply changes
cmake --build build/test --target fix-formatVoir format.cmake pour plus de détails.
La documentation est automatiquement construite et publiée chaque fois qu'une version GitHub est créée. Pour construire manuellement la documentation, appelez la commande suivante.
cmake -S documentation -B build/doc
cmake --build build/doc --target GenerateDocs
# view the docs
open build/doc/doxygen/html/index.htmlPour construire la documentation localement, vous aurez besoin de Doxygen , Jinja2 et Pygments installés dans votre système.
Le projet comprend également un répertoire all qui permet de construire toutes les cibles en même temps. Ceci est utile pendant le développement, car il expose tous les sous-projets à votre IDE et évite les versions redondantes de la bibliothèque.
cmake -S all -B build
cmake --build build
# run tests
./build/test/RoboticsTests
# format code
cmake --build build --target fix-format
# run standalone
./build/standalone/Robotics --help
# build docs
cmake --build build --target GenerateDocsLe test et les sous-projets autonomes incluent le fichier outils.cmake qui est utilisé pour importer des outils supplémentaires à la demande via des arguments de configuration CMake. Les éléments suivants sont actuellement pris en charge.
Les désinfectants peuvent être activés en configurant CMake avec -DUSE_SANITIZER=<Address | Memory | MemoryWithOrigins | Undefined | Thread | Leak | 'Address;Undefined'> .
Les analyseurs statiques peuvent être activés en réglant -DUSE_STATIC_ANALYZER=<clang-tidy | iwyu | cppcheck> , ou une combinaison de ceux des guillemets, séparés par des demi-colons. Par défaut, les analyseurs trouveront automatiquement des fichiers de configuration tels que .clang-format . Des arguments supplémentaires peuvent être transmis aux analyseurs en définissant les variables CLANG_TIDY_ARGS , IWYU_ARGS ou CPPCHECK_ARGS .
Ccache peut être activé en configurant avec -DUSE_CCACHE=<ON | OFF> .
Comme mentionné ci-dessus, ce dépôt a été à l'origine inspiré par Atsushisakai / Pythonrobotics. Alors allez vérifier si vous voulez voir plus d'algorithmes (ou si vous souhaitez aider à en porter quelques-uns!).