在PyBrain ODE模拟中可以将摩擦力添加到关节中吗?

时间:2015-03-17 16:05:12

标签: pybrain pyode

这是我第一次提出问题,所以我会尽力提供所有必要的信息。

我目前正在使用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>
-->

0 个答案:

没有答案