微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

RegionOfAttraction() 是否可用于 pydrake 的多体植物?

如何解决RegionOfAttraction() 是否可用于 pydrake 的多体植物?

为了熟悉吸引代码区域,我尝试估计我有 urdf 描述的 Acrobot 的 RoA。运行这些行:

import numpy as np

from pydrake.all import DiagramBuilder,AddMultibodyPlantSceneGraph,Parser,MultibodyPlant,Variable,Simulator,ConstantVectorSource,RegionOfAttraction,LinearSystem,LinearQuadraticRegulator,Saturation

import pydot
#%% prepare and load urdf
builder = DiagramBuilder()
plant,scene_graph = AddMultibodyPlantSceneGraph(builder,time_step=0.0)

parser = Parser(plant,scene_graph)
parser.AddModelFromFile("acrobot.urdf")

plant.Finalize()

#%% create down context
q=np.array([0.0,0.0])
qd=np.array([0.0,0.0])

stable_ctxt = plant.CreateDefaultContext() 
plant.SetPositions(stable_ctxt,q)
plant.SetVeLocities(stable_ctxt,qd)

actuation_port = plant.get_actuation_input_port()
actuation_port.FixValue(stable_ctxt,0)

#%% calc RoA
V = RegionOfAttraction(system=plant,context=stable_ctxt)

给了我这个错误

SystemExit: Failure at systems/analysis/region_of_attraction.cc:126 in RegionOfAttraction(): condition 'xdot0.template lpnorm<Eigen::Infinity>() <= 1e-14' Failed.

查看 region_of_attraction.cc:123 中的注释时,这表明 x0 不是稳定不动点。但是,对于提供给 stable_ctxtRegionOfAttraction(),它应该是稳定的。

可以使用 RegionOfAttraction() 函数来估计多体植物的 RoA(它们是否支持转换为 Symbolic),或者还有什么我需要考虑的事情/我的想法中有一些明显的错误吗?

提前致谢!

解决方法

感谢您提出要求并提供最低限度的复制。这个例子实际上发生了很多事情!

首先,通过调用 AddMultibodyPlantSceneGraph,您创建了一个连接到 MultibodyPlantSceneGraph,但随后仅将植物传递到 RegionOfAttraction 方法中,而没有其 { {1}}。然后它会抱怨,因为它的几何端口没有连接。一种解决方法是只做:

SceneGraph

其次,所写的 plant = MultibodyPlant(time_step=0.0) parser = Parser(plant) parser.AddModelFromFile( FindResourceOrThrow("drake/examples/acrobot/Acrobot.urdf")) plant.Finalize() 代码假设您只会传入一个闭环系统(无输入端口),就像使用 LQR 所得到的一样。所以输入端口“FixValue”分配没有被复制到符号工厂。支持固定输入端口的情况也是合理的,所以我只是PR'd the fix。或者,您可以通过为输入端口添加 RegionOfAttraction,然后将图表(而不是植物)传递到 ConstantVectorSystem 方法中来立即解决此问题。

第三,必须注意在符号 RegionOfAttraction 中做什么是合理的。我们不支持质量矩阵的符号求逆(除了微不足道的情况);我不认为这是一个缺失的功能,而是一个我们应该避免的情况。以隐式形式考虑动态要好得多(参见http://underactuated.csail.mit.edu/lyapunov.html#ex:implicit)。话虽如此,我们实际上可以通过 ABA ldlt 调用轻松支持 2x2 符号矩阵逆(我实际上认为我们已经这样做了)。

最后,MultibodyPlant 中使用的平方和工具仅支持多项式系统,而 Acrobot 动力学不是多项式。您要么想替换正弦/余弦项 as in this example,要么对不动点周围的动力学进行泰勒展开。符号工具支持泰勒展开,但恐怕我还没有通过添加包装符号调用的方法 RegionOfAttraction 来添加使工作流程非常好的工具。这样做也相对容易和有用!

如果有特别缺失的具有高价值的部分,那么我们可以打开一个问题,或者更好的是我可以尝试帮助您做出贡献。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。