这是我第一次提出问题,所以我会尽力提供所有必要的信息。
我目前正在使用 PyBrain 进行机器学习项目。我的目标是让从动摆了解何时应施加力以最大化振荡幅度。
为此,我使用xodetools.py
PyBrain 附带的脚本在 ODE(开放动态引擎)中对系统进行了建模。虽然模型工作并进行了模拟,但我无法弄清楚如何为摆锤hinge
关节增加摩擦力。
Pybrain 中包含的一些示例模型(例如johnnie_pgpe
)重新定义了FricMu
在其 Task 类中调用的参数。我已经在我的代码中包含了这个,但是无论我设置什么值FricMu
等于系统都没有改变(注意:如果我把它设置string
为模拟仍然运行,所以我假设这个参数实际上什么都不做)。
快速浏览 ODE 文档(http://ode-wiki.org/wiki/index.php?title=Manual:_Joint_Types_and_Functions#Contact)向我建议我需要使用接触关节。脚本不支持这种类型的关节,所以我认为需要我直接写入 XML 文件。
了解 PyBrain 或 ODE 的人可以给我一些关于如何增加系统阻尼的建议。谢谢你。
以下是 PyBrain 导入的摆锤的 XML 代码
<?xml version="1.0" encoding="UTF-8"?>
<xode version="1.0r23" name="pend"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://tanksoftware.com/xode/1.0r23/xode.xsd">
<world>
<space>
<body name="arm">
<transform>
<position y="0" x="0" z="0"/>
</transform>
<mass>
<mass_shape density="125.0">
<box sizex="0.2" sizez="0.2" sizey="0.2"/>
</mass_shape>
</mass>
<geom>
<box sizex="0.2" sizez="0.2" sizey="0.2"/>
</geom>
</body>
<body name="swing">
<transform>
<position y="0" x="0" z="2.2"/>
<rotation>
<euler y="0" x="0" aformat="degrees" z="0"/>
</rotation>
</transform>
<mass>
<mass_shape density="6.36619772588">
<cylinder length="5" radius="0.05"/>
</mass_shape>
</mass>
<geom>
<cylinder length="5" radius="0.05"/>
</geom>
</body>
<joint name="arm_swing">
<link1 body="arm"/>
<link2 body="swing"/>
<hinge>
<axis y="0" x="1" z="0"/>
<anchor y="0" x="0" z="0" absolute="true"/>
</hinge>
</joint>
<joint name="fixedPoint">
<link1 body="arm"/>
<link2 body="swing"/>
<fixed>
</fixed>
</joint>
<geom name="floor">
<plane a="0" c="0" b="1" d="-44.0"/>
</geom>
</space>
</world>
</xode>
<!--odeenvironment parameters
<passpairs>
('arm', 'swing')
<affixToEnvironment>
fixedPoint
<end>
-->