symforce-org/symforce
Fast symbolic computation, code generation, and nonlinear optimization for robotics
解决的问题
SymForce 解决了开发高性能机器人软件时面临的挑战,即符号数学的灵活性与手写优化 C++ 代码的执行速度之间通常存在权衡。它消除了对易出错的手写导数(Jacobians)的需求,并减少了原型设计代码与生产代码之间的逻辑重复。
工作原理
SymForce 提供了一个三部分系统来弥合数学与生产环境之间的差距:
- Symbolic Toolkit:扩展了 SymPy API,提供用于几何、相机和 Lie 群微积分的专用类型,允许用户对复杂的机器人问题进行符号建模。
- Code Generator:将这些符号表达式转换为高度优化的、无分支的 C++ 或其他目标语言运行时代码。它利用计算扁平化和稀疏性等策略,实现比标准自动微分更显著的加速。
- Optimization Library:一个基于因子图的快速切空间(tangent-space)优化库,专为实时机器人应用而设计。它可以直接将生成的函数用作非线性优化的因子。
适用对象
专为从事 SLAM(即时定位与地图构建)、捆绑调整(bundle adjustment)、标定和稀疏非线性 MPC(模型预测控制)等任务的机器人工程师和研究人员设计。
亮点
- 自动 Jacobian 计算:自动计算切空间 Jacobian,无需手动推导。
- 高性能:生成嵌入式友好的 C++ 代码(使用 Eigen),实现零动态内存分配。
- 奇异性处理:在运行时评估期间,使用专门的基于 epsilon 的系统来处理数学奇异点(如 0,0 处的
atan2)。 - 无缝工作流:实现 Python 中的快速原型设计,并提供通往生产级 C++ 代码的直接路径。
相关
- 项目
- 项目
- 项目
- 项目
- 项目