德雷克数学程序教程

Drake Mathematical Program Tutorial

我 运行ning Drake 在 Ubuntu 20.04 使用 WSL2。
我使用 python3.8.10 和 Drake1.2.0.
我在我的 PC 上尝试了 运行从 deepnote 获得的“数学程序教程”,但是 ipopt 求解器的行为不自然并且没有给出预期的结果。

第一个错误发生在使用 ipopt 求解器的部分。
解决方案的所有组件都打印为“nan”

第二个错误在下面关于“get_solver_details().status”

RuntimeError: The solver_details has not been set yet.

我可以在教程的“手动选择求解器的演示”中看到这两个错误。 结果如下

SolutionResult.kUnknownError
x* =  [nan nan]
Solver is  IPOPT
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-12-2d1b3835c54a> in <module>
     25 print("x* = ", result.GetSolution(x))
     26 print("Solver is ", result.get_solver_id().name())
---> 27 print("Ipopt solver status: ", result.get_solver_details().status,
 28       ", meaning ", result.get_solver_details().ConvertStatusToString())

RuntimeError: The solver_details has not been set yet.

提前致谢。


P.S。 我通过 pip 命令为 venv 安装了 pydrake

python3 -m venv env
env/bin/pip install --upgrade pip
env/bin/pip install drake
sudo apt-get install --no-install-recommends \
  libpython3.8 libx11-6 libsm6 libxt6 libglib2.0-0
source env/bin/activate

我只是从 deepnote 下载文件夹“教程”并将其放在环境下。

然后,我 运行 通过 Jupyter Notebook 将其作为

jupyter notebook

并打开env/Tutorials/mathematical_program.ipynb

pydrake.solvers.ipopt.IpoptSolver class(它是 https://coin-or.github.io/Ipopt/ 库的包装器)可能在 WSL2 下 运行 不正确,因为使用了一些奇怪的 libc API 不适用于 Windows。我们将需要更多信息来重现问题并尝试调试。

您能否准确说明您是如何安装 pydrake 的(即向我们展示您使用的命令行)。是通过 pip (https://drake.mit.edu/pip.html) or just via binary (https://drake.mit.edu/from_binary.html) 实现的吗?

您能否准确说明 运行 Jupyter(命令行)启动笔记本的方式?是 python3 -m pydrake.tutorials 还是其他?

看起来这可能与 WSL 无关,而是 pip 构建(或只是二进制构建)。 运行 在 Ubuntu 20.04(没有 WSL)。 Per Drake Slack,提交问题:

https://github.com/RobotLocomotion/drake/issues/17162

原来pip drake == 1.2.0版本有一个bug in the IpoptSolver compilation.

作为 work-around,您可以改用 SnoptSolver,或者使用 https://drake.mit.edu/from_binary.html 版本(解压缩压缩二进制文件,而不是使用 pip)。