コード例 #1
0
 def test_resolve_defaults_for_some_attributes(self):
     root = mjcf.RootElement()
     root.default.geom.type = 'box'
     root.default.geom.pos = [0, 1, 0]
     geom1 = root.worldbody.add('geom')
     mjcf.commit_defaults(geom1, attributes=['pos'])
     self.assert_same_attributes(geom1, dict(pos=[0, 1, 0]))
コード例 #2
0
    def test_resolve_actuator_defaults(self):
        root = mjcf.RootElement()
        root.default.general.forcelimited = 'true'
        root.default.motor.forcerange = [-2, 3]
        root.default.position.kp = 0.1
        root.default.velocity.kv = 0.2

        body = root.worldbody.add('body')
        joint = body.add('joint')

        motor = root.actuator.add('motor', joint=joint)
        mjcf.commit_defaults(motor)
        self.assert_same_attributes(
            motor, dict(joint=joint, forcelimited='true', forcerange=[-2, 3]))

        position = root.actuator.add('position', joint=joint)
        mjcf.commit_defaults(position)
        self.assert_same_attributes(
            position,
            dict(joint=joint, kp=0.1, forcelimited='true', forcerange=[-2, 3]))

        velocity = root.actuator.add('velocity', joint=joint)
        mjcf.commit_defaults(velocity)
        self.assert_same_attributes(
            velocity,
            dict(joint=joint, kv=0.2, forcelimited='true', forcerange=[-2, 3]))
コード例 #3
0
    def test_resolve_childclass(self):
        root = mjcf.RootElement()
        root.default.geom.type = 'capsule'
        top = root.default.add('default', dclass='top')
        top.geom.pos = [0, 1, 0]
        sub = top.add('default', dclass='sub')
        sub.geom.pos = [0, 0, 1]

        # Element only affected by the childclass of immediate parent.
        body = root.worldbody.add('body', childclass=sub)
        geom1 = body.add('geom')
        mjcf.commit_defaults(geom1)
        self.assert_same_attributes(geom1, dict(type='capsule', pos=[0, 0, 1]))

        # Element overrides parent's childclass.
        geom2 = body.add('geom', dclass=top)
        mjcf.commit_defaults(geom2)
        self.assert_same_attributes(
            geom2, dict(dclass=top, type='capsule', pos=[0, 1, 0]))

        # Element's parent overrides grandparent's childclass.
        subbody1 = body.add('body', childclass=top)
        geom3 = subbody1.add('geom')
        mjcf.commit_defaults(geom3)
        self.assert_same_attributes(geom3, dict(type='capsule', pos=[0, 1, 0]))

        # Element's grandparent does not specify a childclass, but grandparent does.
        subbody2 = body.add('body')
        geom4 = subbody2.add('geom')
        mjcf.commit_defaults(geom4)
        self.assert_same_attributes(geom4, dict(type='capsule', pos=[0, 0, 1]))

        # Direct child of worldbody, not affected by any childclass.
        geom5 = root.worldbody.add('geom')
        mjcf.commit_defaults(geom5)
        self.assert_same_attributes(geom5, dict(type='capsule'))
コード例 #4
0
    def test_resolve_root_defaults(self):
        root = mjcf.RootElement()
        root.default.geom.type = 'box'
        root.default.geom.pos = [0, 1, 0]
        root.default.joint.ref = 2
        root.default.joint.pos = [0, 0, 1]

        # Own attribute overriding default.
        body = root.worldbody.add('body')
        geom1 = body.add('geom', type='sphere')
        mjcf.commit_defaults(geom1)
        self.assert_same_attributes(geom1, dict(type='sphere', pos=[0, 1, 0]))

        # No explicit attributes.
        geom2 = body.add('geom')
        mjcf.commit_defaults(geom2)
        self.assert_same_attributes(geom2, dict(type='box', pos=[0, 1, 0]))

        # Attributes mutually exclusive with those defined in default.
        joint1 = body.add('joint', margin=3)
        mjcf.commit_defaults(joint1)
        self.assert_same_attributes(joint1, dict(pos=[0, 0, 1],
                                                 ref=2,
                                                 margin=3))
コード例 #5
0
    def test_resolve_hierarchies_of_defaults(self):
        root = mjcf.RootElement()
        root.default.geom.type = 'box'
        root.default.joint.pos = [0, 1, 0]

        top1 = root.default.add('default', dclass='top1')
        top1.geom.pos = [0.1, 0, 0]
        top1.joint.pos = [1, 0, 0]
        top1.joint.axis = [0, 0, 1]
        sub1 = top1.add('default', dclass='sub1')
        sub1.geom.size = [0.5]

        top2 = root.default.add('default', dclass='top2')
        top2.joint.pos = [0, 0, 1]
        top2.joint.axis = [0, 1, 0]
        top2.geom.type = 'sphere'

        body = root.worldbody.add('body')
        geom1 = body.add('geom', dclass=sub1)
        mjcf.commit_defaults(geom1)
        self.assert_same_attributes(
            geom1, dict(dclass=sub1, type='box', size=[0.5], pos=[0.1, 0, 0]))

        geom2 = body.add('geom', dclass=top1)
        mjcf.commit_defaults(geom2)
        self.assert_same_attributes(
            geom2, dict(dclass=top1, type='box', pos=[0.1, 0, 0]))

        geom3 = body.add('geom', dclass=top2)
        mjcf.commit_defaults(geom3)
        self.assert_same_attributes(geom3, dict(dclass=top2, type='sphere'))

        geom4 = body.add('geom')
        mjcf.commit_defaults(geom4)
        self.assert_same_attributes(geom4, dict(type='box'))

        joint1 = body.add('joint', dclass=sub1)
        mjcf.commit_defaults(joint1)
        self.assert_same_attributes(
            joint1, dict(dclass=sub1, pos=[1, 0, 0], axis=[0, 0, 1]))

        joint2 = body.add('joint', dclass=top2)
        mjcf.commit_defaults(joint2)
        self.assert_same_attributes(
            joint2, dict(dclass=top2, pos=[0, 0, 1], axis=[0, 1, 0]))

        joint3 = body.add('joint')
        mjcf.commit_defaults(joint3)
        self.assert_same_attributes(joint3, dict(pos=[0, 1, 0]))