예제 #1
0
파일: body.py 프로젝트: huub8/tol-revolve
def get_body_spec(conf):
    """
    :param conf:
    :return:
    :rtype: BodyImplementation
    """
    parts = {
        "Core": PartSpec(
            body_part=CoreComponent,
            arity=4,
            inputs=0 if conf.disable_sensors else 6,
            params=color_params
        ),
        "FixedBrick": PartSpec(
            body_part=FixedBrick,
            arity=4,
            params=color_params
        ),
        "ActiveHinge": PartSpec(
            body_part=ActiveHinge,
            arity=2,
            outputs=1,
            params=color_params
        ),
        "Hinge": PartSpec(
            body_part=Hinge,
            arity=2,
            params=color_params
        ),
        "ParametricBarJoint": PartSpec(
            body_part=ParametricBarJoint,
            arity=2,
            params=[ParamSpec(
                "connection_length",
                default=50,
                min_value=20,
                max_value=100,
                epsilon=conf.body_mutation_epsilon
            ), ParamSpec(
                "alpha",
                default=0,
                min_value=-0.5 * math.pi,
                max_value=0.5 * math.pi,
                epsilon=conf.body_mutation_epsilon
            ), ParamSpec(
                "beta",
                default=0,
                min_value=0,
                max_value=0 if conf.enforce_planarity else math.pi,
                epsilon=conf.body_mutation_epsilon
            )] + color_params
        ),
        # "Wheel": PartSpec(
        #     body_part=Wheel,
        #     arity=1,
        #     params=color_params + [
        #         ParamSpec("radius", min_value=40, max_value=80, default=60, epsilon=conf.mutation_epsilon)
        #     ]
        # ),
        # "ActiveWheel": PartSpec(
        #     body_part=ActiveWheel,
        #     arity=1,
        #     outputs=1,
        #     params=color_params + [
        #         ParamSpec("radius", min_value=40, max_value=80, default=60, epsilon=conf.mutation_epsilon)
        #     ]
        # ),
        # "Cardan": PartSpec(
        #     body_part=Cardan,
        #     arity=2,
        #     params=color_params
        # ),
        # "ActiveCardan": PartSpec(
        #     body_part=ActiveCardan,
        #     arity=2,
        #     outputs=2,
        #     params=color_params
        # ),
        # "ActiveRotator": PartSpec(
        #     body_part=ActiveRotator,
        #     arity=2,
        #     outputs=1,
        #     params=color_params
        # ),
        # "ActiveWheg": PartSpec(
        #     body_part=ActiveWheg,
        #     arity=2,
        #     outputs=1,
        #     params=color_params + [
        #         ParamSpec("radius", min_value=40, max_value=80, default=60, epsilon=conf.body_mutation_epsilon)
        #     ]
        # )
    }

    if not conf.disable_sensors:
        if conf.enable_touch_sensor:
            parts['TouchSensor'] = PartSpec(
                body_part=TouchSensor,
                arity=1,
                inputs=2,
                params=color_params
            )

        if conf.enable_light_sensor:
            parts['LightSensor'] = PartSpec(
                body_part=LightSensor,
                arity=1,
                inputs=1,
                params=color_params
            )

    return BodyImplementation(parts)
예제 #2
0
      type: Oscillator
      phaseOffset: 10
    Sub2-out-0:
      type: Oscillator
  connections:
    - src: Sub1-out-1
      dst: Sub1-out-1
      weight: 2
    - src: Sub2-in-1
      dst: Sub1-out-1
'''

# the body and brain specifications
body_spec = BodyImplementation({
    ("CoreComponent", "E"):
    PartSpec(arity=2, outputs=1, inputs=2),
    "2Params":
    PartSpec(arity=2,
             inputs=2,
             outputs=2,
             params=[
                 ParamSpec("param_a", default=-1),
                 ParamSpec("param_b", default=15)
             ])
})

brain_spec = NeuralNetImplementation({
    "Simple":
    NeuronSpec(params=["bias"]),
    "Oscillator":
    NeuronSpec(params=["period", "phaseOffset", "amplitude"])
예제 #3
0
from revolve.spec import BodyImplementation, \
                         BodyPart, \
                         NeuralNetImplementation, \
                         NeuronSpec, \
                         ParamSpec, \
                         PartSpec, \
                         Robot, \
                         RobotSpecificationException as SpecError, \
                                                        RobotValidator

# Imaginary specification for the tests
body_spec = BodyImplementation({
    ("CoreComponent", "E"):
    PartSpec(
        arity=2,
        outputs=1,
        inputs=2,
    ),
    "2Params":
    PartSpec(arity=2,
             inputs=2,
             outputs=2,
             params=[
                 ParamSpec("param_a",
                           default=-1,
                           min_value=-2,
                           max_value=0,
                           max_inclusive=False),
                 ParamSpec("param_b", default=15),
             ]),
})
예제 #4
0
      type: Oscillator
      phaseOffset: 10
    Sub2-out-0:
      type: Oscillator
  connections:
    - src: Sub1-out-1
      dst: Sub1-out-1
      weight: 2
    - src: Sub2-in-1
      dst: Sub1-out-1
'''
# the body and brain specifications
body_spec = BodyImplementation({
    ("CoreComponent", "E"): PartSpec(
            arity=2,
            outputs=1,
            inputs=2,
    ),
    "2Params"             : PartSpec(
            arity=2,
            inputs=2,
            outputs=2,
            params=[
                ParamSpec(
                        "param_a",
                        default=-1
                ),
                ParamSpec(
                        "param_b",
                        default=15
                ),
예제 #5
0
        return self.attachment

    def get_slot_position(self, slot_id):
        """
        Modify `get_slot_position` to return the attachment of the
        motor instead.
        :param slot_id:
        :return:
        """
        v = super(Wheel, self).get_slot_position(slot_id)
        return v + Vector3(0, 0, self.MOTOR_SIZE)


body_spec = BodyImplementation({
    ("Core", "C"):
    PartSpec(body_part=Core, arity=6, inputs=6, params=color_params),
    ("Wheel", "W"):
    PartSpec(
        body_part=Wheel,
        arity=1,
        outputs=1,

        # Add color parameters to this part
        params=color_params),
    "Hinge":
    PartSpec(body_part=PassiveHinge,
             arity=2,
             params=color_params +
             [ParamSpec("length", min_value=0.1, max_value=1, default=0.5)])
})
예제 #6
0
import random
import unittest

from revolve.generate import BodyGenerator
from revolve.spec import BodyImplementation, \
                         NormalDistParamSpec, \
                         ParamSpec, \
                         PartSpec

# Some imaginary body specification
body_spec = BodyImplementation(
        {
            "Core"    : PartSpec(
                    arity=2,
                    outputs=2,
                    inputs=2
            ),
            "2Params" : PartSpec(
                    arity=2,
                    inputs=2,
                    outputs=2,
                    params=[ParamSpec("param_a", default=-1, min_value=-2,
                                      max_value=0, max_inclusive=False),
                            NormalDistParamSpec("param_b", mean=15, stddev=5,
                                                default=15)]
            ),
            "SomePart": PartSpec(arity=1, inputs=3, outputs=3)
        }
)