Цели • Требования • Начало работы • Функции • Todos • Ссылки
C ++ Robotics имеет следующие цели:
Этот проект вдохновлен PythonRobotics. Вместо того, чтобы быть просто образовательным репо, эта библиотека направлена на реализацию быстрых алгоритмов с последовательным API, чтобы гарантировать производительность времени выполнения и простоту использования.
Хотя это все еще находится в стадии разработки, я был бы признателен за это, если вы оставили какие -либо предложения или сыграли в главной роли. Любая помощь очень ценится!
C ++ 11 компилятор
Cmake 3.14+ (если вы используете Visual Studio в Windows, вы сможете импортировать проект в качестве проекта 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/mainВ окнах:
./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 Чтобы также собрать информацию о покрытии кода, запустите Cmake с помощью опции -DENABLE_TEST_COVERAGE=1 .
Это требует, чтобы в текущей системе было установлено формат Clang , Cmake-формат и 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Чтобы создать документацию на местном уровне, вам понадобятся доксиген , Jinja2 и пигменты, установленные в вашей системе.
Проект также включает в себя 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. Следующие в настоящее время поддерживаются.
Дезинфицирующие средства могут быть включены, настраивая Cmake с -DUSE_SANITIZER=<Address | Memory | MemoryWithOrigins | Undefined | Thread | Leak | 'Address;Undefined'> .
Статические анализаторы могут быть включены путем настройки -DUSE_STATIC_ANALYZER=<clang-tidy | iwyu | cppcheck> , или комбинация тех, кто находится в кавычках, разделенных полуколонами. По умолчанию анализаторы автоматически найдут файлы конфигурации, такие как .clang-format . Дополнительные аргументы могут быть переданы анализаторам, установив переменные CLANG_TIDY_ARGS , IWYU_ARGS или CPPCHECK_ARGS .
CCache может быть включен путем настройки с -DUSE_CCACHE=<ON | OFF> .
Как упомянуто выше, это репо было изначально вдохновлено Atsushisakai/Pythonrobotics. Так что проверьте это, если вы хотите увидеть больше алгоритмов (или если вы хотите помочь портировать несколько из них!).