4 个版本
0.0.4 | 2022年10月18日 |
---|---|
0.0.3 | 2022年8月11日 |
0.0.2 | 2022年8月11日 |
0.0.1 | 2022年3月13日 |
#113 in 机器人学
1MB
21K SLoC
optima
Optima 是一个易于设置和使用,适用于应用规划和优化的工具箱,特别为机器人运动生成算法而设计。
此存储库是 Optima Toolbox 的核心库,使用 Rust 编写。此整个库也可以编译成 Python 和 Javascript(通过 WebAssembly)。
2022年6月29日的开发更新
Optima 仍在积极开发中。目前,我们的机器人碰撞接近算法已实现,到 2022 年 8 月 1 日之前还将实现更多机器人生成算法。我还会在接下来的几周内添加更多有关设置步骤的文档,以及如何在 Python 和 Javascript 中使用库。
lib.rs
:
简介
Optima 是一个易于设置和使用的机器人工具箱。其主要用例是机器人运动生成(例如,轨迹优化、运动规划、基于优化的逆运动学等),尽管其底层结构是通用的,可以应用于许多规划和优化问题领域。核心库是用 Rust 编写的,但通过 Rust 的高效编译器,还提供了对其他目标(如 Python 和 Webassembly)的高质量支持。
Optima 具有丰富的高效和灵活的机器人子例程套件,包括正向运动学、雅可比矩阵计算等。Optima 还实现了与规划、优化和接近计算相关的最先进机器人算法,例如 RelaxedIK、CollisionIK 和 Proxima(还有更多算法即将推出)。这些机器人功能旨在易于设置和访问。包含了许多流行机器人的模型,如 UR5、Franka Emika Panda、Kinova Gen3 等,可以一键实例化。如果您提供的资产中不包含您的机器人模型,只需几分钟即可将机器人添加到库中。
高级功能
-
底层非线性优化引擎有几个后端选项,例如开放引擎和NLopt。所有算法都支持非线性目标函数、非线性等式约束和非线性不等式约束。虽然大多数提供的算法是局部求解器,但NLopt也提供了几个全局优化算法。这些优化算法选项可以通过更改单个参数进行替换,这使得测试和基准测试优化算法变得容易。
-
库提供了一个强大的Rust特质,名为
OptimaTensorFunction
;任何实现此特质的函数都可以自动通过导数组合图计算导数(最多到四阶导数),该图自动选择当提供时使用解析导数,或者默认情况下通过其遍历使用有限差分近似导数。因此,这种方法提供了一种高度高效和灵活的方法来为任何实现的函数执行导数,而不是依赖于往往在重要子例程上失败的底层自动微分库。高阶导数甚至可以在支持任意维度张量的多变量函数上计算。例如,一个作为OptimaTensorFunction
实现的函数 \( \mathit{f}: \mathbb{R}^{3 \times 5} \rightarrow {R}^{4 \times 4} \) 可以自动提供导数 \( \frac{\partial f}{\partial \mathbf{X}} \in {R}^{4 \times 4 \times 3 \times 5} \),\( \frac{\partial^2 f}{\partial \mathbf{X}^2} \in {R}^{4 \times 4 \times 3 \times 5 \times 3 \times 5} \),等等。 -
Optima使用了灵活的变换和旋转实现,使得SE(3)计算变得轻而易举。例如,任何变换上的计算都可以使用齐次矩阵、隐式双重四元数、旋转矩阵+向量、单位四元数+向量、欧拉角+向量等。无论选择哪种SE(3)表示,库都会自动确保在底层正确处理所有转换和计算。
-
只需几行代码,就可以将单个机器人模型组合成“机器人集”,从而可以轻松地对多个机器人同时进行规划和优化。例如,UR5(6自由度)可以很容易地与两个Rethink Sawyer(7自由度)机器人结合,形成一个具有20个总自由度的机器人集。此外,库中的任何机器人(包括机器人集中的机器人)都可以轻松地补充以多种类型的移动基座(例如,浮动基座、平面基座等)。这些移动基座选项伴随的额外自由度会自动添加到机器人(或机器人集)模型中。
文档
有关Optima的进一步文档,包括设置说明、教程等,可以在https://djrakita.github.io/optima_toolbox/找到。
依赖项
~27–50MB
~656K SLoC