首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Drake中的自动微分

Drake中的自动微分
EN

Stack Overflow用户
提问于 2021-05-20 01:30:55
回答 1查看 116关注 0票数 1

我有一个关于Drake中自动区分(AD)的问题。如果有人用python为系统编写DAE,Drake如何计算用于优化的导数?它在后端是否有AD包,或者它使用有限差分。另外,它如何实现四元数表示的积分和微分。非常感谢您提前抽出时间。

EN

回答 1

Stack Overflow用户

发布于 2021-05-20 01:54:33

德雷克如何计算优化的导数

Drake使用Eigen的自动微分类型(而不是有限差分法)。如果你熟悉深度学习研究,那么pytorch使用pytorch张量对象实现反向传播就是自动微分(AD)的一个例子。Eigen的自动扩散标量是AD的另一个例子,尽管不是通过反向传播(它只使用前向传递)。

顺便说一句,要在python中创建动态系统,可以参考本教程https://github.com/RobotLocomotion/drake/blob/master/tutorials/dynamical_systems.ipynb

还有,它如何实现四元数表示的积分和微分。

我想你的意思是四元数的时间积分。故事有两个部分:

  1. 在模拟中,我们采用四元数的小步长。我们不会将积分的四元数投影回单位球面。另一方面,我们使用SE(3)中的变换矩阵进行所有的运动学计算。因此,当我们将四元数转换为变换矩阵时,我们保证变换矩阵的旋转部分实际上是在SO(3)上。
  2. 在轨迹优化中,我们实现了一个https://github.com/RobotLocomotion/drake/blob/master/multibody/optimization/quaternion_integration_constraint.h类来编码满足单位长度So (3)约束的四元数积分。此外,您还需要一个单位四元数约束,就像在https://github.com/RobotLocomotion/drake/blob/master/multibody/inverse_kinematics/unit_quaternion_constraint.h中一样。如果你有一个非常复杂的具有多个浮动基座和旋转关节的机器人,我正在添加更多的辅助函数来使这个类更容易使用。但我认为对于具有单个浮动基座的简单机器人(如四旋翼),这个类应该可以使用了。对于Drake中的浮动基座,我们用四元数表示它的方向,用角速度表示它的速度。

听起来你要做基于梯度的优化。我们也有一些关于这个主题的交互式教程(你可以在jupyter notebook中交互式地运行这些教程)。您可以将https://github.com/RobotLocomotion/drake/blob/master/tutorials/mathematical_program.ipynb作为起点,将https://github.com/RobotLocomotion/drake/blob/master/tutorials/nonlinear_program.ipynb作为基于梯度的非线性优化的起点。在教程https://github.com/RobotLocomotion/drake/blob/master/tutorials/debug_mathematical_program.ipynb中,我们还提供了一些非线性优化的调试技巧。所有教程都位于drake/tutorials文件夹中,您可以在该文件夹中找到有关其他主题的教程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67608144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档