使用> =进行约束抛出RuntimeError(请使用pydrake.common.containers.EqualToDict)

时间:2019-09-23 07:38:04

标签: drake

我正在尝试使用直接转录来解决我的轨迹优化问题,其中涉及一些三角函数。

我具有以下变量类型

a[i] = array([<Expression "(state_0(0) + 0.001 * state_0(4))">,
       <Expression "(state_0(1) + 0.001 * state_0(5))">,
       <Expression "(state_0(2) + 0.001 * state_0(6))">,
       <Expression "(state_0(3) + 0.001 * state_0(7))">,
       <Expression "...omitted...">,
       <Expression "...omitted...">,
       <Expression "...omitted...">,
       <Expression "...omitted...">], dtype=object)

b[i] = array([Variable('state_1(0)', Continuous),
       Variable('state_1(1)', Continuous),
       Variable('state_1(2)', Continuous),
       Variable('state_1(3)', Continuous),
       Variable('state_1(4)', Continuous),
       Variable('state_1(5)', Continuous),
       Variable('state_1(6)', Continuous),
       Variable('state_1(7)', Continuous)], dtype=object)

我正在尝试创建一个约束,如下所示

mp.AddConstraint(b[i] <= a[i])

但是我收到以下错误

RuntimeError: You should not call `__bool__` / `__nonzero__` on `Formula`. If you are trying to make a map with `Variable`, `Expression`, or `Polynomial` as keys (and then access the map in Python), please use pydrake.common.containers.EqualToDict`.

2 个答案:

答案 0 :(得分:1)

是的。尽管您也可以使用eq(a,b)之类的函数名 https://github.com/RobotLocomotion/drake/issues/8315

答案 1 :(得分:0)

似乎必须按元素指定约束,即

for j in range(8):
    mp.AddConstraint(b[i][j] <= a[i][j])