Objetivos • Requisitos • Introducción • Características • Todos • Referencias
La robótica C ++ tiene los siguientes objetivos:
Este proyecto está inspirado en Pythonrobotics. En lugar de ser solo un repositorio educativo, esta biblioteca tiene como objetivo implementar algoritmos rápidos con una API consistente, para garantizar el rendimiento del tiempo de ejecución y la facilidad de uso.
Si bien este sigue siendo un trabajo en progreso, le agradecería si dejara alguna sugerencia o protagonizara el repositorio. ¡Cualquier ayuda es muy apreciada!
Compilador C ++ 11
CMake 3.14+ (si usa Visual Studio en Windows, debería poder importar el proyecto como proyecto CMake)
Las dependencias de C ++ se obtendrán automáticamente por CPM.Cmake. Tenga en cuenta que la biblioteca solo depende de Eigen , pero matplotplusplus se usa en la carpeta de examples para trazar los resultados.
Los siguientes son algunos ejemplos para comenzar. La carpeta examples contiene varios ejemplos que son útiles para comenzar.
CPProbotics tiene como objetivo ser modular, lo que significa:
Una vez que defina un sistema dinámico, la mayoría de los algoritmos estarán disponibles para que lo use
Los datos deben fluir a la perfección entre los objetos (por ejemplo, estimador -> controlador)
Una vez que configure un algoritmo, debería poder cambiar el sistema dinámico e integrarlo directamente
Git clone https://github.com/giacomo-b/cpprobotics.git
Dado un EXAMPLE genérico que desea ejecutar, los siguientes comandos lo crean:
cmake -S examples/EXAMPLE -B build/EXAMPLE
cmake --build build/EXAMPLE En Windows, esto predeterminará una configuración de depuración. Para construir el proyecto en modo de lanzamiento, puede agregar --config=Release después del primer comando.
Para ejecutar el ejemplo en Linux, MacOS y la mayoría de los sistemas basados en UNIX:
./build/EXAMPLE/mainEn Windows:
./build/EXAMPLE/CONFIG_TYPE/main Donde CONFIG_TYPE es Debug o Release , dependiendo de cómo configuró el proyecto.
# include < robotics/robotics.hpp > SystemBase representa un sistema dinámico genérico. En la mayoría de los casos, utilizará un LinearSystem o NonlinearSystem .
Dado que la biblioteca está plantillada, para definir un sistema, debe definir:
El número de estados
El número de entradas (acciones de control)
El número de salidas
p.ej:
static constexpr int N = 2 ; // Number of states
static constexpr int M = 1 ; // Number of inputs
static constexpr int P = 2 ; // Number of outputsLos alias de tipo pueden ser útiles y evitar que el codificador mezcle las dimensiones incorrectas:
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>;Definamos un sistema lineal cuya forma de estado es
x' = A * x + B * u
y = C * x + D * u
Para configurar un LinearSystem :
StateMatrix A;
A << 1 , 0 ,
0 , 1 ;
InputMatrix B;
B << 1 , 0 ;
OutputMatrix C;
C << 1 , 0 ,
0 , 1 ;Tenga en cuenta que tener plantillas no solo mejora el rendimiento del tiempo de ejecución, sino que también aplica la verificación de tiempo de compilación. Si inicializa una matriz con el número incorrecto de elementos, el código no se compilará.
No se requieren matrices C y D: son nulas de forma predeterminada si no se proporcionan. En este caso, D es nulo. Para definir el sistema:
Robotics::Model::LinearSystem<N, M, P> system (A, B, C);El estado inicial es cero por defecto. Puede establecer un estado inicial personalizado de la siguiente manera:
system.SetInitialState(State( 1.0 , - 1.0 ));Echa un vistazo a Thelartians/ModerncppStarter si desea incluir estas características en su proyecto.
Desde el directorio de la raíz:
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 Para recopilar también la información de cobertura del código, ejecute Cmake con la opción -DENABLE_TEST_COVERAGE=1 .
Esto requiere que se instalará el formato de clang , CMake-format y Pyyaml en el sistema actual.
cmake -S test -B build/test
# view changes
cmake --build build/test --target format
# apply changes
cmake --build build/test --target fix-formatConsulte Format.cmake para más detalles.
La documentación se construye y publica automáticamente cada vez que se crea una versión de GitHub. Para construir manualmente la documentación, llame al siguiente comando.
cmake -S documentation -B build/doc
cmake --build build/doc --target GenerateDocs
# view the docs
open build/doc/doxygen/html/index.htmlPara construir la documentación localmente, necesitará Doxygen , Jinja2 y Pygments instalados en su sistema.
El proyecto también incluye un directorio all que permite construir todos los objetivos al mismo tiempo. Esto es útil durante el desarrollo, ya que expone todos los subproyectos a su IDE y evita las construcciones redundantes de la biblioteca.
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 GenerateDocsLa prueba y los subprojects independientes incluyen el archivo Tools.Cmake que se utiliza para importar herramientas adicionales bajo demanda a través de los argumentos de configuración de CMake. Los siguientes son compatibles actualmente.
Los desinfectantes se pueden habilitar configurando cmake con -DUSE_SANITIZER=<Address | Memory | MemoryWithOrigins | Undefined | Thread | Leak | 'Address;Undefined'> .
Los analizadores estáticos se pueden habilitar configurando -DUSE_STATIC_ANALYZER=<clang-tidy | iwyu | cppcheck> , o una combinación de las que se encuentran en comillas, separadas por semicolones. De manera predeterminada, los analizadores encontrarán automáticamente archivos de configuración como .clang-format . Se pueden pasar argumentos adicionales a los analizadores estableciendo las variables CLANG_TIDY_ARGS , IWYU_ARGS o CPPCHECK_ARGS .
Ccache se puede habilitar configurando con -DUSE_CCACHE=<ON | OFF> .
Como se mencionó anteriormente, este repositorio se inspiró originalmente en Atsushisakai/Pythonrobotics. Así que ve a verlo si quieres ver más algoritmos (¡o si quieres ayudar a puerir algunos de ellos!).