【问题标题】:Is there a way to ensure that the decision variables created by mathematical program are not of type AutoDiffXd?有没有办法确保数学程序创建的决策变量不是 AutoDiffXd 类型?
【发布时间】:2022-10-25 15:35:56
【问题描述】:

我正在尝试将模型在我的工厂中的位置设置为状态向量 q,由我的数学程序生成作为决策变量,以测试该状态是否有效(检查模型是否在有效位置距离查询)。

据我了解,这需要根据 q 的类型将植物和场景图连接到的图表转换为适当的类型(根据 q 进行自动差异或浮动,如果图表转换为自动差异,则浮动以进行距离查询) .

如果 q 是 autodiff 类型,则将图表转换为 autodiff 很好,但将其转换为浮点数(以便 query_object.ComputeSignedDistanceQuerry 工作)会产生此错误:

RuntimeError: System ::_ of type drake::systems::Diagramdrake::AutoDiffXd 不支持标量转换为 double 类型(因为 System ::_::scene_graph 类型 drake::geometry::SceneGraphdrake::AutoDiffXd 不支持标量转换为 double 类型)

那么问题是 AutoDiff 类型的场景图不能转换为浮点数。

我能想到的“最简单”的解决方案是通过强制数学程序生成的状态向量不能是 AutoDiff 类型来防止必须转换为 AutoDiff。这可能吗?

如果没有,是否还有其他方法可以避免将场景图转换为 autodiff(考虑到只有植物需要转换为 set_position)?


将提取值与决策变量矩阵的切片 (q[1, :]) 一起使用(q.dtype == AutoDiffXd 评估为真)会产生以下类型错误:

TypeError: ExtractValue(): 不兼容的函数参数。支持以下参数类型: 1. (auto_diff_matrix: numpy.ndarray[object[m, n]]) -> numpy.ndarray[numpy.float64[m, n]]

【问题讨论】:

    标签: drake


    【解决方案1】:

    我可能需要从您的设置中了解更多详细信息以提供帮助。 MathematicalProgram 中的决策变量始终是符号变量(不是 autodiff)。但是可以使用 double 或 autodiff 值调用通用约束。 This tutorial 非常相关。

    如果您确实有一个 autodiff 矩阵并希望将其转换为双精度矩阵,您可以使用ExtractValue

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      • 2019-06-11
      • 2021-05-17
      • 1970-01-01
      相关资源
      最近更新 更多