symforce-org/symforce
Fast symbolic computation, code generation, and nonlinear optimization for robotics
해결하는 문제
SymForce는 기호 수학의 유연성과 수동으로 작성된 최적화된 C++ 코드의 실행 속도 사이에서 일반적으로 트레이드오프가 발생하는 고성능 로봇 소프트웨어 개발 문제를 해결합니다. 이를 통해 버그가 발생하기 쉬운 수동 미분(Jacobians)의 필요성을 제거하고 프로토타입과 프로덕션 코드 간의 로직 중복을 줄입니다.
작동 방식
SymForce는 수학과 프로덕션 사이의 간극을 메우기 위해 세 부분으로 구성된 시스템을 제공합니다:
- Symbolic Toolkit: SymPy API를 확장하여 기하학, 카메라 및 Lie group 미적분을 위한 특화된 타입을 제공함으로써 사용자가 복잡한 로봇 문제를 기호적으로 모델링할 수 있도록 합니다.
- Code Generator: 이러한 기호 표현식을 C++ 또는 기타 대상 언어의 고도로 최적화된 분기 없는 런타임 코드로 변환합니다. 계산 평탄화 및 희소성(sparsity)과 같은 전략을 활용하여 표준 자동 미분보다 훨씬 빠른 속도를 달성합니다.
- Optimization Library: 실시간 로봇 애플리케이션을 위해 설계된 팩터 그래프 기반의 빠른 접 공간(tangent-space) 최적화 라이브러리입니다. 생성된 함수를 비선형 최적화의 팩터로 직접 사용할 수 있습니다.
대상 사용자
SLAM(Simultaneous Localization and Mapping), 번들 조정(bundle adjustment), 캘리브레이션 및 희소 비선형 MPC(Model Predictive Control)와 같은 작업을 수행하는 로봇 엔지니어 및 연구자를 위해 설계되었습니다.
주요 특징
- 자동 Jacobian 계산: 접 공간 Jacobian을 자동으로 계산하여 수동 유도의 필요성을 없앱니다.
- 고성능: 동적 메모리 할당이 없는 임베디드 친화적인 C++ 코드(Eigen 사용)를 생성합니다.
- 특이점 처리: 런타임 평가 중 수학적 특이점(0,0에서의
atan2와 같은)을 처리하기 위해 특화된 epsilon 기반 시스템을 사용합니다. - 원활한 워크플로우: Python을 통한 신속한 프로토타이핑을 가능하게 하며, 프로덕션용 C++ 코드로의 직접적인 경로를 제공합니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트