这是我第一次提出问题,所以我会尽力提供所有必要的信息。
我目前正在使用PyBrain进行机器学习项目。我的目标是通过驱动摆来了解何时施加力以最大化振荡幅度。
为此,我使用PyBrain附带的xodetools.py
脚本在ODE(Open Dynamics Engine)中对系统进行了建模。当模型工作和模拟时,我无法弄清楚如何为摆hinge
关节添加摩擦力。
Pybrain中包含的一些示例模型(例如johnnie_pgpe
)在其Task类中重新定义了一个名为FricMu
的参数。我已将其包含在我的代码中,但无论我设置的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>
-->