Ziele • Anforderungen • Erste Schritte • Merkmale • Todos • Referenzen
C ++ Robotics hat die folgenden Ziele:
Dieses Projekt ist von Pythonrobotics inspiriert. Anstatt nur ein Bildungsrepo zu sein, zielt diese Bibliothek darauf ab, schnelle Algorithmen mit einer konsistenten API zu implementieren, um die Laufzeitleistung und die Benutzerfreundlichkeit zu gewährleisten.
Obwohl dies immer noch in Arbeit ist, würde ich es zu schätzen wissen, wenn Sie Vorschläge hinterlassen oder das Repo mitspielten. Jede Hilfe wird sehr geschätzt!
C ++ 11 Compiler
CMAKE 3.14+ (Wenn Sie Visual Studio unter Windows verwenden, sollten Sie das Projekt als CMake -Projekt importieren können)
Die C ++ - Abhängigkeiten werden automatisch von CPM.CMake erhalten. Beachten Sie, dass die Bibliothek nur von Eigen abhängt, aber matplotplusplus wird im examples -Ordner verwendet, um die Ergebnisse zu zeichnen.
Im Folgenden finden Sie einige Beispiele für den Einstieg. Der examples -Ordner enthält mehrere Beispiele, die nützlich sind, um loszulegen.
CPPROBOTICS zielt darauf ab, modular zu sein, was bedeutet:
Sobald Sie ein dynamisches System definiert haben, stehen die meisten Algorithmen für die Verwendung leicht zur Verfügung
Daten sollten nahtlos zwischen Objekten fließen (z. B. Schätzer -> Controller)
Sobald Sie einen Algorithmus eingerichtet haben, sollten Sie das dynamische System ändern und direkt integrieren können
Git Clone https://github.com/giacomo-b/cpprobotics.git
Bei einem generischen EXAMPLE , das Sie ausführen möchten, erstellen die folgenden Befehle es:
cmake -S examples/EXAMPLE -B build/EXAMPLE
cmake --build build/EXAMPLE Auf Windows wird dies zu einer Debug -Konfiguration standardmäßig. Um das Projekt im Release -Modus zu erstellen, können Sie nach dem ersten Befehl --config=Release addieren.
So führen Sie das Beispiel unter Linux, MacOS und den meisten Unix-basierten Systemen aus:
./build/EXAMPLE/mainUnter Windows:
./build/EXAMPLE/CONFIG_TYPE/main wobei CONFIG_TYPE entweder Debug oder Release ist, je nachdem, wie Sie das Projekt konfiguriert haben.
# include < robotics/robotics.hpp > SystemBase repräsentiert ein generisches dynamisches System. In den meisten Fällen verwenden Sie entweder ein LinearSystem oder NonlinearSystem .
Da die Bibliothek vorläufig ist, müssen Sie ein System definieren, das Sie definieren müssen:
Die Anzahl der Zustände
Die Anzahl der Eingänge (Kontrollaktionen)
Die Anzahl der Ausgänge
z.B:
static constexpr int N = 2 ; // Number of states
static constexpr int M = 1 ; // Number of inputs
static constexpr int P = 2 ; // Number of outputsTyp -Aliase können nützlich werden und verhindern, dass der Coder die falschen Abmessungen vermischt:
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>;Definieren wir ein lineares System, dessen Zustandsform ist
x' = A * x + B * u
y = C * x + D * u
So einrichten ein LinearSystem :
StateMatrix A;
A << 1 , 0 ,
0 , 1 ;
InputMatrix B;
B << 1 , 0 ;
OutputMatrix C;
C << 1 , 0 ,
0 , 1 ;Beachten Sie, dass Vorlagen nicht nur die Laufzeitleistung verbessert, sondern auch die Überprüfung der Kompilierzeit erzwingt. Wenn Sie eine Matrix mit der falschen Anzahl von Elementen initialisieren, kompiliert der Code nicht.
Matrices C und D sind nicht erforderlich: Sie sind standardmäßig null, wenn sie nicht bereitgestellt werden. In diesem Fall ist D null. Um das System zu definieren:
Robotics::Model::LinearSystem<N, M, P> system (A, B, C);Der Anfangszustand ist standardmäßig Null. Sie können einen benutzerdefinierten Anfangszustand wie folgt festlegen:
system.SetInitialState(State( 1.0 , - 1.0 ));Schauen Sie sich die Thelartianer/ModernCppstarter an, wenn Sie diese Funktionen in Ihr Projekt aufnehmen möchten.
Aus dem Stammverzeichnis:
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 Um auch Codeabdeckungsinformationen zu sammeln, führen Sie CMake mit der Option -DENABLE_TEST_COVERAGE=1 aus.
Dies erfordert, dass Clang-Format , CMake-Format und Pyyaml auf dem aktuellen System installiert werden.
cmake -S test -B build/test
# view changes
cmake --build build/test --target format
# apply changes
cmake --build build/test --target fix-formatWeitere Informationen finden Sie unter format.cmake.
Die Dokumentation wird automatisch erstellt und veröffentlicht, wenn eine Github -Version erstellt wird. Um die Dokumentation manuell zu erstellen, rufen Sie den folgenden Befehl an.
cmake -S documentation -B build/doc
cmake --build build/doc --target GenerateDocs
# view the docs
open build/doc/doxygen/html/index.htmlUm die Dokumentation lokal zu erstellen, benötigen Sie Doxygen , Jinja2 und Pygmente, die in Ihrem System installiert sind.
Das Projekt enthält auch ein all -Verzeichnis, mit dem gleichzeitig alle Ziele erstellt werden können. Dies ist während der Entwicklung nützlich, da es alle Unterprojekte Ihrer IDE aussetzt und redundante Builds der Bibliothek vermeidet.
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 GenerateDocsDie Test- und Standalone-Unterprojekte enthalten die Tools.cMake-Datei, mit der zusätzliche Tools on-Demand durch CMake-Konfigurationsargumente importiert werden. Die folgenden werden derzeit unterstützt.
Sanitärer können aktiviert werden, indem CMake mit -DUSE_SANITIZER=<Address | Memory | MemoryWithOrigins | Undefined | Thread | Leak | 'Address;Undefined'> .
Statische Analysatoren können aktiviert werden, indem -DUSE_STATIC_ANALYZER=<clang-tidy | iwyu | cppcheck> oder eine Kombination aus Zitatmarken, die durch Semikolonen getrennt sind. Standardmäßig finden Analysatoren automatisch Konfigurationsdateien wie .clang-format . Zusätzliche Argumente können an die Analysatoren übergeben werden, indem die Variablen CLANG_TIDY_ARGS , IWYU_ARGS oder CPPCHECK_ARGS festgelegt werden.
CCache kann durch Konfigurieren mit -DUSE_CCACHE=<ON | OFF> aktiviert werden. -DUSE_CCACHE=<ON | OFF> .
Wie oben erwähnt, wurde dieses Repo ursprünglich von Atsushisakai/Pythonrobotics inspiriert. Schauen Sie sich es an, wenn Sie mehr Algorithmen sehen möchten (oder wenn Sie einige davon helfen möchten!).