symforce-org/symforce

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

解决的问题

SymForce 解决了开发高性能机器人软件时面临的挑战,即符号数学的灵活性与手写优化 C++ 代码的执行速度之间通常存在权衡。它消除了对易出错的手写导数(Jacobians)的需求,并减少了原型设计代码与生产代码之间的逻辑重复。

工作原理

SymForce 提供了一个三部分系统来弥合数学与生产环境之间的差距:

  1. Symbolic Toolkit:扩展了 SymPy API,提供用于几何、相机和 Lie 群微积分的专用类型,允许用户对复杂的机器人问题进行符号建模。
  2. Code Generator:将这些符号表达式转换为高度优化的、无分支的 C++ 或其他目标语言运行时代码。它利用计算扁平化和稀疏性等策略,实现比标准自动微分更显著的加速。
  3. Optimization Library:一个基于因子图的快速切空间(tangent-space)优化库,专为实时机器人应用而设计。它可以直接将生成的函数用作非线性优化的因子。

适用对象

专为从事 SLAM(即时定位与地图构建)、捆绑调整(bundle adjustment)、标定和稀疏非线性 MPC(模型预测控制)等任务的机器人工程师和研究人员设计。

亮点

  • 自动 Jacobian 计算:自动计算切空间 Jacobian,无需手动推导。
  • 高性能:生成嵌入式友好的 C++ 代码(使用 Eigen),实现零动态内存分配。
  • 奇异性处理:在运行时评估期间,使用专门的基于 epsilon 的系统来处理数学奇异点(如 0,0 处的 atan2)。
  • 无缝工作流:实现 Python 中的快速原型设计,并提供通往生产级 C++ 代码的直接路径。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目