目標•要求•入門•功能•todos•參考
C ++機器人技術具有以下目標:
該項目的靈感來自Pythonrobotics。該圖書館不僅是教育回購,還旨在實施具有一致API的快速算法,以確保運行時性能和易用性。
雖然這仍在進行中,但如果您留下任何建議或出演回購,我將不勝感激。任何幫助將不勝感激!
C ++ 11編譯器
Cmake 3.14+(如果在Windows上使用Visual Studio,則應該能夠將項目導入到CMAKE項目)
C ++依賴項將通過cpm.cmake自動獲得。請注意,庫僅取決於Eigen ,但是examples文件夾中使用matplotplusplus來繪製結果。
以下是一些開始的示例。這些examples文件夾包含幾個有用的示例,這些示例可以入門。
Cpprobotics的目的是模塊化,這意味著:
一旦定義了動態系統,大多數算法就可以輕鬆使用
數據應在對象之間無縫流動(例如估算器 - >控制器)
設置算法後,您應該能夠更改動態系統並將其直接集成
git克隆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/main在Windows上:
./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為無效。定義系統:
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有關詳細信息,請參見格式。
每當創建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文件,用於通過CMake配置參數導入點播其他工具。目前支持以下內容。
可以通過使用-DUSE_SANITIZER=<Address | Memory | MemoryWithOrigins | Undefined | Thread | Leak | 'Address;Undefined'>來啟用消毒器。 -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變量來傳遞其他參數。
可以通過配置-DUSE_CCACHE=<ON | OFF>可以啟用CCACHE -DUSE_CCACHE=<ON | OFF> 。
如上所述,此倉庫最初是受atsushisakai/pythonrobotics的啟發。因此,如果您想查看更多算法(或者您想幫助移植一些算法!),請檢查一下。