목표 • 요구 사항 • 시작하기 • 기능 • TODOS • 참조
C ++ 로봇 공학은 다음과 같은 목표를 가지고 있습니다.
이 프로젝트는 Pythonrobotics에서 영감을 얻었습니다. 이 라이브러리는 단순한 교육 리포 대신 런타임 성능과 사용 편의성을 보장하기 위해 일관된 API로 빠른 알고리즘을 구현하는 것을 목표로합니다.
이것은 여전히 진행중인 작업이지만, 제안을 남기거나 저장소를 주연시켰다면 감사하겠습니다. 모든 도움이 감사합니다!
C ++ 11 컴파일러
CMAKE 3.14+ (Windows에서 Visual Studio를 사용하는 경우 프로젝트를 CMAKE 프로젝트로 가져올 수 있어야합니다).
C ++ 의존성은 CPM.CMAKE에 의해 자동으로 얻어집니다. 라이브러리는 Eigen 에만 의존하지만 matplotplusplus examples 폴더에서 결과를 플로팅하는 데 사용됩니다.
다음은 시작할 몇 가지 예입니다. 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/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);초기 상태는 기본적으로 0입니다. 다음과 같이 사용자 정의 초기 상태를 설정할 수 있습니다.
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 구성 인수를 통해 주문형 추가 도구를 가져 오는 데 사용되는 도구가 포함되어 있습니다. 다음은 현재 지원됩니다.
-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에서 영감을 받았습니다. 따라서 더 많은 알고리즘을보고 싶다면 확인하십시오 (또는 그 중 일부를 포트에 도와주고 싶다면).