目標•要件•開始する•機能•TODO•参照
C ++ Roboticsには次の目標があります。
このプロジェクトは、Pythonroboticsに触発されています。このライブラリは、単なる教育リポジトリである代わりに、一貫したAPIで高速アルゴリズムを実装し、ランタイムのパフォーマンスと使いやすさを保証することを目的としています。
これはまだ進行中の作業ですが、提案を残したか、レポを主演した場合は感謝します。どんな助けも大歓迎です!
C ++ 11コンパイラ
cmake 3.14+(WindowsでVisual Studioを使用する場合は、CMAKEプロジェクトとしてプロジェクトをインポートできるはずです)
C ++依存関係は、CPM.Cmakeによって自動的に取得されます。ライブラリはEigenのみに依存しているが、 matplotplusplusはexamplesフォルダーで使用されて結果をプロットすることに注意してください。
以下は、開始するためのいくつかの例です。 examplesフォルダーには、開始に役立ついくつかの例が含まれています。
Cpproboticsはモジュール式であることを目指しています。つまり、次のことを意味します。
動的システムを定義すると、ほとんどのアルゴリズムが使用できるようになります
データはオブジェクト間でシームレスに流れる必要があります(例:推定器 - >コントローラー)
アルゴリズムをセットアップしたら、動的システムを変更して直接統合できるはずです
git clone https://github.com/giacomo-b/cpprobotics.git
実行したい一般的なEXAMPLEを考えると、次のコマンドが作成します。
cmake -S examples/EXAMPLE -B build/EXAMPLE
cmake --build build/EXAMPLE Windowsでは、これによりデバッグ構成がデフォルトになります。リリースモードでプロジェクトを構築するには、最初のコマンドの後に--config=Releaseを追加できます。
Linux、MacOS、およびほとんどのUNIXベースのシステムで例を実行するには:
./build/EXAMPLE/mainWindows:
./build/EXAMPLE/CONFIG_TYPE/mainここで、プロジェクトの構成方法に応じて、 CONFIG_TYPE DebugまたはReleaseです。
# include < robotics/robotics.hpp > SystemBase 、一般的な動的システムを表します。ほとんどの場合、 LinearSystemまたはNonlinearSystemいずれかを使用します。
ライブラリはテンプレートされているため、システムを定義する必要があります。
州の数
入力数(制御アクション)
出力の数
例えば:
static constexpr int N = 2 ; // Number of states
static constexpr int M = 1 ; // Number of inputs
static constexpr int P = 2 ; // Number of outputsタイプエイリアスは便利になり、コーダーが間違った寸法を混合できないようにすることができます。
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>;状態形式がある線形システムを定義しましょう
x' = A * x + B * u
y = C * x + D * u
LinearSystemをセットアップするには:
StateMatrix A;
A << 1 , 0 ,
0 , 1 ;
InputMatrix B;
B << 1 , 0 ;
OutputMatrix C;
C << 1 , 0 ,
0 , 1 ;テンプレートを持つことでランタイムのパフォーマンスが向上するだけでなく、コンパイル時間チェックも強制することに注意してください。要素の数が間違っているマトリックスを初期化する場合、コードはコンパイルされません。
マトリックスCとDは必要ありません。提供されていない場合、デフォルトではヌルです。この場合、dはnullです。システムを定義するには:
Robotics::Model::LinearSystem<N, M, P> system (A, B, C);初期状態はデフォルトでゼロです。次のようにカスタム初期状態を設定できます。
system.SetInitialState(State( 1.0 , - 1.0 ));プロジェクトにこれらの機能を含めたい場合は、Thelartians/ModernCppstarterをご覧ください。
ルートディレクトリから:
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コードカバレッジ情報も収集するには、 -DENABLE_TEST_COVERAGE=1オプションでCmakeを実行します。
これには、 Clang-format 、 cmake-format 、およびpyyamlを現在のシステムにインストールする必要があります。
cmake -S test -B build/test
# view changes
cmake --build build/test --target format
# apply changes
cmake --build build/test --target fix-format詳細については、format.cmakeを参照してください。
ドキュメントは、GitHubリリースが作成されるたびに自動的に構築および公開されます。ドキュメントを手動で作成するには、次のコマンドを呼び出します。
cmake -S documentation -B build/doc
cmake --build build/doc --target GenerateDocs
# view the docs
open build/doc/doxygen/html/index.htmlローカルでドキュメントを構築するには、システムにDoxygen 、 Jinja2 、 Pygmentsがインストールされる必要があります。
このプロジェクトには、すべてのターゲットを同時に構築できるallディレクトリも含まれています。これは、すべてのサブプロジェクトをIDEに公開し、ライブラリの冗長なビルドを回避するため、開発中に役立ちます。
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 GenerateDocsテストとスタンドアロンのサブプロジェクトには、Cmake構成引数を介して追加のツールをオンデマンドでインポートするために使用されるTools.cmakeファイルが含まれています。現在、以下がサポートされています。
CMAKEを-DUSE_SANITIZER=<Address | Memory | MemoryWithOrigins | Undefined | Thread | Leak | 'Address;Undefined'> 。
-DUSE_STATIC_ANALYZER=<clang-tidy | iwyu | cppcheck>設定することで、静的アナライザーを有効にできます-DUSE_STATIC_ANALYZER=<clang-tidy | iwyu | cppcheck> 、またはセミコロンで区切られた引用符のあるものの組み合わせ。デフォルトでは、アナライザーは.clang-formatなどの構成ファイルを自動的に見つけます。 CLANG_TIDY_ARGS 、 IWYU_ARGS 、またはCPPCHECK_ARGS変数を設定することにより、追加の引数をアナライザーに渡すことができます。
ccacheは-DUSE_CCACHE=<ON | OFF>で構成することで有効にできます-DUSE_CCACHE=<ON | OFF> 。
前述のように、このレポはもともとAtsushisakai/Pythonroboticsに触発されました。より多くのアルゴリズムを見たい場合(または、それらのいくつかを移植するのを手伝いたい場合は)チェックしてください!)。