有没有办法确保数学程序创建的决策变量不是AutoDiffXd类型的



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

据我所知,这需要根据q的类型将植物和场景图连接到的图表转换为适当的类型(根据q转换为autodiff或float,如果图表转换为autodiff,则转换为float进行距离查询(。

如果q的类型为autodiff,则可以将关系图转换为automdiff,但将其转换为float(以便query_object.ComputeSignedDistanceQuery工作(会产生以下错误:

RuntimeError:drake::systems:Diagramdrake::AutoDiffXd类型的System:

问题是AutoDiff类型的场景图无法转换为浮点。

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

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


使用具有决策变量矩阵的切片(q[1,:](的提取值(q.dtype==AutoDiffXd评估为true(产生以下类型错误:

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

调用时使用:array([变量('q(1,0(',连续(,变量('q(1,1(',连续(,变量('q(1,2(',连续(,变量('q1,3',连续,变量('q(1,4(',连续(,变量('q(1,5(',持续(,变量('q(1,6(',连续(,变量('q(1,7(',持续(,变量('q(1,8(',连续(,变量('q(1,9(',持续(,变量('q(1,10(',连续(,变量('q(1,11(',持续(,变量('q(1,12(',连续(,变量('q(1,13(',持续(,变量('q(1,14(',连续(,变量('q(1,15(',持续(,变量('q(1,16(',连续(,变量('q(1,17(',持续(,变量('q(1,18(',连续(,变量('q(1,19(',持续(,变量('q(1,20(',连续(],dtype=对象(

我可能需要从您的设置中了解更多细节以提供帮助。MathematicalProgram中的决策变量始终是符号的(而不是autodiff(。但是可以使用double或autodiff值来调用泛型约束。本教程非常相关。

如果您确实有一个autodiff矩阵,并且希望将其转换为double,则可以使用ExtractValue。

最新更新