symforce-org/symforce

Fast symbolic computation, code generation, and nonlinear optimization for robotics

解決する課題

SymForceは、記号数学の柔軟性と、手書きの最適化されたC++コードの実行速度との間でトレードオフが発生しがちな、高性能なロボットソフトウェア開発の課題に対処します。これにより、バグが発生しやすい手書きの微分(ヤコビ行列)の必要性を排除し、プロトタイプと本番用コードの間でのロジックの重複を削減します。

仕組み

SymForceは、数学と本番環境のギャップを埋めるために、3つの構成要素からなるシステムを提供します:

  1. Symbolic Toolkit: SymPy APIを拡張し、幾何学、カメラ、Lie群の計算に特化した型を提供することで、ユーザーが複雑なロボットの問題を記号的にモデル化できるようにします。
  2. Code Generator: これらの記号式を、C++またはその他のターゲット言語の高度に最適化された分岐のない実行時コードに変換します。計算のフラット化やスパース性などの戦略を活用し、標準的な自動微分よりも大幅な高速化を実現します。
  3. Optimization Library: ファクタグラフに基づく高速な接空間最適化ライブラリで、リアルタイムのロボットアプリケーション向けに設計されています。生成された関数を非線形最適化のファクターとして直接使用できます。

対象ユーザー

SLAM(自己位置推定と地図作成の同時実行)、バンドル調整、キャリブレーション、およびスパースな非線形MPC(モデル予測制御)などのタスクに取り組むロボットエンジニアや研究者向けに設計されています。

ハイライト

  • 自動ヤコビ行列計算: 接空間のヤコビ行列を自動的に計算し、手動での導出を不要にします。
  • 高いパフォーマンス: 動的なメモリ割り当てをゼロにした、組み込みに適したC++コード(Eigenを使用)を生成します。
  • 特異点の処理: 実行時の評価中に数学的な特異点(0,0におけるatan2など)を処理するために、特殊なイプシロンベースのシステムを使用します。
  • シームレスなワークフロー: Pythonでの迅速なプロトタイピングを可能にし、本番環境向けのC++コードへの直接的なパスを提供します。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト