1

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

我目前正在使用 PyBrain 进行机器学习项目。我的目标是让从动摆了解何时应施加力以最大化振荡幅度。

为此,我使用xodetools.pyPyBrain 附带的脚本在 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>
-->
4

0 回答 0