目标•要求•入门•功能•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的启发。因此,如果您想查看更多算法(或者您想帮助移植一些算法!),请检查一下。