Beispiel #1
0
def add_axes(worldbody, axis_length=1.2, axis_radius=0.05):
    """
    Adds a set of axis at the world origin. Helpful for debugging.
    """
    x_axis = e.Geom(conaffinity=0,
                    name="x_axis",
                    pos=[0, 0, 0],
                    rgba=[1, 0, 0, 0.5],
                    type="cylinder",
                    size=axis_radius,
                    fromto=[0, 0, 0, axis_length, 0, 0])
    y_axis = e.Geom(conaffinity=0,
                    name="y_axis",
                    pos=[0, 0, 0],
                    rgba=[0, 1, 0, 0.5],
                    type="cylinder",
                    size=axis_radius,
                    fromto=[0, 0, 0, 0, axis_length, 0])
    z_axis = e.Geom(conaffinity=0,
                    name="z_axis",
                    pos=[0, 0, 0],
                    rgba=[0, 0, 1, 0.5],
                    type="cylinder",
                    size=axis_radius,
                    fromto=[0, 0, 0, 0, 0, axis_length])
    worldbody.add_children([x_axis, y_axis, z_axis])
Beispiel #2
0
def get_leg(name,
            hip_distance=0.2,
            hip_angle=0.0,
            leg_length=0.4,
            foot_length=0.6):
    leg = e.Body(name=name, pos=[0, 0, 0], euler=[0, 0, hip_angle])

    aux_geom = e.Geom(fromto=[0, 0, 0, hip_distance, 0, 0],
                      name="aux_geom_" + name,
                      size=0.08,
                      type="capsule")
    aux_body = e.Body(name="aux_body_" + name, pos=[hip_distance, 0, 0])
    leg.add_children([aux_geom, aux_body])

    # Body
    hip_joint = e.Joint(axis=[0, 0, 1],
                        name="hip_joint_" + name,
                        pos=[0.0, 0.0, 0.0],
                        range=[-30, 30],
                        type="hinge")
    leg_geom = e.Geom(fromto=[0.0, 0.0, 0.0, leg_length, 0.0, 0.0],
                      name="leg_geom_" + name,
                      size=0.08,
                      type="capsule")
    ankle_body = e.Body(name="ankle_body_" + name, pos=[leg_length, 0.0, 0])
    aux_body.add_children([hip_joint, leg_geom, ankle_body])

    # Body
    ankle_joint = e.Joint(axis=[0, 1, 0],
                          name="ankle_joint_" + name,
                          pos=[0.0, 0.0, 0.0],
                          range=[30, 70],
                          type="hinge")
    ankle_geom = e.Geom(fromto=[0.0, 0.0, 0.0, foot_length, 0.0, 0.0],
                        name="ankle_geom_" + name,
                        size=0.08,
                        type="capsule")
    ankle_body.add_children([ankle_joint, ankle_geom])

    # Actuators
    hip = e.Motor(ctrllimited="true",
                  ctrlrange=[-1.0, 1.0],
                  joint=hip_joint.name,
                  gear=150)
    ankle = e.Motor(ctrllimited=True,
                    ctrlrange=[-1.0, 1.0],
                    joint=ankle_joint.name,
                    gear=150)

    return leg, hip, ankle
Beispiel #3
0
def populate_ma_worldbody(worldbody):
    """
    Adds a standard MuscledAgents floor and global light to the provided
    WorldBody() object.
    """

    light = e.Light(cutoff=100,
                    diffuse=[1, 1, 1],
                    dir=[-0, 0, -1.3],
                    directional=True,
                    exponent=1,
                    pos=[0, 0, 1.3],
                    specular=[.1, .1, .1])

    floor_geom = e.Geom(conaffinity=1,
                        condim=3,
                        material="MatPlane",
                        name="floor",
                        pos=[0, 0, 0],
                        rgba=[0.8, 0.9, 0.8, 1],
                        size=[40, 40, 40],
                        type="plane")

    worldbody.add_children([
        light,
        floor_geom,
    ])
def get_cube(x=0, y=0, z=1, size=0.2, rgba=[0.5, 0.5, 0.5, 1]):

    body = e.Body(pos=[x, y, z])
    freejoint = e.Freejoint()
    geom = e.Geom(type="box", size=[size, size, size], rgba=rgba)

    body.add_children([freejoint, geom])

    return body
def get_side(fromto, name):
    side_color = [0.3, 0.1, 0.3, 1]
    side = e.Geom(
        conaffinity="0",
        fromto=fromto,
        name=name,
        rgba=side_color,
        size=0.2,
        type="capsule",
    )
    return side
Beispiel #6
0
def get_ant(name="ant1", location=[0, 0, 0.75]):

    if name != "":
        name = "_{}".format(name)

    torso = e.Body(
        name="torso" + name,
        pos=location,
    )

    # Torso
    camera = e.Camera(name="track" + name,
                      mode="trackcom",
                      pos=[0, -3, 0.3],
                      xyaxes=[1, 0, 0, 0, 0, 1])
    torso_geom = e.Geom(name="torso_geom" + name,
                        pos=[0, 0, 0],
                        size=0.25,
                        type="sphere",
                        rgba=None)
    joint = e.Joint(armature=0,
                    damping=0,
                    limited=False,
                    margin=0.01,
                    name="root" + name,
                    pos=[0, 0, 0],
                    type="free")
    front_right_leg, fr_tendons, fr_actuators = get_leg("front_right_leg" +
                                                        name)
    front_left_leg, fl_tendons, fl_actuators = get_leg(
        "front_left_leg" + name,
        hip_angle=90,
    )
    back_left_leg, bl_tendons, bl_actuators = get_leg(
        "back_left_leg" + name,
        hip_angle=180,
    )
    back_right_leg, br_tendons, br_actuators = get_leg(
        "back_right_leg" + name,
        hip_angle=270,
    )
    torso.add_children([
        camera, torso_geom, joint, front_right_leg, front_left_leg,
        back_left_leg, back_right_leg
    ])

    tendons = fr_tendons + fl_tendons + bl_tendons + br_tendons
    actuators = fr_actuators + fl_actuators + bl_actuators + br_actuators

    return torso, tendons, actuators
def main():
    mujoco = e.Mujoco(model="empty-world")

    compiler = e.Compiler(angle="degree",
                          coordinate="local",
                          inertiafromgeom=True)
    option = e.Option(integrator="RK4", timestep=0.01)
    size = e.Size(
        njmax=1000,
        nconmax=500,
    )
    default = e.Default()
    asset = e.Asset()
    worldbody = e.Worldbody()

    mujoco.add_children([
        compiler,
        option,
        size,
        default,
        asset,
        worldbody,
    ])

    # Default
    d_joint = e.Joint(armature=1, damping=1, limited=True)
    d_geom = e.Geom(conaffinity=0,
                    condim=3,
                    density=5.0,
                    friction=[1, 0.5, 0.5],
                    margin=0.01,
                    rgba=[0.8, 0.6, 0.4, 1])
    default.add_children([d_joint, d_geom])

    # Standard assets
    utils.populated_ma_asset(asset)

    # Standard floor and lighting
    utils.populate_ma_worldbody(worldbody)

    model_xml = mujoco.xml()
    filename = "empty-world.xml"
    utils.save_model(model_xml, filename)
Beispiel #8
0
def main():

    mujoco = e.Mujoco(model="swimmer", )
    compiler = e.Compiler(
        angle="degree",
        coordinate="local",
        inertiafromgeom="true",
    )
    option = e.Option(
        collision="predefined",
        density="4000",
        integrator="RK4",
        timestep="0.01",
        viscosity="0.1",
    )
    default = e.Default()
    asset = e.Asset()
    worldbody = e.Worldbody()
    actuator = e.Actuator()
    mujoco.add_children([
        compiler,
        option,
        default,
        asset,
        worldbody,
        actuator,
    ])
    geom = e.Geom(
        conaffinity="1",
        condim="1",
        contype="1",
        material="geom",
        rgba="0.8 0.6 .4 1",
    )
    joint = e.Joint(armature="0.1", )
    default.add_children([
        geom,
        joint,
    ])
    texture = e.Texture(
        builtin="gradient",
        height="100",
        rgb1="1 1 1",
        rgb2="0 0 0",
        type="skybox",
        width="100",
    )
    texgeom = e.Texture(
        builtin="flat",
        height="1278",
        mark="cross",
        markrgb="1 1 1",
        name="texgeom",
        random="0.01",
        rgb1="0.8 0.6 0.4",
        rgb2="0.8 0.6 0.4",
        type="cube",
        width="127",
    )
    texplane = e.Texture(
        builtin="checker",
        height="100",
        name="texplane",
        rgb1="0 0 0",
        rgb2="0.8 0.8 0.8",
        type="2d",
        width="100",
    )
    MatPlane = e.Material(
        name="MatPlane",
        reflectance="0.5",
        shininess="1",
        specular="1",
        texrepeat="30 30",
        texture="texplane",
    )
    geom_1 = e.Material(
        name="geom",
        texture="texgeom",
        texuniform="true",
    )
    asset.add_children([
        texture,
        texgeom,
        texplane,
        MatPlane,
        geom_1,
    ])
    light = e.Light(
        cutoff="100",
        diffuse="1 1 1",
        dir="-0 0 -1.3",
        directional="true",
        exponent="1",
        pos="0 0 1.3",
        specular=".1 .1 .1",
    )
    floor = e.Geom(
        conaffinity="1",
        condim="3",
        material="MatPlane",
        name="floor",
        pos="0 0 -0.1",
        rgba="0.8 0.9 0.8 1",
        size="40 40 0.1",
        type="plane",
    )
    torso = e.Body(
        name="torso",
        pos="0 0 0",
    )
    worldbody.add_children([
        light,
        floor,
        torso,
    ])
    motor = e.Motor(
        ctrllimited="true",
        ctrlrange="-1 1",
        gear="150.0",
        joint="rot2",
    )
    motor_1 = e.Motor(
        ctrllimited="true",
        ctrlrange="-1 1",
        gear="150.0",
        joint="rot3",
    )
    actuator.add_children([
        motor,
        motor_1,
    ])
    geom_2 = e.Geom(
        density="1000",
        fromto="1.5 0 0 0.5 0 0",
        size="0.1",
        type="capsule",
    )
    slider1 = e.Joint(
        axis="1 0 0",
        name="slider1",
        pos="0 0 0",
        type="slide",
    )
    slider2 = e.Joint(
        axis="0 1 0",
        name="slider2",
        pos="0 0 0",
        type="slide",
    )
    rot = e.Joint(
        axis="0 0 1",
        name="rot",
        pos="0 0 0",
        type="hinge",
    )
    mid = e.Body(
        name="mid",
        pos="0.5 0 0",
    )
    torso.add_children([
        geom_2,
        slider1,
        slider2,
        rot,
        mid,
    ])
    geom_3 = e.Geom(
        density="1000",
        fromto="0 0 0 -1 0 0",
        size="0.1",
        type="capsule",
    )
    rot2 = e.Joint(
        axis="0 0 1",
        limited="true",
        name="rot2",
        pos="0 0 0",
        range="-100 100",
        type="hinge",
    )
    back = e.Body(
        name="back",
        pos="-1 0 0",
    )
    mid.add_children([
        geom_3,
        rot2,
        back,
    ])
    geom_4 = e.Geom(
        density="1000",
        fromto="0 0 0 -1 0 0",
        size="0.1",
        type="capsule",
    )
    rot3 = e.Joint(
        axis="0 0 1",
        limited="true",
        name="rot3",
        pos="0 0 0",
        range="-100 100",
        type="hinge",
    )
    back.add_children([
        geom_4,
        rot3,
    ])

    model_xml = mujoco.xml()

    # Output
    with open('swimmer_gen.xml', 'w') as fh:
        fh.write(model_xml)
Beispiel #9
0
def main():

    mujoco = e.Mujoco(model="cartpole", )
    compiler = e.Compiler(
        coordinate="local",
        inertiafromgeom="true",
    )
    custom = e.Custom()
    default = e.Default()
    option = e.Option(
        gravity="1e-5 0 -9.81",
        integrator="RK4",
        timestep="0.01",
    )
    size = e.Size(nstack="3000", )
    worldbody = e.Worldbody()
    actuator = e.Actuator()
    mujoco.add_children([
        compiler,
        custom,
        default,
        option,
        size,
        worldbody,
        actuator,
    ])
    frame_skip = e.Numeric(
        data="2",
        name="frame_skip",
    )
    custom.add_children([
        frame_skip,
    ])
    joint = e.Joint(damping="0.05", )
    geom = e.Geom(
        contype="0",
        friction="1 0.1 0.1",
        rgba="0.7 0.7 0 1",
    )
    default.add_children([
        joint,
        geom,
    ])
    floor = e.Geom(
        name="floor",
        pos="0 0 -3.0",
        rgba="0.8 0.9 0.8 1",
        size="40 40 40",
        type="plane",
    )
    rail = e.Geom(
        name="rail",
        pos="0 0 0",
        quat="0.707 0 0.707 0",
        rgba="0.3 0.3 0.7 1",
        size="0.02 1",
        type="capsule",
    )
    cart = e.Body(
        name="cart",
        pos="0 0 0",
    )
    worldbody.add_children([
        floor,
        rail,
        cart,
    ])
    slide = e.Motor(
        ctrllimited="true",
        ctrlrange="-1 1",
        gear="500",
        joint="slider",
        name="slide",
    )
    actuator.add_children([
        slide,
    ])
    slider = e.Joint(
        axis="1 0 0",
        limited="true",
        margin="0.01",
        name="slider",
        pos="0 0 0",
        range="-1 1",
        type="slide",
    )
    cart_1 = e.Geom(
        name="cart",
        pos="0 0 0",
        quat="0.707 0 0.707 0",
        size="0.1 0.1",
        type="capsule",
    )
    pole = e.Body(
        name="pole",
        pos="0 0 0",
    )
    cart.add_children([
        slider,
        cart_1,
        pole,
    ])
    hinge = e.Joint(
        axis="0 1 0",
        name="hinge",
        pos="0 0 0",
        type="hinge",
    )
    cpole = e.Geom(
        fromto="0 0 0 0 0 0.6",
        name="cpole",
        rgba="0 0.7 0.7 1",
        size="0.045 0.3",
        type="capsule",
    )
    pole2 = e.Body(
        name="pole2",
        pos="0 0 0.6",
    )
    pole.add_children([
        hinge,
        cpole,
        pole2,
    ])
    hinge2 = e.Joint(
        axis="0 1 0",
        name="hinge2",
        pos="0 0 0",
        type="hinge",
    )
    cpole2 = e.Geom(
        fromto="0 0 0 0 0 0.6",
        name="cpole2",
        rgba="0 0.7 0.7 1",
        size="0.045 0.3",
        type="capsule",
    )
    tip = e.Site(
        name="tip",
        pos="0 0 .6",
        size="0.01 0.01",
    )
    pole2.add_children([
        hinge2,
        cpole2,
        tip,
    ])

    model_xml = mujoco.xml()

    # Output
    with open('inverted_double_pendulum_gen.xml', 'w') as fh:
        fh.write(model_xml)
Beispiel #10
0
def main():

    mujoco = e.Mujoco(
        model="inverted pendulum",
    )
    compiler = e.Compiler(
        inertiafromgeom="true",
    )
    default = e.Default(
    )
    option = e.Option(
        gravity="0 0 -9.81",
        integrator="RK4",
        timestep="0.02",
    )
    size = e.Size(
        nstack="3000",
    )
    worldbody = e.Worldbody(
    )
    actuator = e.Actuator(
    )
    mujoco.add_children([
        compiler,
        default,
        option,
        size,
        worldbody,
        actuator,
    ])
    joint = e.Joint(
        armature="0",
        damping="1",
        limited="true",
    )
    geom = e.Geom(
        contype="0",
        friction="1 0.1 0.1",
        rgba="0.7 0.7 0 1",
    )
    tendon = e.Tendon(
    )
    motor = e.Motor(
        ctrlrange="-3 3",
    )
    default.add_children([
        joint,
        geom,
        tendon,
        motor,
    ])
    rail = e.Geom(
        name="rail",
        pos="0 0 0",
        quat="0.707 0 0.707 0",
        rgba="0.3 0.3 0.7 1",
        size="0.02 1",
        type="capsule",
    )
    cart = e.Body(
        name="cart",
        pos="0 0 0",
    )
    worldbody.add_children([
        rail,
        cart,
    ])
    slide = e.Motor(
        gear="100",
        joint="slider",
        name="slide",
    )
    actuator.add_children([
        slide,
    ])
    slider = e.Joint(
        axis="1 0 0",
        limited="true",
        name="slider",
        pos="0 0 0",
        range="-1 1",
        type="slide",
    )
    cart_1 = e.Geom(
        name="cart",
        pos="0 0 0",
        quat="0.707 0 0.707 0",
        size="0.1 0.1",
        type="capsule",
    )
    pole = e.Body(
        name="pole",
        pos="0 0 0",
    )
    cart.add_children([
        slider,
        cart_1,
        pole,
    ])
    hinge = e.Joint(
        axis="0 1 0",
        name="hinge",
        pos="0 0 0",
        range="-90 90",
        type="hinge",
    )
    cpole = e.Geom(
        fromto="0 0 0 0.001 0 0.6",
        name="cpole",
        rgba="0 0.7 0.7 1",
        size="0.049 0.3",
        type="capsule",
    )
    pole.add_children([
        hinge,
        cpole,
    ])

    model_xml = mujoco.xml()

    # Output
    with open('inverted_pendulum_gen.xml', 'w') as fh:
        fh.write(model_xml)
Beispiel #11
0
def main():

    mujoco = e.Mujoco(model="arm3d", )
    compiler = e.Compiler(
        inertiafromgeom="true",
        angle="radian",
        coordinate="local",
    )
    option = e.Option(
        timestep="0.01",
        gravity="0 0 0",
        iterations="20",
        integrator="Euler",
    )
    default = e.Default()
    worldbody = e.Worldbody()
    actuator = e.Actuator()
    mujoco.add_children([
        compiler,
        option,
        default,
        worldbody,
        actuator,
    ])
    joint = e.Joint(
        armature="0.04",
        damping="1",
        limited="true",
    )
    geom = e.Geom(
        friction=".0 .0 .0",
        density="300",
        margin="0.002",
        condim="1",
        contype="0",
        conaffinity="0",
    )
    default.add_children([
        joint,
        geom,
    ])
    light = e.Light(
        diffuse=".5 .5 .5",
        pos="0 0 3",
        dir="0 0 -1",
    )
    table = e.Geom(
        name="table",
        type="plane",
        pos="0 0.5 -0.325",
        size="1 1 0.1",
        contype="1",
        conaffinity="1",
    )
    r_shoulder_pan_link = e.Body(
        name="r_shoulder_pan_link",
        pos="0 -0.6 0",
    )
    object = e.Body(
        name="object",
        pos="0 0 -0.270",
    )
    goal = e.Body(
        name="goal",
        pos="0.0 0.0 -0.3230",
    )
    worldbody.add_children([
        light,
        table,
        r_shoulder_pan_link,
        object,
        goal,
    ])
    motor = e.Motor(
        joint="r_shoulder_pan_joint",
        ctrlrange="-3.0 3.0",
        ctrllimited="true",
    )
    motor_1 = e.Motor(
        joint="r_shoulder_lift_joint",
        ctrlrange="-3.0 3.0",
        ctrllimited="true",
    )
    motor_2 = e.Motor(
        joint="r_upper_arm_roll_joint",
        ctrlrange="-3.0 3.0",
        ctrllimited="true",
    )
    motor_3 = e.Motor(
        joint="r_elbow_flex_joint",
        ctrlrange="-3.0 3.0",
        ctrllimited="true",
    )
    motor_4 = e.Motor(
        joint="r_forearm_roll_joint",
        ctrlrange="-3.0 3.0",
        ctrllimited="true",
    )
    motor_5 = e.Motor(
        joint="r_wrist_flex_joint",
        ctrlrange="-3.0 3.0",
        ctrllimited="true",
    )
    motor_6 = e.Motor(
        joint="r_wrist_roll_joint",
        ctrlrange="-3.0 3.0",
        ctrllimited="true",
    )
    actuator.add_children([
        motor,
        motor_1,
        motor_2,
        motor_3,
        motor_4,
        motor_5,
        motor_6,
    ])
    e1 = e.Geom(
        name="e1",
        type="sphere",
        rgba="0.6 0.6 0.6 1",
        pos="-0.06 0.05 0.2",
        size="0.05",
    )
    e2 = e.Geom(
        name="e2",
        type="sphere",
        rgba="0.6 0.6 0.6 1",
        pos=" 0.06 0.05 0.2",
        size="0.05",
    )
    e1p = e.Geom(
        name="e1p",
        type="sphere",
        rgba="0.1 0.1 0.1 1",
        pos="-0.06 0.09 0.2",
        size="0.03",
    )
    e2p = e.Geom(
        name="e2p",
        type="sphere",
        rgba="0.1 0.1 0.1 1",
        pos=" 0.06 0.09 0.2",
        size="0.03",
    )
    sp = e.Geom(
        name="sp",
        type="capsule",
        fromto="0 0 -0.4 0 0 0.2",
        size="0.1",
    )
    r_shoulder_pan_joint = e.Joint(
        name="r_shoulder_pan_joint",
        type="hinge",
        pos="0 0 0",
        axis="0 0 1",
        range="-2.2854 1.714602",
        damping="1.0",
    )
    r_shoulder_lift_link = e.Body(
        name="r_shoulder_lift_link",
        pos="0.1 0 0",
    )
    r_shoulder_pan_link.add_children([
        e1,
        e2,
        e1p,
        e2p,
        sp,
        r_shoulder_pan_joint,
        r_shoulder_lift_link,
    ])
    geom_1 = e.Geom(
        type="sphere",
        rgba="1 1 1 1",
        pos="0 0 0",
        size="0.05 0.05 0.05",
        contype="1",
        conaffinity="0",
    )
    obj_slidey = e.Joint(
        name="obj_slidey",
        armature="0.1",
        type="slide",
        pos="0 0 0",
        axis="0 1 0",
        range="-10.3213 10.3",
        damping="0.5",
    )
    obj_slidex = e.Joint(
        name="obj_slidex",
        armature="0.1",
        type="slide",
        pos="0 0 0",
        axis="1 0 0",
        range="-10.3213 10.3",
        damping="0.5",
    )
    object.add_children([
        geom_1,
        obj_slidey,
        obj_slidex,
    ])
    geom_2 = e.Geom(
        rgba="1. 1. 1. 0",
        pos="0 0 0",
        type="box",
        size="0.01 0.01 0.01",
        contype="0",
        conaffinity="0",
    )
    body = e.Body(pos="0 0 0", )
    coaster = e.Body(
        name="coaster",
        pos="0 0 0",
    )
    body_1 = e.Body(
        pos="0 0 0",
        axisangle="0 0 1 0.785",
    )
    body_2 = e.Body(
        pos="0 0 0",
        axisangle="0 0 1 -0.785",
    )
    goal_free = e.Joint(
        name="goal_free",
        type="free",
        pos="0 0 0",
        limited="false",
        damping="0",
    )
    goal.add_children([
        geom_2,
        body,
        coaster,
        body_1,
        body_2,
        goal_free,
    ])
    sl = e.Geom(
        name="sl",
        type="capsule",
        fromto="0 -0.1 0 0 0.1 0",
        size="0.1",
    )
    r_shoulder_lift_joint = e.Joint(
        name="r_shoulder_lift_joint",
        type="hinge",
        pos="0 0 0",
        axis="0 1 0",
        range="-0.5236 1.3963",
        damping="1.0",
    )
    r_upper_arm_roll_link = e.Body(
        name="r_upper_arm_roll_link",
        pos="0 0 0",
    )
    r_shoulder_lift_link.add_children([
        sl,
        r_shoulder_lift_joint,
        r_upper_arm_roll_link,
    ])
    geom_3 = e.Geom(
        rgba="1. 1. 1. 1",
        pos="0 0.075 0.04",
        type="box",
        size="0.032 0.001 0.04",
        contype="0",
        conaffinity="1",
    )
    body.add_children([
        geom_3,
    ])
    geom_4 = e.Geom(
        rgba="1. 1. 1. 1",
        type="cylinder",
        size="0.08 0.001 0.1",
        density="1000000",
        contype="0",
        conaffinity="0",
    )
    coaster.add_children([
        geom_4,
    ])
    geom_5 = e.Geom(
        rgba="1. 1. 1. 1",
        pos="0 0.075 0.04",
        type="box",
        size="0.032 0.001 0.04",
        contype="0",
        conaffinity="1",
    )
    body_1.add_children([
        geom_5,
    ])
    geom_6 = e.Geom(
        rgba="1. 1. 1. 1",
        pos="0 0.075 0.04",
        type="box",
        size="0.032 0.001 0.04",
        contype="0",
        conaffinity="1",
    )
    body_2.add_children([
        geom_6,
    ])
    uar = e.Geom(
        name="uar",
        type="capsule",
        fromto="-0.1 0 0 0.1 0 0",
        size="0.02",
    )
    r_upper_arm_roll_joint = e.Joint(
        name="r_upper_arm_roll_joint",
        type="hinge",
        pos="0 0 0",
        axis="1 0 0",
        range="-1.5 1.7",
        damping="0.1",
    )
    r_upper_arm_link = e.Body(
        name="r_upper_arm_link",
        pos="0 0 0",
    )
    r_upper_arm_roll_link.add_children([
        uar,
        r_upper_arm_roll_joint,
        r_upper_arm_link,
    ])
    ua = e.Geom(
        name="ua",
        type="capsule",
        fromto="0 0 0 0.4 0 0",
        size="0.06",
    )
    r_elbow_flex_link = e.Body(
        name="r_elbow_flex_link",
        pos="0.4 0 0",
    )
    r_upper_arm_link.add_children([
        ua,
        r_elbow_flex_link,
    ])
    ef = e.Geom(
        name="ef",
        type="capsule",
        fromto="0 -0.02 0 0.0 0.02 0",
        size="0.06",
    )
    r_elbow_flex_joint = e.Joint(
        name="r_elbow_flex_joint",
        type="hinge",
        pos="0 0 0",
        axis="0 1 0",
        range="-2.3213 0",
        damping="0.1",
    )
    r_forearm_roll_link = e.Body(
        name="r_forearm_roll_link",
        pos="0 0 0",
    )
    r_elbow_flex_link.add_children([
        ef,
        r_elbow_flex_joint,
        r_forearm_roll_link,
    ])
    fr = e.Geom(
        name="fr",
        type="capsule",
        fromto="-0.1 0 0 0.1 0 0",
        size="0.02",
    )
    r_forearm_roll_joint = e.Joint(
        name="r_forearm_roll_joint",
        type="hinge",
        limited="true",
        pos="0 0 0",
        axis="1 0 0",
        damping=".1",
        range="-1.5 1.5",
    )
    r_forearm_link = e.Body(
        name="r_forearm_link",
        pos="0 0 0",
    )
    r_forearm_roll_link.add_children([
        fr,
        r_forearm_roll_joint,
        r_forearm_link,
    ])
    fa = e.Geom(
        name="fa",
        type="capsule",
        fromto="0 0 0 0.291 0 0",
        size="0.05",
    )
    r_wrist_flex_link = e.Body(
        name="r_wrist_flex_link",
        pos="0.321 0 0",
    )
    r_forearm_link.add_children([
        fa,
        r_wrist_flex_link,
    ])
    wf = e.Geom(
        name="wf",
        type="capsule",
        fromto="0 -0.02 0 0 0.02 0",
        size="0.01",
    )
    r_wrist_flex_joint = e.Joint(
        name="r_wrist_flex_joint",
        type="hinge",
        pos="0 0 0",
        axis="0 1 0",
        range="-1.094 0",
        damping=".1",
    )
    r_wrist_roll_link = e.Body(
        name="r_wrist_roll_link",
        pos="0 0 0",
    )
    r_wrist_flex_link.add_children([
        wf,
        r_wrist_flex_joint,
        r_wrist_roll_link,
    ])
    r_wrist_roll_joint = e.Joint(
        name="r_wrist_roll_joint",
        type="hinge",
        pos="0 0 0",
        limited="true",
        axis="1 0 0",
        damping="0.1",
        range="-1.5 1.5",
    )
    tips_arm = e.Body(
        name="tips_arm",
        pos="0 0 0",
    )
    geom_7 = e.Geom(
        conaffinity="1",
        contype="1",
        fromto="0 -0.1 0. 0.0 +0.1 0",
        size="0.02",
        type="capsule",
    )
    r_wrist_roll_link.add_children([
        r_wrist_roll_joint,
        tips_arm,
        geom_7,
    ])
    tip_arml = e.Geom(
        conaffinity="1",
        contype="1",
        name="tip_arml",
        pos="0.017 0 0",
        size="0.003 0.12 0.05",
        type="box",
    )
    tips_arm.add_children([
        tip_arml,
    ])

    model_xml = mujoco.xml()

    # Output
    with open('striker_gen.xml', 'w') as fh:
        fh.write(model_xml)
Beispiel #12
0
def main():

    mujoco = e.Mujoco(model="humanoid", )
    compiler = e.Compiler(
        angle="degree",
        inertiafromgeom="true",
    )
    default = e.Default()
    worldbody = e.Worldbody()
    mujoco.add_children([
        compiler,
        default,
        worldbody,
    ])
    joint = e.Joint(
        armature="1",
        damping="1",
        limited="true",
    )
    geom = e.Geom(
        conaffinity="1",
        condim="1",
        contype="1",
        margin="0.001",
        material="geom",
        rgba="0.8 0.6 .4 1",
    )
    motor = e.Motor(
        ctrllimited="true",
        ctrlrange="-.4 .4",
    )
    default.add_children([
        joint,
        geom,
        motor,
    ])
    light = e.Light(
        cutoff="100",
        diffuse="1 1 1",
        dir="-0 0 -1.3",
        directional="true",
        exponent="1",
        pos="0 0 1.3",
        specular=".1 .1 .1",
    )
    floor = e.Geom(
        condim="3",
        friction="1 .1 .1",
        material="MatPlane",
        name="floor",
        pos="0 0 0",
        rgba="0.8 0.9 0.8 1",
        size="20 20 0.125",
        type="plane",
    )
    worldbody.add_children([
        light,
        floor,
    ])

    model_xml = mujoco.xml()

    # Output
    with open('minimal_gen.xml', 'w') as fh:
        fh.write(model_xml)
Beispiel #13
0
def main():

    mujoco = e.Mujoco(model="humanoidstandup", )
    compiler = e.Compiler(
        angle="degree",
        inertiafromgeom="true",
    )
    default = e.Default()
    option = e.Option(
        integrator="RK4",
        iterations="50",
        solver="PGS",
        timestep="0.003",
    )
    size = e.Size(
        nkey="5",
        nuser_geom="1",
    )
    visual = e.Visual()
    asset = e.Asset()
    worldbody = e.Worldbody()
    tendon = e.Tendon()
    actuator = e.Actuator()
    mujoco.add_children([
        compiler,
        default,
        option,
        size,
        visual,
        asset,
        worldbody,
        tendon,
        actuator,
    ])
    joint = e.Joint(
        armature="1",
        damping="1",
        limited="true",
    )
    geom = e.Geom(
        conaffinity="1",
        condim="1",
        contype="1",
        margin="0.001",
        material="geom",
        rgba="0.8 0.6 .4 1",
    )
    motor = e.Motor(
        ctrllimited="true",
        ctrlrange="-.4 .4",
    )
    default.add_children([
        joint,
        geom,
        motor,
    ])
    map = e.Map(
        fogend="5",
        fogstart="3",
    )
    visual.add_children([
        map,
    ])
    texture = e.Texture(
        builtin="gradient",
        height="100",
        rgb1=".4 .5 .6",
        rgb2="0 0 0",
        type="skybox",
        width="100",
    )
    texgeom = e.Texture(
        builtin="flat",
        height="1278",
        mark="cross",
        markrgb="1 1 1",
        name="texgeom",
        random="0.01",
        rgb1="0.8 0.6 0.4",
        rgb2="0.8 0.6 0.4",
        type="cube",
        width="127",
    )
    texplane = e.Texture(
        builtin="checker",
        height="100",
        name="texplane",
        rgb1="0 0 0",
        rgb2="0.8 0.8 0.8",
        type="2d",
        width="100",
    )
    MatPlane = e.Material(
        name="MatPlane",
        reflectance="0.5",
        shininess="1",
        specular="1",
        texrepeat="60 60",
        texture="texplane",
    )
    geom_1 = e.Material(
        name="geom",
        texture="texgeom",
        texuniform="true",
    )
    asset.add_children([
        texture,
        texgeom,
        texplane,
        MatPlane,
        geom_1,
    ])
    light = e.Light(
        cutoff="100",
        diffuse="1 1 1",
        dir="-0 0 -1.3",
        directional="true",
        exponent="1",
        pos="0 0 1.3",
        specular=".1 .1 .1",
    )
    floor = e.Geom(
        condim="3",
        friction="1 .1 .1",
        material="MatPlane",
        name="floor",
        pos="0 0 0",
        rgba="0.8 0.9 0.8 1",
        size="20 20 0.125",
        type="plane",
    )
    torso = e.Body(
        name="torso",
        pos="0 0 .105",
    )
    worldbody.add_children([
        light,
        floor,
        torso,
    ])
    left_hipknee = e.Fixed(name="left_hipknee", )
    right_hipknee = e.Fixed(name="right_hipknee", )
    tendon.add_children([
        left_hipknee,
        right_hipknee,
    ])
    abdomen_y = e.Motor(
        gear="100",
        joint="abdomen_y",
        name="abdomen_y",
    )
    abdomen_z = e.Motor(
        gear="100",
        joint="abdomen_z",
        name="abdomen_z",
    )
    abdomen_x = e.Motor(
        gear="100",
        joint="abdomen_x",
        name="abdomen_x",
    )
    right_hip_x = e.Motor(
        gear="100",
        joint="right_hip_x",
        name="right_hip_x",
    )
    right_hip_z = e.Motor(
        gear="100",
        joint="right_hip_z",
        name="right_hip_z",
    )
    right_hip_y = e.Motor(
        gear="300",
        joint="right_hip_y",
        name="right_hip_y",
    )
    right_knee = e.Motor(
        gear="200",
        joint="right_knee",
        name="right_knee",
    )
    left_hip_x = e.Motor(
        gear="100",
        joint="left_hip_x",
        name="left_hip_x",
    )
    left_hip_z = e.Motor(
        gear="100",
        joint="left_hip_z",
        name="left_hip_z",
    )
    left_hip_y = e.Motor(
        gear="300",
        joint="left_hip_y",
        name="left_hip_y",
    )
    left_knee = e.Motor(
        gear="200",
        joint="left_knee",
        name="left_knee",
    )
    right_shoulder1 = e.Motor(
        gear="25",
        joint="right_shoulder1",
        name="right_shoulder1",
    )
    right_shoulder2 = e.Motor(
        gear="25",
        joint="right_shoulder2",
        name="right_shoulder2",
    )
    right_elbow = e.Motor(
        gear="25",
        joint="right_elbow",
        name="right_elbow",
    )
    left_shoulder1 = e.Motor(
        gear="25",
        joint="left_shoulder1",
        name="left_shoulder1",
    )
    left_shoulder2 = e.Motor(
        gear="25",
        joint="left_shoulder2",
        name="left_shoulder2",
    )
    left_elbow = e.Motor(
        gear="25",
        joint="left_elbow",
        name="left_elbow",
    )
    actuator.add_children([
        abdomen_y,
        abdomen_z,
        abdomen_x,
        right_hip_x,
        right_hip_z,
        right_hip_y,
        right_knee,
        left_hip_x,
        left_hip_z,
        left_hip_y,
        left_knee,
        right_shoulder1,
        right_shoulder2,
        right_elbow,
        left_shoulder1,
        left_shoulder2,
        left_elbow,
    ])
    track = e.Camera(
        name="track",
        mode="trackcom",
        pos="0 -3 .5",
        xyaxes="1 0 0 0 0 1",
    )
    root = e.Joint(
        armature="0",
        damping="0",
        limited="false",
        name="root",
        pos="0 0 0",
        stiffness="0",
        type="free",
    )
    torso1 = e.Geom(
        fromto="0 -.07 0 0 .07 0",
        name="torso1",
        size="0.07",
        type="capsule",
    )
    head = e.Geom(
        name="head",
        pos="-.15 0 0",
        size=".09",
        type="sphere",
        user="******",
    )
    uwaist = e.Geom(
        fromto=".11 -.06 0 .11 .06 0",
        name="uwaist",
        size="0.06",
        type="capsule",
    )
    lwaist = e.Body(
        name="lwaist",
        pos=".21 0 0",
        quat="1.000 0 -0.002 0",
    )
    right_upper_arm = e.Body(
        name="right_upper_arm",
        pos="0 -0.17 0.06",
    )
    left_upper_arm = e.Body(
        name="left_upper_arm",
        pos="0 0.17 0.06",
    )
    torso.add_children([
        track,
        root,
        torso1,
        head,
        uwaist,
        lwaist,
        right_upper_arm,
        left_upper_arm,
    ])
    joint_1 = e.Joint(
        coef="-1",
        joint="left_hip_y",
    )
    joint_2 = e.Joint(
        coef="1",
        joint="left_knee",
    )
    left_hipknee.add_children([
        joint_1,
        joint_2,
    ])
    joint_3 = e.Joint(
        coef="-1",
        joint="right_hip_y",
    )
    joint_4 = e.Joint(
        coef="1",
        joint="right_knee",
    )
    right_hipknee.add_children([
        joint_3,
        joint_4,
    ])
    lwaist_1 = e.Geom(
        fromto="0 -.06 0 0 .06 0",
        name="lwaist",
        size="0.06",
        type="capsule",
    )
    abdomen_z_1 = e.Joint(
        armature="0.02",
        axis="0 0 1",
        damping="5",
        name="abdomen_z",
        pos="0 0 0.065",
        range="-45 45",
        stiffness="20",
        type="hinge",
    )
    abdomen_y_1 = e.Joint(
        armature="0.02",
        axis="0 1 0",
        damping="5",
        name="abdomen_y",
        pos="0 0 0.065",
        range="-75 30",
        stiffness="10",
        type="hinge",
    )
    pelvis = e.Body(
        name="pelvis",
        pos="0.165 0 0",
        quat="1.000 0 -0.002 0",
    )
    lwaist.add_children([
        lwaist_1,
        abdomen_z_1,
        abdomen_y_1,
        pelvis,
    ])
    right_shoulder1_1 = e.Joint(
        armature="0.0068",
        axis="2 1 1",
        name="right_shoulder1",
        pos="0 0 0",
        range="-85 60",
        stiffness="1",
        type="hinge",
    )
    right_shoulder2_1 = e.Joint(
        armature="0.0051",
        axis="0 -1 1",
        name="right_shoulder2",
        pos="0 0 0",
        range="-85 60",
        stiffness="1",
        type="hinge",
    )
    right_uarm1 = e.Geom(
        fromto="0 0 0 .16 -.16 -.16",
        name="right_uarm1",
        size="0.04 0.16",
        type="capsule",
    )
    right_lower_arm = e.Body(
        name="right_lower_arm",
        pos=".18 -.18 -.18",
    )
    right_upper_arm.add_children([
        right_shoulder1_1,
        right_shoulder2_1,
        right_uarm1,
        right_lower_arm,
    ])
    left_shoulder1_1 = e.Joint(
        armature="0.0068",
        axis="2 -1 1",
        name="left_shoulder1",
        pos="0 0 0",
        range="-60 85",
        stiffness="1",
        type="hinge",
    )
    left_shoulder2_1 = e.Joint(
        armature="0.0051",
        axis="0 1 1",
        name="left_shoulder2",
        pos="0 0 0",
        range="-60 85",
        stiffness="1",
        type="hinge",
    )
    left_uarm1 = e.Geom(
        fromto="0 0 0 .16 .16 -.16",
        name="left_uarm1",
        size="0.04 0.16",
        type="capsule",
    )
    left_lower_arm = e.Body(
        name="left_lower_arm",
        pos=".18 .18 -.18",
    )
    left_upper_arm.add_children([
        left_shoulder1_1,
        left_shoulder2_1,
        left_uarm1,
        left_lower_arm,
    ])
    abdomen_x_1 = e.Joint(
        armature="0.02",
        axis="1 0 0",
        damping="5",
        name="abdomen_x",
        pos="0 0 0.1",
        range="-35 35",
        stiffness="10",
        type="hinge",
    )
    butt = e.Geom(
        fromto="-.02 -.07 0 -.02 .07 0",
        name="butt",
        size="0.09",
        type="capsule",
    )
    right_thigh = e.Body(
        name="right_thigh",
        pos="0 -0.1 0",
    )
    left_thigh = e.Body(
        name="left_thigh",
        pos="0 0.1 0",
    )
    pelvis.add_children([
        abdomen_x_1,
        butt,
        right_thigh,
        left_thigh,
    ])
    right_elbow_1 = e.Joint(
        armature="0.0028",
        axis="0 -1 1",
        name="right_elbow",
        pos="0 0 0",
        range="-90 50",
        stiffness="0",
        type="hinge",
    )
    right_larm = e.Geom(
        fromto="0.01 0.01 0.01 .17 .17 .17",
        name="right_larm",
        size="0.031",
        type="capsule",
    )
    right_hand = e.Geom(
        name="right_hand",
        pos=".18 .18 .18",
        size="0.04",
        type="sphere",
    )
    camera = e.Camera(pos="0 0 0", )
    right_lower_arm.add_children([
        right_elbow_1,
        right_larm,
        right_hand,
        camera,
    ])
    left_elbow_1 = e.Joint(
        armature="0.0028",
        axis="0 -1 -1",
        name="left_elbow",
        pos="0 0 0",
        range="-90 50",
        stiffness="0",
        type="hinge",
    )
    left_larm = e.Geom(
        fromto="0.01 -0.01 0.01 .17 -.17 .17",
        name="left_larm",
        size="0.031",
        type="capsule",
    )
    left_hand = e.Geom(
        name="left_hand",
        pos=".18 -.18 .18",
        size="0.04",
        type="sphere",
    )
    left_lower_arm.add_children([
        left_elbow_1,
        left_larm,
        left_hand,
    ])
    right_hip_x_1 = e.Joint(
        armature="0.01",
        axis="1 0 0",
        damping="5",
        name="right_hip_x",
        pos="0 0 0",
        range="-25 5",
        stiffness="10",
        type="hinge",
    )
    right_hip_z_1 = e.Joint(
        armature="0.01",
        axis="0 0 1",
        damping="5",
        name="right_hip_z",
        pos="0 0 0",
        range="-60 35",
        stiffness="10",
        type="hinge",
    )
    right_hip_y_1 = e.Joint(
        armature="0.0080",
        axis="0 1 0",
        damping="5",
        name="right_hip_y",
        pos="0 0 0",
        range="-110 20",
        stiffness="20",
        type="hinge",
    )
    right_thigh1 = e.Geom(
        fromto="0 0 0 0.34 0.01 0",
        name="right_thigh1",
        size="0.06",
        type="capsule",
    )
    right_shin = e.Body(
        name="right_shin",
        pos="0.403 0.01 0",
    )
    right_thigh.add_children([
        right_hip_x_1,
        right_hip_z_1,
        right_hip_y_1,
        right_thigh1,
        right_shin,
    ])
    left_hip_x_1 = e.Joint(
        armature="0.01",
        axis="-1 0 0",
        damping="5",
        name="left_hip_x",
        pos="0 0 0",
        range="-25 5",
        stiffness="10",
        type="hinge",
    )
    left_hip_z_1 = e.Joint(
        armature="0.01",
        axis="0 0 -1",
        damping="5",
        name="left_hip_z",
        pos="0 0 0",
        range="-60 35",
        stiffness="10",
        type="hinge",
    )
    left_hip_y_1 = e.Joint(
        armature="0.01",
        axis="0 1 0",
        damping="5",
        name="left_hip_y",
        pos="0 0 0",
        range="-120 20",
        stiffness="20",
        type="hinge",
    )
    left_thigh1 = e.Geom(
        fromto="0 0 0 0.34 -0.01 0",
        name="left_thigh1",
        size="0.06",
        type="capsule",
    )
    left_shin = e.Body(
        name="left_shin",
        pos="0.403 -0.01 0",
    )
    left_thigh.add_children([
        left_hip_x_1,
        left_hip_z_1,
        left_hip_y_1,
        left_thigh1,
        left_shin,
    ])
    right_knee_1 = e.Joint(
        armature="0.0060",
        axis="0 -1 0",
        name="right_knee",
        pos="0 0 .02",
        range="-160 -2",
        type="hinge",
    )
    right_shin1 = e.Geom(
        fromto="0 0 0 0.3 0 0",
        name="right_shin1",
        size="0.049",
        type="capsule",
    )
    right_foot = e.Body(
        name="right_foot",
        pos="0.35 0 -.10",
    )
    right_shin.add_children([
        right_knee_1,
        right_shin1,
        right_foot,
    ])
    left_knee_1 = e.Joint(
        armature="0.0060",
        axis="0 -1 0",
        name="left_knee",
        pos="0 0 .02",
        range="-160 -2",
        stiffness="1",
        type="hinge",
    )
    left_shin1 = e.Geom(
        fromto="0 0 0 0.3 0 0",
        name="left_shin1",
        size="0.049",
        type="capsule",
    )
    left_foot = e.Body(
        name="left_foot",
        pos="0.35 0 -.1",
    )
    left_shin.add_children([
        left_knee_1,
        left_shin1,
        left_foot,
    ])
    right_foot_1 = e.Geom(
        name="right_foot",
        pos="0 0 0.1",
        size="0.075",
        type="sphere",
        user="******",
    )
    right_foot.add_children([
        right_foot_1,
    ])
    left_foot_1 = e.Geom(
        name="left_foot",
        type="sphere",
        size="0.075",
        pos="0 0 0.1",
        user="******",
    )
    left_foot.add_children([
        left_foot_1,
    ])

    model_xml = mujoco.xml()

    # Output
    with open('humanoidstandup_gen.xml', 'w') as fh:
        fh.write(model_xml)
Beispiel #14
0
def main():

    mujoco = e.Mujoco(model="cheetah", )
    compiler = e.Compiler(
        angle="radian",
        coordinate="local",
        inertiafromgeom="true",
        settotalmass="14",
    )
    default = e.Default()
    size = e.Size(
        nstack="300000",
        nuser_geom="1",
    )
    option = e.Option(
        gravity="0 0 -9.81",
        timestep="0.01",
    )
    asset = e.Asset()
    worldbody = e.Worldbody()
    actuator = e.Actuator()
    mujoco.add_children([
        compiler,
        default,
        size,
        option,
        asset,
        worldbody,
        actuator,
    ])
    joint = e.Joint(
        armature=".1",
        damping=".01",
        limited="true",
        solimplimit="0 .8 .03",
        solreflimit=".02 1",
        stiffness="8",
    )
    geom = e.Geom(
        conaffinity="0",
        condim="3",
        contype="1",
        friction=".4 .1 .1",
        rgba="0.8 0.6 .4 1",
        solimp="0.0 0.8 0.01",
        solref="0.02 1",
    )
    motor = e.Motor(
        ctrllimited="true",
        ctrlrange="-1 1",
    )
    default.add_children([
        joint,
        geom,
        motor,
    ])
    texture = e.Texture(
        builtin="gradient",
        height="100",
        rgb1="1 1 1",
        rgb2="0 0 0",
        type="skybox",
        width="100",
    )
    texgeom = e.Texture(
        builtin="flat",
        height="1278",
        mark="cross",
        markrgb="1 1 1",
        name="texgeom",
        random="0.01",
        rgb1="0.8 0.6 0.4",
        rgb2="0.8 0.6 0.4",
        type="cube",
        width="127",
    )
    texplane = e.Texture(
        builtin="checker",
        height="100",
        name="texplane",
        rgb1="0 0 0",
        rgb2="0.8 0.8 0.8",
        type="2d",
        width="100",
    )
    MatPlane = e.Material(
        name="MatPlane",
        reflectance="0.5",
        shininess="1",
        specular="1",
        texrepeat="60 60",
        texture="texplane",
    )
    geom_1 = e.Material(
        name="geom",
        texture="texgeom",
        texuniform="true",
    )
    asset.add_children([
        texture,
        texgeom,
        texplane,
        MatPlane,
        geom_1,
    ])
    light = e.Light(
        cutoff="100",
        diffuse="1 1 1",
        dir="-0 0 -1.3",
        directional="true",
        exponent="1",
        pos="0 0 1.3",
        specular=".1 .1 .1",
    )
    floor = e.Geom(
        conaffinity="1",
        condim="3",
        material="MatPlane",
        name="floor",
        pos="0 0 0",
        rgba="0.8 0.9 0.8 1",
        size="40 40 40",
        type="plane",
    )
    torso = e.Body(
        name="torso",
        pos="0 0 .7",
    )
    worldbody.add_children([
        light,
        floor,
        torso,
    ])
    bthigh = e.Motor(
        gear="120",
        joint="bthigh",
        name="bthigh",
    )
    bshin = e.Motor(
        gear="90",
        joint="bshin",
        name="bshin",
    )
    bfoot = e.Motor(
        gear="60",
        joint="bfoot",
        name="bfoot",
    )
    fthigh = e.Motor(
        gear="120",
        joint="fthigh",
        name="fthigh",
    )
    fshin = e.Motor(
        gear="60",
        joint="fshin",
        name="fshin",
    )
    ffoot = e.Motor(
        gear="30",
        joint="ffoot",
        name="ffoot",
    )
    actuator.add_children([
        bthigh,
        bshin,
        bfoot,
        fthigh,
        fshin,
        ffoot,
    ])
    track = e.Camera(
        name="track",
        mode="trackcom",
        pos="0 -3 0.3",
        xyaxes="1 0 0 0 0 1",
    )
    rootx = e.Joint(
        armature="0",
        axis="1 0 0",
        damping="0",
        limited="false",
        name="rootx",
        pos="0 0 0",
        stiffness="0",
        type="slide",
    )
    rootz = e.Joint(
        armature="0",
        axis="0 0 1",
        damping="0",
        limited="false",
        name="rootz",
        pos="0 0 0",
        stiffness="0",
        type="slide",
    )
    rooty = e.Joint(
        armature="0",
        axis="0 1 0",
        damping="0",
        limited="false",
        name="rooty",
        pos="0 0 0",
        stiffness="0",
        type="hinge",
    )
    torso_1 = e.Geom(
        fromto="-.5 0 0 .5 0 0",
        name="torso",
        size="0.046",
        type="capsule",
    )
    head = e.Geom(
        axisangle="0 1 0 .87",
        name="head",
        pos=".6 0 .1",
        size="0.046 .15",
        type="capsule",
    )
    bthigh_1 = e.Body(
        name="bthigh",
        pos="-.5 0 0",
    )
    fthigh_1 = e.Body(
        name="fthigh",
        pos=".5 0 0",
    )
    torso.add_children([
        track,
        rootx,
        rootz,
        rooty,
        torso_1,
        head,
        bthigh_1,
        fthigh_1,
    ])
    bthigh_2 = e.Joint(
        axis="0 1 0",
        damping="6",
        name="bthigh",
        pos="0 0 0",
        range="-.52 1.05",
        stiffness="240",
        type="hinge",
    )
    bthigh_3 = e.Geom(
        axisangle="0 1 0 -3.8",
        name="bthigh",
        pos=".1 0 -.13",
        size="0.046 .145",
        type="capsule",
    )
    bshin_1 = e.Body(
        name="bshin",
        pos=".16 0 -.25",
    )
    bthigh_1.add_children([
        bthigh_2,
        bthigh_3,
        bshin_1,
    ])
    fthigh_2 = e.Joint(
        axis="0 1 0",
        damping="4.5",
        name="fthigh",
        pos="0 0 0",
        range="-1 .7",
        stiffness="180",
        type="hinge",
    )
    fthigh_3 = e.Geom(
        axisangle="0 1 0 .52",
        name="fthigh",
        pos="-.07 0 -.12",
        size="0.046 .133",
        type="capsule",
    )
    fshin_1 = e.Body(
        name="fshin",
        pos="-.14 0 -.24",
    )
    fthigh_1.add_children([
        fthigh_2,
        fthigh_3,
        fshin_1,
    ])
    bshin_2 = e.Joint(
        axis="0 1 0",
        damping="4.5",
        name="bshin",
        pos="0 0 0",
        range="-.785 .785",
        stiffness="180",
        type="hinge",
    )
    bshin_3 = e.Geom(
        axisangle="0 1 0 -2.03",
        name="bshin",
        pos="-.14 0 -.07",
        rgba="0.9 0.6 0.6 1",
        size="0.046 .15",
        type="capsule",
    )
    bfoot_1 = e.Body(
        name="bfoot",
        pos="-.28 0 -.14",
    )
    bshin_1.add_children([
        bshin_2,
        bshin_3,
        bfoot_1,
    ])
    fshin_2 = e.Joint(
        axis="0 1 0",
        damping="3",
        name="fshin",
        pos="0 0 0",
        range="-1.2 .87",
        stiffness="120",
        type="hinge",
    )
    fshin_3 = e.Geom(
        axisangle="0 1 0 -.6",
        name="fshin",
        pos=".065 0 -.09",
        rgba="0.9 0.6 0.6 1",
        size="0.046 .106",
        type="capsule",
    )
    ffoot_1 = e.Body(
        name="ffoot",
        pos=".13 0 -.18",
    )
    fshin_1.add_children([
        fshin_2,
        fshin_3,
        ffoot_1,
    ])
    bfoot_2 = e.Joint(
        axis="0 1 0",
        damping="3",
        name="bfoot",
        pos="0 0 0",
        range="-.4 .785",
        stiffness="120",
        type="hinge",
    )
    bfoot_3 = e.Geom(
        axisangle="0 1 0 -.27",
        name="bfoot",
        pos=".03 0 -.097",
        rgba="0.9 0.6 0.6 1",
        size="0.046 .094",
        type="capsule",
    )
    bfoot_1.add_children([
        bfoot_2,
        bfoot_3,
    ])
    ffoot_2 = e.Joint(
        axis="0 1 0",
        damping="1.5",
        name="ffoot",
        pos="0 0 0",
        range="-.5 .5",
        stiffness="60",
        type="hinge",
    )
    ffoot_3 = e.Geom(
        axisangle="0 1 0 -.6",
        name="ffoot",
        pos=".045 0 -.07",
        rgba="0.9 0.6 0.6 1",
        size="0.046 .07",
        type="capsule",
    )
    ffoot_1.add_children([
        ffoot_2,
        ffoot_3,
    ])

    model_xml = mujoco.xml()

    # Output
    with open('half_cheetah_gen.xml', 'w') as fh:
        fh.write(model_xml)
def main():

    mujoco = e.Mujoco(model="reacher", )
    compiler = e.Compiler(
        angle="degree",
        inertiafromgeom=True,
    )
    default = e.Default()
    option = e.Option(
        gravity="0 0 -9.81",
        integrator="RK4",
        timestep="0.01",
    )
    worldbody = e.Worldbody()
    tendon = e.Tendon()
    actuator = e.Actuator()
    asset = e.Asset()
    mujoco.add_children(
        [compiler, default, option, worldbody, tendon, actuator, asset])

    # Standard assets
    utils.populated_ma_asset(asset)

    # Standard floor and lighting
    utils.populate_ma_worldbody(worldbody)

    default_joint = e.Joint(
        armature=1,
        damping=1,
        limited=True,
    )

    default_geom = e.Geom(
        contype="0",
        friction="1 0.1 0.1",
        rgba="0.7 0.7 0 1",
    )
    default.add_children([
        default_joint,
        default_geom,
    ])

    sideS, sideE, sideN, sideW = get_sides()

    shoulder_body = e.Body(name="shoulder_body", pos=[0, 0, 0])

    target_body = e.Body(
        name="target_body",
        pos=[0, 0, .1],
    )

    worldbody.add_children([
        sideS,
        sideE,
        sideN,
        sideW,
        shoulder_body,
        target_body,
    ])

    # ARM

    # Shoulder (central pole)
    pole_radius = 0.18
    pole_height = 0.2
    shoulder_geom = e.Geom(
        conaffinity="0",
        contype="0",
        fromto=[0, 0, 0, 0, 0, pole_height],
        name="shoulder_geom",
        rgba="0.9 0.4 0.6 1",
        size=pole_radius,
        type="cylinder",
    )

    upper_arm_radius = 0.05
    side_site_radius = 0.005
    pole_site_offset = pole_radius * 1.2
    left_flex_shoulder_insertion = e.Site(
        name="left_flex_shoulder_insertion",
        pos=[-pole_radius, pole_site_offset, pole_height / 2],
        size=upper_arm_radius / 2)
    right_flex_shoulder_insertion = e.Site(
        name="right_flex_shoulder_insertion",
        pos=[-pole_radius, -pole_site_offset, pole_height / 2],
        size=upper_arm_radius / 2)

    left_flex_shoulder_side = e.Site(
        name="left_flex_shoulder_side",
        pos=[0.0, pole_site_offset, pole_height / 2],
        size=side_site_radius)
    right_flex_shoulder_side = e.Site(
        name="right_flex_shoulder_side",
        pos=[0.0, -pole_site_offset, pole_height / 2],
        size=side_site_radius)

    upper_arm_body = e.Body(
        name="upper_arm_body",
        pos="0 0 .1",
    )

    shoulder_body.add_children([
        shoulder_geom, left_flex_shoulder_insertion, left_flex_shoulder_side,
        right_flex_shoulder_insertion, right_flex_shoulder_side, upper_arm_body
    ])

    upper_arm_len = 1.0
    upper_arm_geom = e.Geom(
        fromto=[0, 0, 0, upper_arm_len, 0, 0],
        name="upper_arm_geom",
        rgba="0.0 0.2 0.4 1",
        size=upper_arm_radius,
        type="capsule",
    )

    shoulder_joint = e.Joint(
        axis=[0, 0, 1],
        limited=True,
        range=[-100, 100],
        name="shoulder_joint",
        pos=[0, 0, 0],
        type="hinge",
    )

    left_flex_ua_insertion = e.Site(
        name="left_flex_ua_insertion",
        pos=[upper_arm_len / 4, upper_arm_radius, 0.0],
        size=upper_arm_radius / 2)
    right_flex_ua_insertion = e.Site(
        name="right_flex_ua_insertion",
        pos=[upper_arm_len / 4, -upper_arm_radius, 0.0],
        size=upper_arm_radius / 2)

    left_curl_ua_insertion = e.Site(
        name="left_curl_ua_insertion",
        pos=[upper_arm_len / 2, upper_arm_radius, 0.0],
        size=upper_arm_radius / 2)
    right_curl_ua_insertion = e.Site(
        name="right_curl_ua_insertion",
        pos=[upper_arm_len / 2, -upper_arm_radius, 0.0],
        size=upper_arm_radius / 2)

    elbow_body = e.Body(name="elbow_body", pos=[upper_arm_len, 0, 0])

    lower_arm_radius = 0.05
    lower_arm = e.Body(
        name="lower_arm",
        pos="1 0 0",
    )

    upper_arm_body.add_children([
        upper_arm_geom,
        shoulder_joint,
        left_flex_ua_insertion,
        right_flex_ua_insertion,
        left_curl_ua_insertion,
        right_curl_ua_insertion,
        elbow_body,
        lower_arm,
    ])

    joint_geom_radius = upper_arm_radius * 1.1
    joint_geom_color = [0.3, 0.9, 0.3, 0.4]  # Translucent green
    elbow_geom = e.Geom(
        conaffinity="0",
        contype="0",
        fromto=[0, 0, -upper_arm_radius, 0, 0, upper_arm_radius],
        name="elbow_geom",
        rgba=joint_geom_color,
        size=joint_geom_radius,
        type="cylinder",
    )

    elbow_left_side = e.Site(name="elbow_left_side",
                             pos=[0, joint_geom_radius * 1.1, 0.0],
                             size=side_site_radius)
    elbow_right_side = e.Site(name="elbow_right_side",
                              pos=[0, -joint_geom_radius * 1.1, 0.0],
                              size=side_site_radius)

    elbow_body.add_children([
        elbow_geom,
        elbow_left_side,
        elbow_right_side,
    ])

    elbow_joint = e.Joint(
        axis="0 0 1",
        limited="true",
        name="elbow_joint",
        pos="0 0 0",
        range=[-172, 172],
        type="hinge",
    )

    lower_arm_len = 1.0
    lower_arm_geom = e.Geom(
        fromto=[0, 0, 0, lower_arm_len, 0, 0],
        name="lower_arm_geom",
        rgba="0.0 0.4 0.6 1",
        size=lower_arm_radius,
        type="capsule",
    )

    left_curl_la_insertion = e.Site(
        name="left_curl_la_insertion",
        pos=[lower_arm_len / 4, lower_arm_radius, 0.0],
        size=lower_arm_radius / 2)
    right_curl_la_insertion = e.Site(
        name="right_curl_la_insertion",
        pos=[lower_arm_len / 4, -lower_arm_radius, 0.0],
        size=lower_arm_radius / 2)

    fingertip_body = e.Body(
        name="fingertip_body",
        pos="1.1 0 0",
    )

    lower_arm.add_children([
        elbow_joint,
        lower_arm_geom,
        left_curl_la_insertion,
        right_curl_la_insertion,
        fingertip_body,
    ])

    fingertip_geom = e.Geom(
        contype="0",
        name="fingertip_geom",
        pos="0 0 0",
        rgba="0.0 0.8 0.6 1",
        size=".1",
        type="sphere",
    )

    fingertip_body.add_children([
        fingertip_geom,
    ])

    # Tendons
    tendon_width = 0.02
    tendon_color = [0.95, 0.3, 0.3, 1]
    tendon_stiffness = 100

    left_flex_tendon = e.Spatial(name="left_flex_tendon",
                                 width=tendon_width,
                                 rgba=tendon_color,
                                 stiffness=tendon_stiffness)
    lfs1 = e.spatial.Site(site=left_flex_shoulder_insertion.name)
    lf_geom = e.spatial.Geom(geom=shoulder_geom.name,
                             sidesite=left_flex_shoulder_side.name)
    lfs2 = e.spatial.Site(site=left_flex_ua_insertion.name)
    left_flex_tendon.add_children([lfs1, lf_geom, lfs2])

    right_flex_tendon = e.Spatial(name="right_flex_tendon",
                                  width=tendon_width,
                                  rgba=tendon_color,
                                  stiffness=tendon_stiffness)
    rfs1 = e.spatial.Site(site=right_flex_shoulder_insertion.name)
    rf_geom = e.spatial.Geom(geom=shoulder_geom.name,
                             sidesite=right_flex_shoulder_side.name)
    rfs2 = e.spatial.Site(site=right_flex_ua_insertion.name)
    right_flex_tendon.add_children([rfs1, rf_geom, rfs2])

    left_curl_tendon = e.Spatial(name="left_curl_tendon",
                                 width=tendon_width,
                                 rgba=tendon_color,
                                 stiffness=tendon_stiffness)
    lcs1 = e.spatial.Site(site=left_curl_ua_insertion.name)
    lc_geom = e.spatial.Geom(geom=elbow_geom.name,
                             sidesite=elbow_left_side.name)
    lcs2 = e.spatial.Site(site=left_curl_la_insertion.name)
    left_curl_tendon.add_children([lcs1, lc_geom, lcs2])

    right_curl_tendon = e.Spatial(name="right_curl_tendon",
                                  width=tendon_width,
                                  rgba=tendon_color,
                                  stiffness=tendon_stiffness)
    rcs1 = e.spatial.Site(site=right_curl_ua_insertion.name)
    rc_geom = e.spatial.Geom(geom=elbow_geom.name,
                             sidesite=elbow_right_side.name)
    rcs2 = e.spatial.Site(site=right_curl_la_insertion.name)
    right_curl_tendon.add_children([rcs1, rc_geom, rcs2])

    tendon.add_children([
        left_flex_tendon,
        right_flex_tendon,
        left_curl_tendon,
        right_curl_tendon,
    ])

    # Target Puck / Ball

    # How is the ball/puck allowed to move?
    target_joint_x = e.Joint(
        armature="0",
        axis="1 0 0",
        damping="0",
        limited=False,
        name="target_joint_x",
        pos="0 0 0",
        stiffness="0",
        type="slide",
    )
    target_joint_y = e.Joint(
        armature="0",
        axis="0 1 0",
        damping="0",
        limited=False,
        name="target_joint_y",
        pos="0 0 0",
        stiffness="0",
        type="slide",
    )
    target_geom = e.Geom(
        conaffinity="0",
        contype="0",
        name="target_geom",
        pos="0 0 0",
        rgba="0.9 0.2 0.2 1",
        size=".09",
        type="sphere",
    )
    target_body.add_children([
        target_joint_x,
        target_joint_y,
        target_geom,
    ])

    # Actuators
    # TODO: Replace with Muscles once 2.0 is released
    act_gain = 100  # Max 100N output
    act_ctrl_range = [-1.0, 0.0]
    ctrllimited = "true"

    left_flex_act = e.General(name="left_flex_act",
                              tendon=left_flex_tendon.name,
                              ctrllimited=ctrllimited,
                              gainprm=act_gain,
                              ctrlrange=act_ctrl_range)
    right_flex_act = e.General(name="right_flex_act",
                               tendon=right_flex_tendon.name,
                               ctrllimited=ctrllimited,
                               gainprm=act_gain,
                               ctrlrange=act_ctrl_range)

    left_curl_act = e.General(name="left_curl_act",
                              tendon=left_curl_tendon.name,
                              ctrllimited=ctrllimited,
                              gainprm=act_gain,
                              ctrlrange=act_ctrl_range)
    right_curl_act = e.General(name="right_curl_act",
                               tendon=right_curl_tendon.name,
                               ctrllimited=ctrllimited,
                               gainprm=act_gain,
                               ctrlrange=act_ctrl_range)

    actuator.add_children([
        left_flex_act,
        right_flex_act,
        left_curl_act,
        right_curl_act,
    ])

    model_xml = mujoco.xml()

    # Output
    filename = "muscled-reacher.xml"
    utils.save_model(model_xml, filename)
Beispiel #16
0
def get_ant(name="ant1", location=[0, 0, 0.75]):

    if name != "":
        name = "_{}".format(name)

    torso = e.Body(
        name="torso"+name,
        pos=location,
    )

    # Torso
    camera = e.Camera(
        name="track"+name,
        mode="track",
        pos=[0, -6, 0.6],
        xyaxes=[1, 0, 0, 0, 0, 1]
    )
    torso_geom = e.Geom(
        name="torso_geom"+name,
        pos=[0, 0, 0],
        size=0.25,
        type="sphere",
        rgba=None
    )
    joint = e.Joint(
        armature=0,
        damping=0,
        limited=False,
        margin=0.01,
        name="root"+name,
        pos=[0, 0, 0],
        type="free"
    )
    front_right_leg, fr_tendons, fr_actuators = get_leg(
        "front_right_leg"+name,
        hip_angle=-45
    )
    front_left_leg, fl_tendons, fl_actuators = get_leg(
        "front_left_leg"+name,
        hip_angle=45,
    )
    back_right_leg, br_tendons, br_actuators = get_leg(
        "back_right_leg"+name,
        hip_angle=-135,
    )
    back_left_leg, bl_tendons, bl_actuators = get_leg(
        "back_left_leg"+name,
        hip_angle=135,
    )

    torso.add_children([
        camera,
        torso_geom,
        joint,
        front_right_leg,
        front_left_leg,
        back_right_leg,
        back_left_leg,
    ])

    # chain() is used for easy commenting out
    tendons = list(chain(
        fr_tendons,
        fl_tendons,
        br_tendons,
        bl_tendons,
    ))
    actuators = list(chain(
        fr_actuators,
        fl_actuators,
        br_actuators,
        bl_actuators,
    ))

    return torso, tendons, actuators
Beispiel #17
0
def main():
    mujoco = e.Mujoco(
        model="ant"
    )

    compiler = e.Compiler(
        angle="degree",
        coordinate="local",
        inertiafromgeom=True
    )
    option = e.Option(
        integrator="RK4",
        timestep=0.01
    )
    size = e.Size(
        njmax=1000,
        nconmax=500,
    )
    custom = e.Custom()
    default = e.Default()
    asset = e.Asset()
    worldbody = e.Worldbody()
    tendon = e.Tendon()
    actuator = e.Actuator()

    mujoco.add_children([
        compiler,
        option,
        size,
        custom,
        default,
        asset,
        worldbody,
        tendon,
        actuator
    ])

    # Custom
    numeric = e.Numeric(
        name="init_qpos",
        data="0.0 0.0 0.55 1.0 0.0 0.0 0.0 0.0 1.0 0.0 -1.0 0.0 -1.0 0.0 1.0",
    )
    custom.add_child(numeric)

    # Default
    d_joint = e.Joint(
        armature=1,
        damping=1,
        limited=True
    )
    d_geom = e.Geom(
        conaffinity=0,
        condim=3,
        density=5.0,
        friction=[1, 0.5, 0.5],
        margin=0.01,
        rgba=[0.8, 0.6, 0.4, 1]
    )
    default.add_children([d_joint, d_geom])

    # Standard assets
    utils.populated_ma_asset(asset)

    # Standard floor and lighting
    utils.populate_ma_worldbody(worldbody)

    # Add axes. Useful for debugging
    # utils.add_axes(worldbody)

    ant_bodies = []
    ant_tendons = []
    ant_actuators = []
    body, tendons, actuators = get_ant(name="")
    ant_bodies.append(body)
    ant_tendons.extend(tendons)
    ant_actuators.extend(actuators)

    worldbody.add_children(ant_bodies)

    # Tendon
    tendon.add_children(ant_tendons)

    # Actuator
    actuator.add_children(ant_actuators)

    model_xml = mujoco.xml()
    filename = "muscled-ant.xml"
    utils.save_model(model_xml, filename)
Beispiel #18
0
def main():

    mujoco = e.Mujoco(model="arm3d", )
    compiler = e.Compiler(
        inertiafromgeom="true",
        angle="radian",
        coordinate="local",
    )
    option = e.Option(
        timestep="0.01",
        gravity="0 0 -9.81",
        iterations="20",
        integrator="Euler",
    )
    default = e.Default()
    worldbody = e.Worldbody()
    actuator = e.Actuator()
    mujoco.add_children([
        compiler,
        option,
        default,
        worldbody,
        actuator,
    ])
    joint = e.Joint(
        armature="0.75",
        damping="1",
        limited="true",
    )
    geom = e.Geom(
        friction=".8 .1 .1",
        density="300",
        margin="0.002",
        condim="1",
        contype="0",
        conaffinity="0",
    )
    default.add_children([
        joint,
        geom,
    ])
    light = e.Light(
        diffuse=".5 .5 .5",
        pos="0 0 3",
        dir="0 0 -1",
    )
    geom_1 = e.Geom(
        type="plane",
        pos="0 0.5 -0.325",
        size="1 1 0.1",
        contype="1",
        conaffinity="1",
    )
    r_shoulder_pan_link = e.Body(
        name="r_shoulder_pan_link",
        pos="0 -0.6 0",
    )
    goal = e.Body(
        name="goal",
        pos="0.575 0.5 -0.328",
    )
    ball = e.Body(
        name="ball",
        pos="0.5 -0.8 0.275",
    )
    worldbody.add_children([
        light,
        geom_1,
        r_shoulder_pan_link,
        goal,
        ball,
    ])
    motor = e.Motor(
        joint="r_shoulder_pan_joint",
        ctrlrange="-10.0 10.0",
        ctrllimited="true",
    )
    motor_1 = e.Motor(
        joint="r_shoulder_lift_joint",
        ctrlrange="-10.0 10.0",
        ctrllimited="true",
    )
    motor_2 = e.Motor(
        joint="r_upper_arm_roll_joint",
        ctrlrange="-10.0 10.0",
        ctrllimited="true",
    )
    motor_3 = e.Motor(
        joint="r_elbow_flex_joint",
        ctrlrange="-10.0 10.0",
        ctrllimited="true",
    )
    motor_4 = e.Motor(
        joint="r_forearm_roll_joint",
        ctrlrange="-15.0 15.0",
        ctrllimited="true",
    )
    motor_5 = e.Motor(
        joint="r_wrist_flex_joint",
        ctrlrange="-15.0 15.0",
        ctrllimited="true",
    )
    motor_6 = e.Motor(
        joint="r_wrist_roll_joint",
        ctrlrange="-15.0 15.0",
        ctrllimited="true",
    )
    actuator.add_children([
        motor,
        motor_1,
        motor_2,
        motor_3,
        motor_4,
        motor_5,
        motor_6,
    ])
    e1 = e.Geom(
        name="e1",
        type="sphere",
        rgba="0.6 0.6 0.6 1",
        pos="-0.06 0.05 0.2",
        size="0.05",
        density="0.0001",
    )
    e2 = e.Geom(
        name="e2",
        type="sphere",
        rgba="0.6 0.6 0.6 1",
        pos=" 0.06 0.05 0.2",
        size="0.05",
        density="0.0001",
    )
    e1p = e.Geom(
        name="e1p",
        type="sphere",
        rgba="0.1 0.1 0.1 1",
        pos="-0.06 0.09 0.2",
        size="0.03",
        density="0.0001",
    )
    e2p = e.Geom(
        name="e2p",
        type="sphere",
        rgba="0.1 0.1 0.1 1",
        pos=" 0.06 0.09 0.2",
        size="0.03",
        density="0.0001",
    )
    sp = e.Geom(
        name="sp",
        type="capsule",
        fromto="0 0 -0.4 0 0 0.2",
        size="0.1",
        density="1",
    )
    r_shoulder_pan_joint = e.Joint(
        name="r_shoulder_pan_joint",
        type="hinge",
        pos="0 0 0",
        axis="0 0 1",
        range="-0.4854 1.214602",
        damping="1.0",
    )
    r_shoulder_lift_link = e.Body(
        name="r_shoulder_lift_link",
        pos="0.1 0 0",
    )
    r_shoulder_pan_link.add_children([
        e1,
        e2,
        e1p,
        e2p,
        sp,
        r_shoulder_pan_joint,
        r_shoulder_lift_link,
    ])
    geom_2 = e.Geom(
        rgba="1 1 1 1",
        type="box",
        pos="0 0 0.005",
        size="0.075 0.075 0.001",
        contype="1",
        conaffinity="1",
        density="1000",
    )
    geom_3 = e.Geom(
        rgba="1 1 1 1",
        type="box",
        pos="0.0 0.075 0.034",
        size="0.075 0.001 0.03",
        contype="1",
        conaffinity="0",
    )
    geom_4 = e.Geom(
        rgba="1 1 1 1",
        type="box",
        pos="0.0 -0.075 0.034",
        size="0.075 0.001 0.03",
        contype="1",
        conaffinity="0",
    )
    geom_5 = e.Geom(
        rgba="1 1 1 1",
        type="box",
        pos="0.075 0 0.034",
        size="0.001 0.075 0.03",
        contype="1",
        conaffinity="0",
    )
    geom_6 = e.Geom(
        rgba="1 1 1 1",
        type="box",
        pos="-0.076 0 0.034",
        size="0.001 0.075 0.03",
        contype="1",
        conaffinity="0",
    )
    geom_7 = e.Geom(
        rgba="1 1 1 1",
        type="capsule",
        fromto="0.073 0.073 0.0075 0.073 0.073 0.06",
        size="0.005",
        contype="1",
        conaffinity="0",
    )
    geom_8 = e.Geom(
        rgba="1 1 1 1",
        type="capsule",
        fromto="0.073 -0.073 0.0075 0.073 -0.073 0.06",
        size="0.005",
        contype="1",
        conaffinity="0",
    )
    geom_9 = e.Geom(
        rgba="1 1 1 1",
        type="capsule",
        fromto="-0.073 0.073 0.0075 -0.073 0.073 0.06",
        size="0.005",
        contype="1",
        conaffinity="0",
    )
    geom_10 = e.Geom(
        rgba="1 1 1 1",
        type="capsule",
        fromto="-0.073 -0.073 0.0075 -0.073 -0.073 0.06",
        size="0.005",
        contype="1",
        conaffinity="0",
    )
    goal_slidey = e.Joint(
        name="goal_slidey",
        type="slide",
        pos="0 0 0",
        axis="0 1 0",
        range="-10.3213 10.3",
        damping="1.0",
    )
    goal_slidex = e.Joint(
        name="goal_slidex",
        type="slide",
        pos="0 0 0",
        axis="1 0 0",
        range="-10.3213 10.3",
        damping="1.0",
    )
    goal.add_children([
        geom_2,
        geom_3,
        geom_4,
        geom_5,
        geom_6,
        geom_7,
        geom_8,
        geom_9,
        geom_10,
        goal_slidey,
        goal_slidex,
    ])
    geom_11 = e.Geom(
        rgba="1. 1. 1. 1",
        type="sphere",
        size="0.03 0.03 0.1",
        density="25",
        contype="1",
        conaffinity="1",
    )
    ball_free = e.Joint(
        name="ball_free",
        type="free",
        armature="0",
        damping="0",
        limited="false",
    )
    ball.add_children([
        geom_11,
        ball_free,
    ])
    sl = e.Geom(
        name="sl",
        type="capsule",
        fromto="0 -0.1 0 0 0.1 0",
        size="0.1",
        density="0.0001",
    )
    r_shoulder_lift_joint = e.Joint(
        name="r_shoulder_lift_joint",
        type="hinge",
        pos="0 0 0",
        axis="0 1 0",
        range="-0.5236 0.7963",
        damping="1.0",
    )
    r_upper_arm_roll_link = e.Body(
        name="r_upper_arm_roll_link",
        pos="0 0 0",
    )
    r_shoulder_lift_link.add_children([
        sl,
        r_shoulder_lift_joint,
        r_upper_arm_roll_link,
    ])
    uar = e.Geom(
        name="uar",
        type="capsule",
        fromto="-0.1 0 0 0.1 0 0",
        size="0.02",
        density="0.0001",
    )
    r_upper_arm_roll_joint = e.Joint(
        name="r_upper_arm_roll_joint",
        type="hinge",
        pos="0 0 0",
        axis="1 0 0",
        range="-1.5 1.7",
        damping="1.0",
    )
    r_upper_arm_link = e.Body(
        name="r_upper_arm_link",
        pos="0 0 0",
    )
    r_upper_arm_roll_link.add_children([
        uar,
        r_upper_arm_roll_joint,
        r_upper_arm_link,
    ])
    ua = e.Geom(
        name="ua",
        type="capsule",
        fromto="0 0 0 0.4 0 0",
        size="0.06",
        density="0.0001",
    )
    r_elbow_flex_link = e.Body(
        name="r_elbow_flex_link",
        pos="0.4 0 0",
    )
    r_upper_arm_link.add_children([
        ua,
        r_elbow_flex_link,
    ])
    ef = e.Geom(
        name="ef",
        type="capsule",
        fromto="0 -0.02 0 0.0 0.02 0",
        size="0.06",
        density="0.0001",
    )
    r_elbow_flex_joint = e.Joint(
        name="r_elbow_flex_joint",
        type="hinge",
        pos="0 0 0",
        axis="0 1 0",
        range="-0.7 0.7",
        damping="1.0",
    )
    r_forearm_roll_link = e.Body(
        name="r_forearm_roll_link",
        pos="0 0 0",
    )
    r_elbow_flex_link.add_children([
        ef,
        r_elbow_flex_joint,
        r_forearm_roll_link,
    ])
    fr = e.Geom(
        name="fr",
        type="capsule",
        fromto="-0.1 0 0 0.1 0 0",
        size="0.02",
        density="0.0001",
    )
    r_forearm_roll_joint = e.Joint(
        name="r_forearm_roll_joint",
        type="hinge",
        limited="true",
        pos="0 0 0",
        axis="1 0 0",
        damping="1.0",
        range="-1.5 1.5",
    )
    r_forearm_link = e.Body(
        name="r_forearm_link",
        pos="0 0 0",
        axisangle="1 0 0 0.392",
    )
    r_forearm_roll_link.add_children([
        fr,
        r_forearm_roll_joint,
        r_forearm_link,
    ])
    fa = e.Geom(
        name="fa",
        type="capsule",
        fromto="0 0 0 0 0 0.291",
        size="0.05",
        density="0.0001",
    )
    r_wrist_flex_link = e.Body(
        name="r_wrist_flex_link",
        pos="0 0 0.321",
        axisangle="0 0 1 1.57",
    )
    r_forearm_link.add_children([
        fa,
        r_wrist_flex_link,
    ])
    wf = e.Geom(
        name="wf",
        type="capsule",
        fromto="0 -0.02 0 0 0.02 0",
        size="0.01",
        density="0.0001",
    )
    r_wrist_flex_joint = e.Joint(
        name="r_wrist_flex_joint",
        type="hinge",
        pos="0 0 0",
        axis="0 0 1",
        range="-1.0 1.0",
        damping="1.0",
    )
    r_wrist_roll_link = e.Body(
        name="r_wrist_roll_link",
        pos="0 0 0",
        axisangle="0 1 0 -1.178",
    )
    r_wrist_flex_link.add_children([
        wf,
        r_wrist_flex_joint,
        r_wrist_roll_link,
    ])
    r_wrist_roll_joint = e.Joint(
        name="r_wrist_roll_joint",
        type="hinge",
        pos="0 0 0",
        limited="true",
        axis="0 1 0",
        damping="1.0",
        range="0 2.25",
    )
    geom_12 = e.Geom(
        type="capsule",
        fromto="0 -0.05 0 0 0.05 0",
        size="0.01",
        contype="1",
        conaffinity="1",
        density="0.0001",
    )
    body = e.Body(
        pos="0 0 0",
        axisangle="0 0 1 0.392",
    )
    body_1 = e.Body(
        pos="0 0 0",
        axisangle="0 0 1 1.57",
    )
    body_2 = e.Body(
        pos="0 0 0",
        axisangle="0 0 1 1.178",
    )
    body_3 = e.Body(
        pos="0 0 0",
        axisangle="0 0 1 0.785",
    )
    body_4 = e.Body(
        pos="0 0 0",
        axisangle="0 0 1 1.96",
    )
    body_5 = e.Body(
        pos="0 0 0",
        axisangle="0 0 1 2.355",
    )
    body_6 = e.Body(
        pos="0 0 0",
        axisangle="0 0 1 2.74",
    )
    r_wrist_roll_link.add_children([
        r_wrist_roll_joint,
        geom_12,
        body,
        body_1,
        body_2,
        body_3,
        body_4,
        body_5,
        body_6,
    ])
    geom_13 = e.Geom(
        type="capsule",
        fromto="0 0.025 0 0 0.075 0.075",
        size="0.005",
        contype="1",
        conaffinity="1",
        density="0.0001",
    )
    geom_14 = e.Geom(
        type="capsule",
        fromto="0 0.075 0.075 0 0.075 0.15",
        size="0.005",
        contype="1",
        conaffinity="1",
        density=".0001",
    )
    geom_15 = e.Geom(
        type="capsule",
        fromto="0 0.075 0.15 0 0 0.225",
        size="0.005",
        contype="1",
        conaffinity="1",
        density="0.0001",
    )
    body.add_children([
        geom_13,
        geom_14,
        geom_15,
    ])
    geom_16 = e.Geom(
        type="capsule",
        fromto="0 0.025 0 0 0.075 0.075",
        size="0.005",
        contype="1",
        conaffinity="1",
        density="0.0001",
    )
    geom_17 = e.Geom(
        type="capsule",
        fromto="0 0.075 0.075 0 0.075 0.15",
        size="0.005",
        contype="1",
        conaffinity="1",
        density="0.0001",
    )
    geom_18 = e.Geom(
        type="capsule",
        fromto="0 0.075 0.15 0 0 0.225",
        size="0.005",
        contype="1",
        conaffinity="1",
        density="0.0001",
    )
    body_1.add_children([
        geom_16,
        geom_17,
        geom_18,
    ])
    geom_19 = e.Geom(
        type="capsule",
        fromto="0 0.025 0 0 0.075 0.075",
        size="0.005",
        contype="1",
        conaffinity="1",
        density="0.0001",
    )
    geom_20 = e.Geom(
        type="capsule",
        fromto="0 0.075 0.075 0 0.075 0.15",
        size="0.005",
        contype="1",
        conaffinity="1",
        density="0.0001",
    )
    geom_21 = e.Geom(
        type="capsule",
        fromto="0 0.075 0.15 0 0 0.225",
        size="0.005",
        contype="1",
        conaffinity="1",
        density="0.0001",
    )
    body_2.add_children([
        geom_19,
        geom_20,
        geom_21,
    ])
    geom_22 = e.Geom(
        type="capsule",
        fromto="0 0.025 0 0 0.075 0.075",
        size="0.005",
        contype="1",
        conaffinity="1",
        density="0.0001",
    )
    geom_23 = e.Geom(
        type="capsule",
        fromto="0 0.075 0.075 0 0.075 0.15",
        size="0.005",
        contype="1",
        conaffinity="1",
        density="0.0001",
    )
    geom_24 = e.Geom(
        type="capsule",
        fromto="0 0.075 0.15 0 0 0.225",
        size="0.005",
        contype="1",
        conaffinity="1",
        density="0.0001",
    )
    body_3.add_children([
        geom_22,
        geom_23,
        geom_24,
    ])
    geom_25 = e.Geom(
        type="capsule",
        fromto="0 0.025 0 0 0.075 0.075",
        size="0.005",
        contype="1",
        conaffinity="1",
        density="0.0001",
    )
    geom_26 = e.Geom(
        type="capsule",
        fromto="0 0.075 0.075 0 0.075 0.15",
        size="0.005",
        contype="1",
        conaffinity="1",
        density="0.0001",
    )
    geom_27 = e.Geom(
        type="capsule",
        fromto="0 0.075 0.15 0 0 0.225",
        size="0.005",
        contype="1",
        conaffinity="1",
        density="0.0001",
    )
    body_4.add_children([
        geom_25,
        geom_26,
        geom_27,
    ])
    geom_28 = e.Geom(
        type="capsule",
        fromto="0 0.025 0 0 0.075 0.075",
        size="0.005",
        contype="1",
        conaffinity="1",
        density="0.0001",
    )
    geom_29 = e.Geom(
        type="capsule",
        fromto="0 0.075 0.075 0 0.075 0.15",
        size="0.005",
        contype="1",
        conaffinity="1",
        density="0.0001",
    )
    geom_30 = e.Geom(
        type="capsule",
        fromto="0 0.075 0.15 0 0 0.225",
        size="0.005",
        contype="1",
        conaffinity="1",
        density="0.0001",
    )
    body_5.add_children([
        geom_28,
        geom_29,
        geom_30,
    ])
    geom_31 = e.Geom(
        type="capsule",
        fromto="0 0.025 0 0 0.075 0.075",
        size="0.005",
        contype="1",
        conaffinity="1",
        density="0.0001",
    )
    geom_32 = e.Geom(
        type="capsule",
        fromto="0 0.075 0.075 0 0.075 0.15",
        size="0.005",
        contype="1",
        conaffinity="1",
        density="0.0001",
    )
    geom_33 = e.Geom(
        type="capsule",
        fromto="0 0.075 0.15 0 0 0.225",
        size="0.005",
        contype="1",
        conaffinity="1",
        density="0.0001",
    )
    body_6.add_children([
        geom_31,
        geom_32,
        geom_33,
    ])

    model_xml = mujoco.xml()

    # Output
    with open('thrower_gen.xml', 'w') as fh:
        fh.write(model_xml)
Beispiel #19
0
def main():
    #########################
    # Level 1
    mujoco = e.Mujoco(model="ant-army")

    #########################
    # Level 2
    compiler = e.Compiler(angle="degree",
                          coordinate="local",
                          inertiafromgeom=True)
    option = e.Option(integrator="RK4", timestep=0.01)
    size = e.Size(
        njmax=1000,
        nconmax=500,
    )
    custom = e.Custom()
    default = e.Default()
    asset = e.Asset()
    worldbody = e.Worldbody()
    tendon = e.Tendon()
    actuator = e.Actuator()

    mujoco.add_children([
        compiler, option, size, custom, default, asset, worldbody, tendon,
        actuator
    ])

    ######################
    # Level 3

    # Custom
    numeric = e.Numeric(
        name="init_qpos",
        data="0.0 0.0 0.55 1.0 0.0 0.0 0.0 0.0 1.0 0.0 -1.0 0.0 -1.0 0.0 1.0",
    )
    custom.add_child(numeric)

    # Default
    d_joint = e.Joint(armature=1, damping=1, limited=True)
    d_geom = e.Geom(conaffinity=0,
                    condim=3,
                    density=5.0,
                    friction=[1, 0.5, 0.5],
                    margin=0.01,
                    rgba=[0.8, 0.6, 0.4, 1])
    default.add_children([d_joint, d_geom])

    # Asset
    tex1 = e.Texture(builtin="gradient",
                     height=100,
                     rgb1=[1, 1, 1],
                     rgb2=[0, 0, 0],
                     type="skybox",
                     width=100)
    tex2 = e.Texture(builtin="flat",
                     height=1278,
                     mark="cross",
                     markrgb=[1, 1, 1],
                     name="texgeom",
                     random=0.01,
                     rgb1=[0.8, 0.6, 0.4],
                     rgb2=[0.8, 0.6, 0.4],
                     type="cube",
                     width=127)
    tex3 = e.Texture(builtin="checker",
                     height=[100],
                     name="texplane",
                     rgb1=[0, 0, 0],
                     rgb2=[0.8, 0.8, 0.8],
                     type="2d",
                     width=100)
    mat1 = e.Material(name="MatPlane",
                      reflectance=0.5,
                      shininess=1,
                      specular=1,
                      texrepeat=[60, 60],
                      texture="texplane")
    mat2 = e.Material(name="geom", texture="texgeom", texuniform=True)
    asset.add_children([
        tex1,
        tex2,
        tex3,
        mat1,
        mat2,
    ])

    # Worldbody
    light = e.Light(cutoff=100,
                    diffuse=[1, 1, 1],
                    dir=[-0, 0, -1.3],
                    directional=True,
                    exponent=1,
                    pos=[0, 0, 1.3],
                    specular=[.1, .1, .1])
    floor_geom = e.Geom(conaffinity=1,
                        condim=3,
                        material="MatPlane",
                        name="floor",
                        pos=[0, 0, 0],
                        rgba=[0.8, 0.9, 0.8, 1],
                        size=[40, 40, 40],
                        type="plane")

    worldbody.add_children([light, floor_geom])

    ant_bodies = []
    ant_tendons = []
    ant_actuators = []
    square_side = 3
    for i in range(square_side):
        for j in range(square_side):
            name = "ant_{}_{}".format(i, j)
            y_offset = 2.5 * i
            x_offset = 2.5 * j
            body, tendons, actuators = get_ant(
                name=name, location=[x_offset, y_offset, 0.75])
            ant_bodies.append(body)
            ant_tendons.extend(tendons)
            ant_actuators.extend(actuators)

    worldbody.add_children(ant_bodies)

    # Tendon
    tendon.add_children(ant_tendons)

    # Actuator
    actuator.add_children(ant_actuators)

    model_xml = mujoco.xml()

    # Output
    out_path = os.path.join("..", "muscledagents", "envs", "mujoco", "assets",
                            "muscled-ants.xml")
    with open(out_path, 'w') as fh:
        fh.write(model_xml)
Beispiel #20
0
def main():

    mujoco = e.Mujoco()
    compiler = e.Compiler(
        angle="degree",
        coordinate="local",
        inertiafromgeom="true",
    )
    option = e.Option(
        integrator="RK4",
        timestep="0.02",
    )
    default = e.Default()
    asset = e.Asset()
    worldbody = e.Worldbody()
    actuator = e.Actuator()
    mujoco.add_children([
        compiler,
        option,
        default,
        asset,
        worldbody,
        actuator,
    ])
    joint = e.Joint(
        armature="0",
        damping="0",
        limited="false",
    )
    geom = e.Geom(
        conaffinity="0",
        condim="3",
        density="100",
        friction="1 0.5 0.5",
        margin="0",
        rgba="0.8 0.6 0.4 1",
    )
    default.add_children([
        joint,
        geom,
    ])
    texture = e.Texture(
        builtin="gradient",
        height="100",
        rgb1="1 1 1",
        rgb2="0 0 0",
        type="skybox",
        width="100",
    )
    texgeom = e.Texture(
        builtin="flat",
        height="1278",
        mark="cross",
        markrgb="1 1 1",
        name="texgeom",
        random="0.01",
        rgb1="0.8 0.6 0.4",
        rgb2="0.8 0.6 0.4",
        type="cube",
        width="127",
    )
    texplane = e.Texture(
        builtin="checker",
        height="100",
        name="texplane",
        rgb1="0 0 0",
        rgb2="0.8 0.8 0.8",
        type="2d",
        width="100",
    )
    MatPlane = e.Material(
        name="MatPlane",
        reflectance="0.5",
        shininess="1",
        specular="1",
        texrepeat="30 30",
        texture="texplane",
    )
    geom_1 = e.Material(
        name="geom",
        texture="texgeom",
        texuniform="true",
    )
    asset.add_children([
        texture,
        texgeom,
        texplane,
        MatPlane,
        geom_1,
    ])
    light = e.Light(
        cutoff="100",
        diffuse="1 1 1",
        dir="-0 0 -1.3",
        directional="true",
        exponent="1",
        pos="0 0 1.3",
        specular=".1 .1 .1",
    )
    floor = e.Geom(
        conaffinity="1",
        condim="3",
        material="MatPlane",
        name="floor",
        pos="0 0 0",
        rgba="0.8 0.9 0.8 1",
        size="40 40 40",
        type="plane",
    )
    torso = e.Body(
        name="torso",
        pos="0 0 0",
    )
    worldbody.add_children([
        light,
        floor,
        torso,
    ])
    motor = e.Motor(
        ctrllimited="true",
        ctrlrange="-1 1",
        joint="ballx",
    )
    motor_1 = e.Motor(
        ctrllimited="true",
        ctrlrange="-0.25 0.25",
        joint="rot",
    )
    actuator.add_children([
        motor,
        motor_1,
    ])
    pointbody = e.Geom(
        name="pointbody",
        pos="0 0 0.5",
        size="0.5",
        type="sphere",
    )
    pointarrow = e.Geom(
        name="pointarrow",
        pos="0.6 0 0.5",
        size="0.5 0.1 0.1",
        type="box",
    )
    ballx = e.Joint(
        axis="1 0 0",
        name="ballx",
        pos="0 0 0",
        type="slide",
    )
    bally = e.Joint(
        axis="0 1 0",
        name="bally",
        pos="0 0 0",
        type="slide",
    )
    rot = e.Joint(
        axis="0 0 1",
        limited="false",
        name="rot",
        pos="0 0 0",
        type="hinge",
    )
    torso.add_children([
        pointbody,
        pointarrow,
        ballx,
        bally,
        rot,
    ])

    model_xml = mujoco.xml()

    # Output
    with open('point_gen.xml', 'w') as fh:
        fh.write(model_xml)
Beispiel #21
0
def main():

    mujoco = e.Mujoco(model="hopper", )
    compiler = e.Compiler(
        angle="degree",
        coordinate="global",
        inertiafromgeom="true",
    )
    default = e.Default()
    option = e.Option(
        integrator="RK4",
        timestep="0.002",
    )
    visual = e.Visual()
    worldbody = e.Worldbody()
    actuator = e.Actuator()
    asset = e.Asset()
    mujoco.add_children([
        compiler,
        default,
        option,
        visual,
        worldbody,
        actuator,
        asset,
    ])
    joint = e.Joint(
        armature="1",
        damping="1",
        limited="true",
    )
    geom = e.Geom(
        conaffinity="1",
        condim="1",
        contype="1",
        margin="0.001",
        material="geom",
        rgba="0.8 0.6 .4 1",
        solimp=".8 .8 .01",
        solref=".02 1",
    )
    motor = e.Motor(
        ctrllimited="true",
        ctrlrange="-.4 .4",
    )
    default.add_children([
        joint,
        geom,
        motor,
    ])
    map = e.Map(znear="0.02", )
    visual.add_children([
        map,
    ])
    light = e.Light(
        cutoff="100",
        diffuse="1 1 1",
        dir="-0 0 -1.3",
        directional="true",
        exponent="1",
        pos="0 0 1.3",
        specular=".1 .1 .1",
    )
    floor = e.Geom(
        conaffinity="1",
        condim="3",
        name="floor",
        pos="0 0 0",
        rgba="0.8 0.9 0.8 1",
        size="20 20 .125",
        type="plane",
        material="MatPlane",
    )
    torso = e.Body(
        name="torso",
        pos="0 0 1.25",
    )
    worldbody.add_children([
        light,
        floor,
        torso,
    ])
    motor_1 = e.Motor(
        ctrllimited="true",
        ctrlrange="-1.0 1.0",
        gear="200.0",
        joint="thigh_joint",
    )
    motor_2 = e.Motor(
        ctrllimited="true",
        ctrlrange="-1.0 1.0",
        gear="200.0",
        joint="leg_joint",
    )
    motor_3 = e.Motor(
        ctrllimited="true",
        ctrlrange="-1.0 1.0",
        gear="200.0",
        joint="foot_joint",
    )
    actuator.add_children([
        motor_1,
        motor_2,
        motor_3,
    ])
    texture = e.Texture(
        type="skybox",
        builtin="gradient",
        rgb1=".4 .5 .6",
        rgb2="0 0 0",
        width="100",
        height="100",
    )
    texgeom = e.Texture(
        builtin="flat",
        height="1278",
        mark="cross",
        markrgb="1 1 1",
        name="texgeom",
        random="0.01",
        rgb1="0.8 0.6 0.4",
        rgb2="0.8 0.6 0.4",
        type="cube",
        width="127",
    )
    texplane = e.Texture(
        builtin="checker",
        height="100",
        name="texplane",
        rgb1="0 0 0",
        rgb2="0.8 0.8 0.8",
        type="2d",
        width="100",
    )
    MatPlane = e.Material(
        name="MatPlane",
        reflectance="0.5",
        shininess="1",
        specular="1",
        texrepeat="60 60",
        texture="texplane",
    )
    geom_1 = e.Material(
        name="geom",
        texture="texgeom",
        texuniform="true",
    )
    asset.add_children([
        texture,
        texgeom,
        texplane,
        MatPlane,
        geom_1,
    ])
    track = e.Camera(
        name="track",
        mode="trackcom",
        pos="0 -3 1",
        xyaxes="1 0 0 0 0 1",
    )
    rootx = e.Joint(
        armature="0",
        axis="1 0 0",
        damping="0",
        limited="false",
        name="rootx",
        pos="0 0 0",
        stiffness="0",
        type="slide",
    )
    rootz = e.Joint(
        armature="0",
        axis="0 0 1",
        damping="0",
        limited="false",
        name="rootz",
        pos="0 0 0",
        ref="1.25",
        stiffness="0",
        type="slide",
    )
    rooty = e.Joint(
        armature="0",
        axis="0 1 0",
        damping="0",
        limited="false",
        name="rooty",
        pos="0 0 1.25",
        stiffness="0",
        type="hinge",
    )
    torso_geom = e.Geom(
        friction="0.9",
        fromto="0 0 1.45 0 0 1.05",
        name="torso_geom",
        size="0.05",
        type="capsule",
    )
    thigh = e.Body(
        name="thigh",
        pos="0 0 1.05",
    )
    torso.add_children([
        track,
        rootx,
        rootz,
        rooty,
        torso_geom,
        thigh,
    ])
    thigh_joint = e.Joint(
        axis="0 -1 0",
        name="thigh_joint",
        pos="0 0 1.05",
        range="-150 0",
        type="hinge",
    )
    thigh_geom = e.Geom(
        friction="0.9",
        fromto="0 0 1.05 0 0 0.6",
        name="thigh_geom",
        size="0.05",
        type="capsule",
    )
    leg = e.Body(
        name="leg",
        pos="0 0 0.35",
    )
    thigh.add_children([
        thigh_joint,
        thigh_geom,
        leg,
    ])
    leg_joint = e.Joint(
        axis="0 -1 0",
        name="leg_joint",
        pos="0 0 0.6",
        range="-150 0",
        type="hinge",
    )
    leg_geom = e.Geom(
        friction="0.9",
        fromto="0 0 0.6 0 0 0.1",
        name="leg_geom",
        size="0.04",
        type="capsule",
    )
    foot = e.Body(
        name="foot",
        pos="0.13/2 0 0.1",
    )
    leg.add_children([
        leg_joint,
        leg_geom,
        foot,
    ])
    foot_joint = e.Joint(
        axis="0 -1 0",
        name="foot_joint",
        pos="0 0 0.1",
        range="-45 45",
        type="hinge",
    )
    foot_geom = e.Geom(
        friction="2.0",
        fromto="-0.13 0 0.1 0.26 0 0.1",
        name="foot_geom",
        size="0.06",
        type="capsule",
    )
    foot.add_children([
        foot_joint,
        foot_geom,
    ])

    model_xml = mujoco.xml()

    # Output
    with open('hopper_gen.xml', 'w') as fh:
        fh.write(model_xml)
Beispiel #22
0
def main():

    mujoco = e.Mujoco(
        model="ant",
    )
    compiler = e.Compiler(
        angle="degree",
        coordinate="local",
        inertiafromgeom="true",
    )
    option = e.Option(
        integrator="RK4",
        timestep="0.01",
    )
    custom = e.Custom(
    )
    default = e.Default(
    )
    asset = e.Asset(
    )
    worldbody = e.Worldbody(
    )
    actuator = e.Actuator(
    )
    mujoco.add_children([
        compiler,
        option,
        custom,
        default,
        asset,
        worldbody,
        actuator,
    ])
    init_qpos = e.Numeric(
        data="0.0 0.0 0.55 1.0 0.0 0.0 0.0 0.0 1.0 0.0 -1.0 0.0 -1.0 0.0 1.0",
        name="init_qpos",
    )
    custom.add_children([
        init_qpos,
    ])
    joint = e.Joint(
        armature="1",
        damping="1",
        limited="true",
    )
    geom = e.Geom(
        conaffinity="0",
        condim="3",
        density="5.0",
        friction="1 0.5 0.5",
        margin="0.01",
        rgba="0.8 0.6 0.4 1",
    )
    default.add_children([
        joint,
        geom,
    ])
    texture = e.Texture(
        builtin="gradient",
        height="100",
        rgb1="1 1 1",
        rgb2="0 0 0",
        type="skybox",
        width="100",
    )
    texgeom = e.Texture(
        builtin="flat",
        height="1278",
        mark="cross",
        markrgb="1 1 1",
        name="texgeom",
        random="0.01",
        rgb1="0.8 0.6 0.4",
        rgb2="0.8 0.6 0.4",
        type="cube",
        width="127",
    )
    texplane = e.Texture(
        builtin="checker",
        height="100",
        name="texplane",
        rgb1="0 0 0",
        rgb2="0.8 0.8 0.8",
        type="2d",
        width="100",
    )
    MatPlane = e.Material(
        name="MatPlane",
        reflectance="0.5",
        shininess="1",
        specular="1",
        texrepeat="60 60",
        texture="texplane",
    )
    geom_1 = e.Material(
        name="geom",
        texture="texgeom",
        texuniform="true",
    )
    asset.add_children([
        texture,
        texgeom,
        texplane,
        MatPlane,
        geom_1,
    ])
    light = e.Light(
        cutoff="100",
        diffuse="1 1 1",
        dir="-0 0 -1.3",
        directional="true",
        exponent="1",
        pos="0 0 1.3",
        specular=".1 .1 .1",
    )
    floor = e.Geom(
        conaffinity="1",
        condim="3",
        material="MatPlane",
        name="floor",
        pos="0 0 0",
        rgba="0.8 0.9 0.8 1",
        size="40 40 40",
        type="plane",
    )
    torso = e.Body(
        name="torso",
        pos="0 0 0.75",
    )
    worldbody.add_children([
        light,
        floor,
        torso,
    ])
    motor = e.Motor(
        ctrllimited="true",
        ctrlrange="-1.0 1.0",
        joint="hip_4",
        gear="150",
    )
    motor_1 = e.Motor(
        ctrllimited="true",
        ctrlrange="-1.0 1.0",
        joint="ankle_4",
        gear="150",
    )
    motor_2 = e.Motor(
        ctrllimited="true",
        ctrlrange="-1.0 1.0",
        joint="hip_1",
        gear="150",
    )
    motor_3 = e.Motor(
        ctrllimited="true",
        ctrlrange="-1.0 1.0",
        joint="ankle_1",
        gear="150",
    )
    motor_4 = e.Motor(
        ctrllimited="true",
        ctrlrange="-1.0 1.0",
        joint="hip_2",
        gear="150",
    )
    motor_5 = e.Motor(
        ctrllimited="true",
        ctrlrange="-1.0 1.0",
        joint="ankle_2",
        gear="150",
    )
    motor_6 = e.Motor(
        ctrllimited="true",
        ctrlrange="-1.0 1.0",
        joint="hip_3",
        gear="150",
    )
    motor_7 = e.Motor(
        ctrllimited="true",
        ctrlrange="-1.0 1.0",
        joint="ankle_3",
        gear="150",
    )
    actuator.add_children([
        motor,
        motor_1,
        motor_2,
        motor_3,
        motor_4,
        motor_5,
        motor_6,
        motor_7,
    ])
    track = e.Camera(
        name="track",
        mode="trackcom",
        pos="0 -3 0.3",
        xyaxes="1 0 0 0 0 1",
    )
    torso_geom = e.Geom(
        name="torso_geom",
        pos="0 0 0",
        size="0.25",
        type="sphere",
    )
    root = e.Joint(
        armature="0",
        damping="0",
        limited="false",
        margin="0.01",
        name="root",
        pos="0 0 0",
        type="free",
    )
    front_left_leg = e.Body(
        name="front_left_leg",
        pos="0 0 0",
    )
    front_right_leg = e.Body(
        name="front_right_leg",
        pos="0 0 0",
    )
    back_leg = e.Body(
        name="back_leg",
        pos="0 0 0",
    )
    right_back_leg = e.Body(
        name="right_back_leg",
        pos="0 0 0",
    )
    torso.add_children([
        track,
        torso_geom,
        root,
        front_left_leg,
        front_right_leg,
        back_leg,
        right_back_leg,
    ])
    aux_1_geom = e.Geom(
        fromto="0.0 0.0 0.0 0.2 0.2 0.0",
        name="aux_1_geom",
        size="0.08",
        type="capsule",
    )
    aux_1 = e.Body(
        name="aux_1",
        pos="0.2 0.2 0",
    )
    front_left_leg.add_children([
        aux_1_geom,
        aux_1,
    ])
    aux_2_geom = e.Geom(
        fromto="0.0 0.0 0.0 -0.2 0.2 0.0",
        name="aux_2_geom",
        size="0.08",
        type="capsule",
    )
    aux_2 = e.Body(
        name="aux_2",
        pos="-0.2 0.2 0",
    )
    front_right_leg.add_children([
        aux_2_geom,
        aux_2,
    ])
    aux_3_geom = e.Geom(
        fromto="0.0 0.0 0.0 -0.2 -0.2 0.0",
        name="aux_3_geom",
        size="0.08",
        type="capsule",
    )
    aux_3 = e.Body(
        name="aux_3",
        pos="-0.2 -0.2 0",
    )
    back_leg.add_children([
        aux_3_geom,
        aux_3,
    ])
    aux_4_geom = e.Geom(
        fromto="0.0 0.0 0.0 0.2 -0.2 0.0",
        name="aux_4_geom",
        size="0.08",
        type="capsule",
    )
    aux_4 = e.Body(
        name="aux_4",
        pos="0.2 -0.2 0",
    )
    right_back_leg.add_children([
        aux_4_geom,
        aux_4,
    ])
    hip_1 = e.Joint(
        axis="0 0 1",
        name="hip_1",
        pos="0.0 0.0 0.0",
        range="-30 30",
        type="hinge",
    )
    left_leg_geom = e.Geom(
        fromto="0.0 0.0 0.0 0.2 0.2 0.0",
        name="left_leg_geom",
        size="0.08",
        type="capsule",
    )
    body = e.Body(
        pos="0.2 0.2 0",
    )
    aux_1.add_children([
        hip_1,
        left_leg_geom,
        body,
    ])
    hip_2 = e.Joint(
        axis="0 0 1",
        name="hip_2",
        pos="0.0 0.0 0.0",
        range="-30 30",
        type="hinge",
    )
    right_leg_geom = e.Geom(
        fromto="0.0 0.0 0.0 -0.2 0.2 0.0",
        name="right_leg_geom",
        size="0.08",
        type="capsule",
    )
    body_1 = e.Body(
        pos="-0.2 0.2 0",
    )
    aux_2.add_children([
        hip_2,
        right_leg_geom,
        body_1,
    ])
    hip_3 = e.Joint(
        axis="0 0 1",
        name="hip_3",
        pos="0.0 0.0 0.0",
        range="-30 30",
        type="hinge",
    )
    back_leg_geom = e.Geom(
        fromto="0.0 0.0 0.0 -0.2 -0.2 0.0",
        name="back_leg_geom",
        size="0.08",
        type="capsule",
    )
    body_2 = e.Body(
        pos="-0.2 -0.2 0",
    )
    aux_3.add_children([
        hip_3,
        back_leg_geom,
        body_2,
    ])
    hip_4 = e.Joint(
        axis="0 0 1",
        name="hip_4",
        pos="0.0 0.0 0.0",
        range="-30 30",
        type="hinge",
    )
    rightback_leg_geom = e.Geom(
        fromto="0.0 0.0 0.0 0.2 -0.2 0.0",
        name="rightback_leg_geom",
        size="0.08",
        type="capsule",
    )
    body_3 = e.Body(
        pos="0.2 -0.2 0",
    )
    aux_4.add_children([
        hip_4,
        rightback_leg_geom,
        body_3,
    ])
    ankle_1 = e.Joint(
        axis="-1 1 0",
        name="ankle_1",
        pos="0.0 0.0 0.0",
        range="30 70",
        type="hinge",
    )
    left_ankle_geom = e.Geom(
        fromto="0.0 0.0 0.0 0.4 0.4 0.0",
        name="left_ankle_geom",
        size="0.08",
        type="capsule",
    )
    body.add_children([
        ankle_1,
        left_ankle_geom,
    ])
    ankle_2 = e.Joint(
        axis="1 1 0",
        name="ankle_2",
        pos="0.0 0.0 0.0",
        range="-70 -30",
        type="hinge",
    )
    right_ankle_geom = e.Geom(
        fromto="0.0 0.0 0.0 -0.4 0.4 0.0",
        name="right_ankle_geom",
        size="0.08",
        type="capsule",
    )
    body_1.add_children([
        ankle_2,
        right_ankle_geom,
    ])
    ankle_3 = e.Joint(
        axis="-1 1 0",
        name="ankle_3",
        pos="0.0 0.0 0.0",
        range="-70 -30",
        type="hinge",
    )
    third_ankle_geom = e.Geom(
        fromto="0.0 0.0 0.0 -0.4 -0.4 0.0",
        name="third_ankle_geom",
        size="0.08",
        type="capsule",
    )
    body_2.add_children([
        ankle_3,
        third_ankle_geom,
    ])
    ankle_4 = e.Joint(
        axis="1 1 0",
        name="ankle_4",
        pos="0.0 0.0 0.0",
        range="30 70",
        type="hinge",
    )
    fourth_ankle_geom = e.Geom(
        fromto="0.0 0.0 0.0 0.4 -0.4 0.0",
        name="fourth_ankle_geom",
        size="0.08",
        type="capsule",
    )
    body_3.add_children([
        ankle_4,
        fourth_ankle_geom,
    ])

    model_xml = mujoco.xml()

    # Output
    with open('ant_gen.xml', 'w') as fh:
        fh.write(model_xml)
Beispiel #23
0
def main():
    #########################
    # Level 1
    mujoco = e.Mujoco(model="ant")

    #########################
    # Level 2
    compiler = e.Compiler(angle="degree",
                          coordinate="local",
                          inertiafromgeom=True)
    option = e.Option(integrator="RK4", timestep=0.01)
    custom = e.Custom()
    default = e.Default()
    asset = e.Asset()
    worldbody = e.Worldbody()
    actuator = e.Actuator()

    mujoco.add_children(
        [compiler, option, custom, default, asset, worldbody, actuator])

    ######################
    # Level 3

    # Custom
    numeric = e.Numeric(
        name="init_qpos",
        data="0.0 0.0 0.55 1.0 0.0 0.0 0.0 0.0 1.0 0.0 -1.0 0.0 -1.0 0.0 1.0",
    )
    custom.add_child(numeric)

    # Default
    d_joint = e.Joint(armature=1, damping=1, limited=True)
    d_geom = e.Geom(conaffinity=0,
                    condim=3,
                    density=5.0,
                    friction=[1, 0.5, 0.5],
                    margin=0.01,
                    rgba=[0.8, 0.6, 0.4, 1])
    default.add_children([d_joint, d_geom])

    # Asset
    tex1 = e.Texture(builtin="gradient",
                     height=100,
                     rgb1=[1, 1, 1],
                     rgb2=[0, 0, 0],
                     type="skybox",
                     width=100)
    tex2 = e.Texture(builtin="flat",
                     height=1278,
                     mark="cross",
                     markrgb=[1, 1, 1],
                     name="texgeom",
                     random=0.01,
                     rgb1=[0.8, 0.6, 0.4],
                     rgb2=[0.8, 0.6, 0.4],
                     type="cube",
                     width=127)
    tex3 = e.Texture(builtin="checker",
                     height=[100],
                     name="texplane",
                     rgb1=[0, 0, 0],
                     rgb2=[0.8, 0.8, 0.8],
                     type="2d",
                     width=100)
    mat1 = e.Material(name="MatPlane",
                      reflectance=0.5,
                      shininess=1,
                      specular=1,
                      texrepeat=[60, 60],
                      texture="texplane")
    mat2 = e.Material(name="geom", texture="texgeom", texuniform=True)
    asset.add_children([
        tex1,
        tex2,
        tex3,
        mat1,
        mat2,
    ])

    # Worldbody
    light = e.Light(cutoff=100,
                    diffuse=[1, 1, 1],
                    dir=[-0, 0, -1.3],
                    directional=True,
                    exponent=1,
                    pos=[0, 0, 1.3],
                    specular=[.1, .1, .1])
    floor_geom = e.Geom(conaffinity=1,
                        condim=3,
                        material="MatPlane",
                        name="floor",
                        pos=[0, 0, 0],
                        rgba=[0.8, 0.9, 0.8, 1],
                        size=[40, 40, 40],
                        type="plane")
    torso = e.Body(
        name="torso",
        pos=[0, 0, 0.75],
    )
    worldbody.add_children([light, floor_geom, torso])

    # Torso
    camera = e.Camera(name="track",
                      mode="trackcom",
                      pos=[0, -3, 0.3],
                      xyaxes=[1, 0, 0, 0, 0, 1])
    torso_geom = e.Geom(name="torso_geom",
                        pos=[0, 0, 0],
                        size=0.25,
                        type="sphere",
                        rgba=None)
    joint = e.Joint(armature=0,
                    damping=0,
                    limited=False,
                    margin=0.01,
                    name="root",
                    pos=[0, 0, 0],
                    type="free")
    front_right_leg, fr_hip, fr_ankle = get_leg("front_right_leg")
    front_left_leg, fl_hip, fl_ankle = get_leg(
        "front_left_leg",
        hip_angle=90,
    )
    back_left_leg, bl_hip, bl_ankle = get_leg(
        "back_left_leg",
        hip_angle=180,
    )
    back_right_leg, br_hip, br_ankle = get_leg(
        "back_right_leg",
        hip_angle=270,
    )
    torso.add_children([
        camera, torso_geom, joint, front_right_leg, front_left_leg,
        back_left_leg, back_right_leg
    ])

    # Actuator
    actuator.add_children([
        fr_hip, fr_ankle, fl_hip, fl_ankle, bl_hip, bl_ankle, br_hip, br_ankle
    ])

    model_xml = mujoco.xml()

    # Output
    with open('ant-gen.xml', 'w') as fh:
        fh.write(model_xml)
Beispiel #24
0
def main():
    #########################
    # Level 1
    mujoco = e.Mujoco(model="tendon")

    #########################
    # Level 2
    compiler = e.Compiler(coordinate="global", )
    default = e.Default()
    visual = e.Visual()
    worldbody = e.Worldbody()
    tendon = e.Tendon()

    mujoco.add_children([compiler, default, visual, worldbody, tendon])

    ######################
    # Level 3

    # Default
    d_geom = e.Geom(rgba=[0.9, 0.7, 0.1, 1], size=0.01)
    d_site = e.Site(type="sphere", rgba=[0.9, 0.9, 0.9, 1], size=0.005)
    d_joint = e.Joint(type="hinge",
                      axis=[0, 1, 0],
                      limited=True,
                      range=[0, 60],
                      solimplimit=[0.95, 0.95, 0.1])

    default.add_children([d_geom, d_site, d_joint])

    # Visual
    headlight = e.visual.Headlight(diffuse=[0.7, 0.7, 0.7])
    visual.add_child(headlight)

    # Worldbody
    b1 = e.Body()
    s2 = e.Site(name="s2", pos=[-0.03, 0, 0.32])
    b2 = e.Body()
    worldbody.add_children([b1, s2, b2])

    # Tendon
    spatial_tendon = e.Spatial(width=0.002,
                               rgba=[.95, .3, .3, 1],
                               limited=True,
                               range=[0, 0.33])
    tendon.add_child(spatial_tendon)

    ######################
    # Level 4

    # b1
    b1_geom = e.Geom(type="cylinder",
                     fromto=[-0.03, 0, 0.2, -0.03, 0, 0.15],
                     size=0.03,
                     rgba=[.2, .2, .5, 1],
                     density=5000)
    b1_joint = e.Joint(
        type="slide",
        pos=[-0.03, 0, 0.2],
        axis=[0, 0, 1],
        limited=False,
    )
    s1 = e.Site(name="s1", pos=[-0.03, 0, 0.2])
    b1.add_children([b1_geom, b1_joint, s1])

    # b2

    b2_geom_1 = e.Geom(type="capsule", fromto=[0, 0, 0.3, 0.1, 0, 0.3])
    g1 = e.Geom(name="g1",
                type="cylinder",
                fromto=[0.0, 0.015, 0.3, 0.0, -0.015, 0.3],
                size=0.02,
                rgba=[.3, .9, .3, .4])
    b2_joint = e.Joint(pos=[0, 0, 0.3])
    s3 = e.Site(name="s3", pos=[0.02, 0, 0.32], size=None)
    b3 = e.Body()
    b2.add_children([b2_geom_1, g1, b2_joint, s3, b3])

    # spatial_tendon
    ss1 = e.spatial.Site(site="s1")
    ss2 = e.spatial.Site(site="s2")
    sg1 = e.spatial.Geom(geom="g1")
    ss3 = e.spatial.Site(site="s3")
    sp1 = e.spatial.Pulley(divisor=2)
    sg2 = e.spatial.Geom(geom="g2", sidesite="side2")
    ss4 = e.spatial.Site(site="s4")
    sp2 = e.spatial.Pulley(divisor=2)
    ss5 = e.spatial.Site(site="s5")
    sg3 = e.spatial.Geom(geom="g3", sidesite="side3")
    ss6 = e.spatial.Site(site="s6")

    spatial_tendon.add_children(
        [ss1, ss2, sg1, ss3, sp1, ss3, sg2, ss4, sp2, ss3, sg2, ss5, sg3, ss6])

    ######################
    # Level 5

    # b3

    b3_geom_1 = e.Geom(type="capsule", fromto=[0.1, 0, 0.3, 0.2, 0, 0.3])
    g2 = e.Geom(name="g2",
                type="cylinder",
                fromto=[0.1, 0.015, 0.3, 0.1, -0.015, 0.3],
                size=0.02,
                rgba=[.3, .9, .3, .4])
    b3_joint = e.Joint(pos=[0.1, 0, 0.3])
    s4 = e.Site(name="s4", pos=[0.13, 0, 0.31], size=None)
    s5 = e.Site(name="s5", pos=[0.15, 0, 0.32])
    side2 = e.Site(name="side2", pos=[0.1, 0, 0.33])
    b4 = e.Body()

    b3.add_children([b3_geom_1, g2, b3_joint, s4, s5, side2, b4])

    ######################
    # Level 6

    # b4

    b4_geom_1 = e.Geom(type="capsule", fromto=[0.2, 0, 0.3, 0.27, 0, 0.3])
    g3 = e.Geom(name="g3",
                type="cylinder",
                fromto=[0.2, 0.015, 0.3, 0.2, -0.015, 0.3],
                size=0.02,
                rgba=[.3, .9, .3, .4])
    b4_joint = e.Joint(pos=[0.2, 0, 0.3])
    s6 = e.Site(name="s6", pos=[0.23, 0, 0.31])
    side3 = e.Site(name="side3", pos=[0.2, 0, 0.33])

    b4.add_children([b4_geom_1, g3, b4_joint, s6, side3])
    model_xml = mujoco.xml()

    # Output
    with open('tendon-gen.xml', 'w') as fh:
        fh.write(model_xml)
Beispiel #25
0
def main(dataset_file):
    #Path maker
    handle_folder = os.path.join(args.input_dirname.format(knob_type), dataset_file)
    stl_path = os.path.join('door/{}knobs'.format(knob_type), dataset_file)
    with open(os.path.join(handle_folder, 'info.json'), 'r') as f:
        params_dict = json.load(f)

    #geom parts number
    door_parts_n = 1
    frame_parts_n = 6
    wall_parts_n = 3
    knob_parts_n = params_dict['model_count']

    if args.robot_type == "gripper":
        robot_type = "blue_gripper"
    elif args.robot_type == "hook":
        robot_type = "blue_hook"
    elif args.robot_type == "floatinggripper":
        robot_type = "blue_floatinggripper"
    elif args.robot_type == "floatinghook":
        robot_type = "blue_floatinghook"
    elif args.robot_type == "mobilegripper":
        robot_type = "blue_mobile_gripper"
    elif args.robot_type == "mobilehook":
        robot_type = "blue_mobile_hook"
    elif args.robot_type == "baxter-leftarm":
        robot_type = "baxter_leftarm"
    elif args.robot_type == "baxter-rightarm":
        robot_type = "baxter_rightarm"
    elif args.robot_type == "baxter-botharm":
        robot_type = "baxter_botharm"
    else:
        raise Exception("robot type not recognized")
    
    ###################### Randomize Parameters ######################
    # Lighting property
    light_n=randrange(2,6)
    light_property_list = []
    for i in range(light_n):
        light_property = dict(
            light_diffuse=[randrange(9,11)/10, randrange(9,11)/10, randrange(9,11)/10],
            light_pos=[randrange(0,500)/100.0, randrange(-500,500)/100.0, randrange(300,700)/100.0],
            light_dir=[randrange(-50,50)/100.0, randrange(-50,50)/100.0, randrange(-50,-25)/100.0]
        )
        light_property_list.append(light_property)

    # Camera property
    camera1_pos = [0.99, -0.5, 1.0] #1m x 1m
    camera1_ori = [0.0, 1.57, 1.57]
    camera2_pos = [0.5, 0.0, 1.99]  #1m x 1m
    camera2_ori = [0, 0, 0]
    camera_fieldview = 60
    camera_randomization = False
    if camera_randomization:
        for i in range(len(camera1_pos)):
            camera1_pos[i] += randrange(-15,15)/1000
            camera2_pos[i] += randrange(-15,15)/1000
        for i in range(len(camera1_ori)):
            camera1_ori[i] += randrange(-17,17)/1000
            camera2_ori[i] += randrange(-17,17)/1000
        camera_fieldview_noise = [randrange(-100,100)/100, randrange(-100,100)/100]
    camera_poses = [camera1_pos, camera2_pos]
    camera_ories = [camera1_ori, camera2_ori]
    camera_fieldview_noise = [0, 0]

    #Material list
    material_name_list = ['Paint','Wood','Carpet','Metal']
    paint_shininess = randrange(1,50)/100.0
    paint_specular = randrange(1,50)/100.0
    wood_shininess = randrange(1,20)/100.0
    wood_specular = randrange(1,20)/100.0
    carpet_shininess = randrange(1,5)/100.0
    carpet_specular = randrange(1,5)/100.0
    metal_shininess = randrange(80,100)/100.0
    metal_specular = randrange(80,100)/100.0

    #Floor color
    floor_rgb1 = [randrange(0,50)/100.0, randrange(0,50)/100.0, randrange(0,50)/100.0]
    floor_rgb2 = [randrange(0,50)/100.0, randrange(0,50)/100.0, randrange(0,50)/100.0]

    # Wall property
    wall_rgba = [randrange(1,85)/100.0, randrange(1,85)/100.0, randrange(1,85)/100.0, 1.0]
    wall_location = [0.0, randrange(-100,100)/1000.0, 0.0]
    wall_material = material_name_list[randrange(0,3)]

    # Frame property
    frame_rgba = [randrange(70,85)/100.0, randrange(70,85)/100.0, randrange(70,85)/100.0, 1.0]
    frame_material = material_name_list[randrange(0,3)]

    # Door Frame Joint Property  
    door_frame_damper = randrange(10, 20)/10.0
    door_frame_spring = randrange(10, 20)/100.0
    door_frame_frictionloss = randrange(0,1)

    # Door hinge direction
    if args.righthinge_ratio > randrange(0,100)/100.0:
        hinge_loc = "righthinge"
    else:
        hinge_loc = "lefthinge"

    # Swtich Camera1 position depending on the hinge location
    if hinge_loc == "lefthinge":
         camera_poses[0] = [0.99, 0.5, 1.0] #1m x 1m
    
    # Opening direction
    if args.pulldoor_ratio > randrange(0,100)/100.0:
        opendir = "pull"
    else:
        opendir = "push"

    # Door property
    door_height = randrange(2000, 2500)/1000.0
    door_width = randrange(750, 1200)/1000.0
    door_thickness = randrange(20, 30)/1000.0
    knob_height = randrange(900, 1100)/1000.0 # legal height of the door knob is 864mm to 1219mm
    knob_horizontal_location_ratio = randrange(10,20)/100.0 #height-ratio and from-side-ratio of knob
    door_mass = door_height*door_width*door_thickness*randrange(200,300) # Density of MDF is in range of 500-1000kg/m^3 
    door_rgba = [randrange(1,100)/100.0, randrange(1,100)/100.0, randrange(1,100)/100.0, 1.0]
    door_material = material_name_list[randrange(0,3)]

    # Knob Door Joint Property
    knob_door_damper = randrange(10, 20)/100.0
    knob_door_spring = randrange(10, 15)/100.0
    knob_door_frictionloss = randrange(0, 1)
    knob_rot_range = randrange(75, 80)*3.14/180

    # Knob property
    if hinge_loc == "righthinge":
        doorknob_pos = [0,0,0]
        knob_euler = [-1.57,1.57,0]
    elif hinge_loc == "lefthinge":
        doorknob_pos = [0, (0.5-knob_horizontal_location_ratio)*door_width*2, 0]
        knob_euler = [1.57,1.57,0]
    else:
        raise Exception("door direction undefinded")

    knob_mass = randrange(1,2)
    knob_rgba = [randrange(1,100)/100.0, randrange(1,100)/100.0, randrange(1,100)/100.0, 1.0]
    knob_surface_friction = [randrange(50,100)/100.0, randrange(1,5)/1000.0, randrange(1,5)/1000.0]
    doorknob_material = material_name_list[randrange(0,3)]


    high_variance = False
    if high_variance:
        door_frame_damper = randrange(20, 60)/100.0
        door_frame_spring = randrange(20, 60)/100.0
        door_mass = door_height*door_width*door_thickness*randrange(200,600) # (700,850) Density of MDF
        knob_surface_friction = [randrange(0,100)/100.0, randrange(1,10)/1000.0, randrange(1,10)/1000.0]

    knob_color_overfit = False
    if knob_color_overfit:
        material_name_list = ['Paint','Wood','Carpet','Metal']
        wall_rgba = [randrange(90,95)/100.0, randrange(90,95)/100.0, randrange(90,95)/100.0, 1.0]
        wall_material = material_name_list[randrange(0,2)]
        frame_rgba = [randrange(90,100)/100.0, randrange(80,100)/100.0, randrange(80,100)/100.0, 1.0]
        frame_material = material_name_list[randrange(0,2)]
        door_rgba = [randrange(90,95)/100.0, randrange(90,95)/100.0, randrange(90,95)/100.0, 1.0]
        door_material = material_name_list[randrange(0,2)]
        knob_color = randrange(0,100)
        if knob_color < 34:
            # Brass
            knob_rgba = [randrange(71,72)/100.0, randrange(66,67)/100.0, randrange(25,26)/100.0, 1.0]
        elif 34 <= knob_color < 67:
            # Silver
            knob_rgba = [randrange(95,100)/100.0, randrange(95,100)/100.0, randrange(95,100)/100.0, 1.0]
        else:
            # Black
            knob_rgba = [randrange(1,10)/100.0, randrange(1,10)/100.0, randrange(1,10)/100.0, 1.0]
        doorknob_material = material_name_list[3]

        light_n=randrange(6,8)
        light_property_list = []
        for i in range(light_n):
            light_property = dict(
                light_diffuse=[randrange(9,11)/10, randrange(9,11)/10, randrange(9,11)/10],
                light_pos=[randrange(0,500)/100.0, randrange(-500,500)/100.0, randrange(300,700)/100.0],
                light_dir=[randrange(-50,50)/100.0, randrange(-50,50)/100.0, randrange(-100,-80)/100.0]
            )
            light_property_list.append(light_property)

    # Robot property
    robot_damping = randrange(9, 11)/100
    # robot_damping = randrange(5, 10)/10

    ###################### Constant Parameters ######################
    # gravity
    if args.robot_type.find("floating")>-1 or args.robot_type.find("baxter")>-1:
        gravity_vector = [0,0,0]
    else:
        gravity_vector = [0,0,-9.81]

    # Stationaly Camera
    camera_n = 2

    # World Wall Joint Property
    wall_world_armature = 0.0001
    wall_world_damper = 100000000
    wall_world_spring = 1000
    wall_world_frictionloss = 0
    wall_world_joint_pos = [0,0,0]


    # wall Frame Joint Property
    frame_wall_armature = 0.0001
    frame_wall_damper = 100000000
    frame_wall_spring = 1000
    frame_wall_frictionloss = 0
    frame_wall_joint_pos = [0,0,0]

    # Door stopper property
    doorstopper_size = [door_thickness, 0.10, 0.025]
    if opendir == "push":
        if hinge_loc == "righthinge":
            doorstopper_pos = [door_thickness*2.3, -door_width*knob_horizontal_location_ratio+0.15, door_height-knob_height-0.05]
        else:
            doorstopper_pos = [door_thickness*2.3, door_width-door_width*knob_horizontal_location_ratio-0.15, door_height-knob_height-0.05]
    else:
        if hinge_loc == "righthinge":
            doorstopper_pos = [0-door_thickness*1.8, -door_width*knob_horizontal_location_ratio+0.15, door_height-knob_height-0.05]
        else:
            doorstopper_pos = [0-door_thickness*1.8, door_width-door_width*knob_horizontal_location_ratio-0.15, door_height-knob_height-0.05]

    # Door Frame Joint Property
    door_frame_armature = 0.0001
    door_frame_limited = True
    if hinge_loc == "lefthinge":
        if opendir == "push":
            door_frame_range = [-0.00, 1.57]
        else:
            door_frame_range = [-1.57, 0.00]
    else:
        if opendir == "push":
            door_frame_range = [-1.57, 0.00]
        else:
            door_frame_range = [-0.00, 1.57]

    if hinge_loc == "righthinge":
        door_frame_joint_pos = [0,door_width-door_width*knob_horizontal_location_ratio,0]
    else:
        door_frame_joint_pos = [0,-door_width*knob_horizontal_location_ratio,0]
    
    # Door property
    door_diaginertia = [door_mass/12.0*(door_height**2+door_width**2),
                        door_mass/12.0*(door_height**2+door_thickness**2),
                        door_mass/12.0*(door_width**2+door_thickness**2)]
    door_euler = [0,0,0]
    door_pos = [door_thickness*1.1,0,0]

    # Frame property
    frame_width = 100/1000.0
    overlap_door_frame = 10/1000.0
    frame_world_pos = [0, -(0.5-knob_horizontal_location_ratio)*door_width, knob_height]
    frame_euler = [0,0,0]
    frame_mass = 500
    frame_diaginertia = [0.0001, 0.0001, 0.0001]

    # Knob Door Joint Property
    knob_door_joint_pos = [0,0,0]
    knob_door_armature = 0.0001
    knob_door_limited = True
    knob_door_range = [-knob_rot_range, knob_rot_range]
    latch_thickness = 0.015
    latch_height = 0.05
    latch_width = door_width * knob_horizontal_location_ratio + frame_width/3.0
    latch_gap = latch_thickness*1.3
    
    # Knob property
    if knob_type == "pull":
        knob_pos = [door_thickness/2-0.006,0,0]
        # knob_pos = [door_thickness/2,0,0]
    else:
        knob_pos = [door_thickness/2,0,0]
    knob_diaginertia = [knob_mass/12.0*(latch_height**2+latch_width**2),
                        knob_mass/12.0*(latch_height**2+latch_thickness**2),
                        knob_mass/12.0*(latch_width**2+latch_thickness**2)]

    # Frame position
    frame_pos_list = [
        [0, -door_width*knob_horizontal_location_ratio-frame_width/2.0-overlap_door_frame, (door_height+frame_width)/2.0-knob_height],
        [0, door_width-door_width*knob_horizontal_location_ratio+frame_width/2.0+overlap_door_frame, (door_height+frame_width)/2.0-knob_height],
        [0, door_width/2-door_width*knob_horizontal_location_ratio, door_height-knob_height+frame_width/2],
        [-(door_thickness+latch_gap), -door_width*knob_horizontal_location_ratio-frame_width/2.0-overlap_door_frame, (door_height+frame_width)/2.0-knob_height],
        [-(door_thickness+latch_gap), door_width-door_width*knob_horizontal_location_ratio+frame_width/2.0+overlap_door_frame, (door_height+frame_width)/2.0-knob_height],
        [-(door_thickness+latch_gap), door_width/2-door_width*knob_horizontal_location_ratio, door_height-knob_height+frame_width/2]]
    frame_size_list = [
        [door_thickness/2.0, frame_width/2.0, (door_height+frame_width)/2.0],
        [door_thickness/2.0, frame_width/2.0, (door_height+frame_width)/2.0],
        [door_thickness/2.0, door_width/2.0+frame_width, frame_width/2.0],
        [door_thickness/2.0, frame_width/2.0, (door_height+frame_width)/2.0],
        [door_thickness/2.0, frame_width/2.0, (door_height+frame_width)/2.0],
        [door_thickness/2.0, door_width/2.0+frame_width, frame_width/2.0]]

    # Wall property
    sidewall_len = 2000/1000.0
    topwall_width = 1000/1000.0
    wall_thickness = 300/1000.0
    wall_euler = [0,0,0]
    wall_mass = 100
    wall_diaginertia = [0.0001, 0.0001, 0.0001]
    wall_pos_list = [
        [0, -door_width/2.0-frame_width-sidewall_len/2.0+0.03, (door_height+frame_width)/2.0],
        [0, door_width/2.0+frame_width+sidewall_len/2.0, (door_height+frame_width)/2.0],
        [0, 0, door_height+frame_width+topwall_width/2.0]
        ]
    wall_size_list = [
        [wall_thickness/2.0, sidewall_len/2.0, (door_height+frame_width)/2.0],
        [wall_thickness/2.0, sidewall_len/2.0, (door_height+frame_width)/2.0],
        [wall_thickness/2.0, door_width/2.0+frame_width+sidewall_len, topwall_width/2.0]
        ]

    ###################### XML Generator ######################
    # Level 1
    mujoco = e.Mujoco(model="door_knob")

    #########################
    # Level 2
    compiler = e.Compiler(angle="radian")
    include = e.Include(file="../../robot/{}.xml".format(robot_type))
    option = e.Option(gravity=gravity_vector, timestep=0.001)
    visual = e.Visual()
    asset = e.Asset()
    contact = e.Contact()
    default = e.Default()
    worldbody = e.Worldbody()

    mujoco.add_children([
        compiler,
        include,
        option,
        visual,
        asset,
        contact,
        default,
        worldbody
    ])

    ######################
    # Level 3

    # Visual
    visual_list = []
    v_map = e.visual.Map(
        fogstart=3,
        fogend=5,
        force=0.1,
        znear=0.01,
        zfar=10
    )
    v_quality = v.Quality(
        shadowsize=2048
    )
    v_global = v.Global(
        offwidth=256,
        offheight=256
    )  
    visual_list.append(v_map)
    visual_list.append(v_quality)
    visual_list.append(v_global)
    visual.add_children(visual_list)

    # Asset
    if knob_type == "lever":
        knob_scale = [0.0015, 0.0015, 0.0015]
    else:
        knob_scale = [0.001, 0.001, 0.001]
    mesh_knob = []
    fname = '../../{0}/body_{1}.stl'
    name = 'door_knob_{}'
    for i in range(1,knob_parts_n+1):
        mesh_knob.append(e.Mesh(
            file=fname.format(stl_path,i),
            name=name.format(i),
            scale=knob_scale))

    texture_list = []
    texture_name_list = ['wall_geom','frame_geom','door_geom','knob_geom']
    texture_type_list = ['2d', '2d','2d','2d']
    for i in range(len(texture_name_list)):
        texture_list.append(e.Texture(
            builtin="flat",
            name=texture_name_list[i],
            height=32,
            width=32,
            type=texture_type_list[i]
        ))

    #Sky color
    texture_list.append(e.Texture(
        type="skybox",
        builtin="gradient",
        width=128,
        height=128,
        rgb1=[.4,.6,.8],
        rgb2=[0,0,0]
    ))

    #Floor color
    texture_list.append(e.Texture(
        name='texplane',
        type='2d',
        builtin='gradient',
        rgb1=floor_rgb1,
        rgb2=floor_rgb2,
        width=512,
        height=512
    ))

    material_list = []
    material_shininess_list = [paint_shininess, wood_shininess, carpet_shininess, metal_shininess]
    material_specular_list = [paint_specular, wood_specular, carpet_specular, metal_specular]
    for i in range(len(material_name_list)):
        material_list.append(e.Material(
            name=material_name_list[i],
            texture=texture_name_list[i],
            shininess=material_shininess_list[i],
            specular=material_specular_list[i]
        ))

    material_list.append(e.Material(
            name="Floor",
            texture="texplane"
        ))

    asset_list = mesh_knob
    asset_list.extend(texture_list)
    asset_list.extend(material_list)
    asset.add_children(asset_list)


    #Contact
    doorstopper_contact = e.Pair(
        geom1="doorstopper",
        geom2="door0",
        # solref="0.01 1"
    )

    latch_contacts = []
    for i in range(4):
        latch_contacts.append(e.Pair(
            geom1="knob_latch",
            geom2="door_frame_{}".format(i),
            solref="0.01 1"
        ))

    contact_list = []
    # contact_list = [doorstopper_contact]
    if knob_type != "pull":
        contact_list.extend(latch_contacts)
    contact.add_children(contact_list)

    joint_default = e.Joint(
        armature=1,
        damping=1,
        limited="true")

    wall_default = e.Default(class_='wall')
    wall_geom = e.Geom(type='mesh', rgba=wall_rgba)
    wall_default.add_child(wall_geom)

    frame_default = e.Default(class_='frame')
    frame_geom = e.Geom(type='mesh', rgba=frame_rgba)
    frame_default.add_child(frame_geom)

    door_default = e.Default(class_='door')
    door_geom = e.Geom(type='mesh', rgba=door_rgba)
    door_default.add_child(door_geom)

    knob_default = e.Default(class_='door_knob')
    knob_geom = e.Geom(condim=4, type="mesh", rgba=knob_rgba)
    knob_default.add_child(knob_geom)

    robot_default = e.Default(class_='robot')
    robot_joint = e.Joint(damping=robot_damping)
    robot_default.add_children([robot_joint])

    default.add_children([joint_default, wall_default, frame_default, door_default, knob_default, robot_default])

    # Worldbody
    light_condition_list = []
    for i in range(light_n):
        light_condition_list.append(e.Light(
            directional = True,
            diffuse=light_property_list[i]['light_diffuse'],
            pos=light_property_list[i]['light_pos'],
            dir=light_property_list[i]['light_dir']))

    floor_geom = e.Geom(
        name='floor',
        material="Floor",
        pos=[0,0,-0.05],
        size=[15.0,15.0,0.05],
        type='plane')

    #Camera
    camera_list = []
    camera_names = ["camera1", "camera2"]
    for i in range(camera_n):
        camera_list.append(e.Camera(
            name=camera_names[i],
            mode="fixed",
            fovy=camera_fieldview + camera_fieldview_noise[i],
            pos=camera_poses[i],
            euler=camera_ories[i]))
    
    ####### All body obj #######
    body0 = e.Body(
        name='wall_link',
        pos=wall_location,
        childclass='wall')

    body1 = e.Body(
        name='frame_link',
        pos=frame_world_pos,
        childclass='frame')

    body2 = e.Body(
        name='door_link',
        pos=door_pos,
        childclass='door')

    body3 = e.Body(
        name='knob_link'.format(knob_type),
        pos=doorknob_pos,
        childclass='door_knob')

    body4 = e.Body(
        name='{}knob_link'.format(knob_type),
        pos=knob_pos,
        childclass='door_knob')

    worldbody.add_children(light_condition_list)
    worldbody.add_child(floor_geom)
    worldbody.add_children(camera_list)
    worldbody.add_children([body0])

    # ######## Level0 body (origin) ########
    body0_inertial = e.Inertial(
        pos=[0,0,0],
        mass=wall_mass,
        diaginertia=wall_diaginertia)

    body0_geoms = []
    name = 'wall_{}'  
    for i in range(wall_parts_n):
        body0_geoms.append(e.Geom(
            name=name.format(i),
            material=wall_material,
            pos=wall_pos_list[i],
            size=wall_size_list[i],
            type='box',
            euler=frame_euler))

    body0_children_list = [body0_inertial]
    body0_children_list.extend(body0_geoms)
    body0.add_children(body0_children_list)
    body0.add_children([body1])

    ######## Level1 body (Frame) ########
    body1_inertial = e.Inertial(
        pos=[0,0,0],
        mass=frame_mass,
        diaginertia=frame_diaginertia
    )

    body1_geoms = []
    # # door stopper to define the pull/push opening direction
    # body1_geoms.append(e.Geom(
    #     name='doorstopper',
    #     material='Metal',
    #     pos=doorstopper_pos,
    #     size=doorstopper_size,
    #     type='box',
    #     euler=frame_euler))

    # Actual frame
    name = 'door_frame_{}'
    for i in range(frame_parts_n):
        body1_geoms.append(e.Geom(
            name=name.format(i),
            material=frame_material,
            pos=frame_pos_list[i],
            size=frame_size_list[i],
            type='box',
            euler=frame_euler))

    body1_children_list = [body1_inertial]
    body1_children_list.extend(body1_geoms)
    body1.add_children(body1_children_list)
    body1.add_children([body2])

    ######## Level2 body (Door) ########
    body2_joints = e.Joint(
        name='hinge0',
        type='hinge',
        axis=[0, 0, 1],
        armature=door_frame_armature,
        stiffness=door_frame_spring,
        damping=door_frame_damper,
        frictionloss=door_frame_frictionloss,
        limited=door_frame_limited,
        range=door_frame_range,
        pos=door_frame_joint_pos
    )

    body2_inertial = e.Inertial(
        pos=[0, door_width/2.0-door_width*knob_horizontal_location_ratio, door_height/2.0-knob_height],
        mass=door_mass,
        diaginertia=door_diaginertia
    )
    body2_geoms = [
        e.Geom(
        name='door0',
        material=door_material,
        pos=[0, door_width/2.0-door_width*knob_horizontal_location_ratio, door_height/2.0-knob_height],
        size=[door_thickness/2.0, door_width/2.0, door_height/2.0*0.99],
        type="box",
        euler=door_euler
        )]
    
    body2_children_list = [body2_joints]
    body2_children_list.extend(body2_geoms)
    body2_children_list.extend([body2_inertial])
    body2.add_children(body2_children_list)
    body2.add_children([body3])

    ######## Level3 body (Knob Wrapper) ########
    body3_joints = []

    axes = [[0,1,0],[0,0,1]]
    ranges = [[-0.2, 0.3], [-0.5,0.5]]
    for i in range(2):
        body3_joints.append(
        e.Joint(
            name='target{}'.format(i),
            type='slide',
            axis=axes[i],
            armature=0,
            stiffness=0,
            damping=30000,
            frictionloss=0,
            limited="true",
            range=ranges[i]))

    if knob_type != "pull":
        body3_joints.append(e.Joint(
            name='hinge1',
            type='hinge',
            axis=[1, 0, 0],
            armature=knob_door_armature,
            stiffness=knob_door_spring,
            damping=knob_door_damper,
            frictionloss=knob_door_frictionloss,
            limited=knob_door_limited,
            range=knob_door_range,
            pos=knob_door_joint_pos))

    body3_inertial = e.Inertial(
        pos=[0, 0, 0],
        mass=1,
        diaginertia=[0.001,0.001,0.001])

    body3.add_child(body3_inertial)
    body3.add_children(body3_joints)
    body3.add_children([body4])

    ######## Level4 body (Knob Link) ########
    body4_geoms = []
    name = 'door_knob_{}'
    mesh = 'door_knob_{}'
    knobparts_start_idx = 1
    for i in range(knobparts_start_idx ,knob_parts_n+1):
        body4_geoms.append(e.Geom(
            name=name.format(i),
            material=doorknob_material,
            mesh=mesh.format(i),
            euler=knob_euler,
            friction=knob_surface_friction))    
    if knob_type != "pull":
        body4_geoms.append(
            e.Geom(
            name='knob_latch',
            material=material_name_list[randrange(0,3)],
            pos=[-(latch_gap/2.0+door_thickness*2.1), 0, 0],
            size=[latch_thickness/2.0, latch_width, latch_height],
            type="box",
            euler=[0,0,0]))
    body4_inertial = e.Inertial(
        pos=[-(latch_gap/2.0+door_thickness*2.1), 0, 0],
        mass=knob_mass,
        diaginertia=knob_diaginertia)

    body4_children_list = body4_geoms 
    if knob_type != "pull":
        body4_children_list.extend([body4_inertial])
    body4.add_children(body4_children_list)
    
    ######## Write file to Output folder ########
    model_xml = mujoco.xml()
    name = '{0}_{1}_{2}.xml'
    output_path = os.path.join(args.output_dirname, '{0}_{1}{2}'.format(knob_type, robot_type, args.output_name_extention))
    try:
        os.makedirs(output_path)
    except OSError:
        pass
    output_filename = os.path.join(output_path, name.format(dataset_file, knob_type, robot_type))
    if knob_type== "lever" and knob_parts_n < 4:
        # print("parts are too less!!", dataset_file)
        pass
    else:
        with open(output_filename, 'w') as fh:
            fh.write(model_xml)
Beispiel #26
0
def main():

    mujoco = e.Mujoco(model="arm", )
    compiler = e.Compiler(
        angle="degree",
        coordinate="local",
        inertiafromgeom="true",
    )
    default = e.Default()
    option = e.Option(
        integrator="RK4",
        timestep="0.002",
    )
    visual = e.Visual()
    worldbody = e.Worldbody()
    tendon = e.Tendon()
    sensor = e.Sensor()
    actuator = e.Actuator()
    asset = e.Asset()
    mujoco.add_children([
        compiler,
        default,
        option,
        visual,
        worldbody,
        tendon,
        sensor,
        actuator,
        asset,
    ])

    # Standard assets
    utils.populated_ma_asset(asset)

    # Standard floor and lighting
    utils.populate_ma_worldbody(worldbody)

    geom = e.Geom(
        conaffinity="1",
        condim="1",
        contype="1",
        margin="0.001",
        material="geom",
        rgba="0.8 0.6 .4 1",
        solimp=".8 .8 .01",
        solref=".02 1",
    )
    motor = e.Motor(
        ctrllimited="true",
        ctrlrange="-.4 .4",
    )
    default.add_children([
        geom,
        motor,
    ])
    map = e.visual.Map(znear="0.02", )
    visual.add_children([
        map,
    ])
    # light = e.Light(
    #     cutoff="100",
    #     diffuse="1 1 1",
    #     dir="-0 0 -1.3",
    #     directional="true",
    #     exponent="1",
    #     pos="0 0 1.3",
    #     specular=".1 .1 .1",
    # )
    # floor = e.Geom(
    #     conaffinity="1",
    #     condim="3",
    #     material="MatPlane",
    #     name="floor",
    #     pos="0 0 0",
    #     rgba="0.8 0.9 0.8 1",
    #     size="20 20 .125",
    #     type="plane",
    # )
    block_body = e.Body(
        name="block_body",
        pos="0.0 0.0 3.0",
    )
    worldbody.add_children([
        # light,
        # floor,
        block_body,
    ])
    string = e.Spatial(
        name="string",
        width="0.02",
        rgba=".95 .3 .3 1",
        limited="false",
        range="0.5 2",
        stiffness="3700.0",
        damping="100.0",
    )
    tendon.add_children([
        string,
    ])
    ball_sensor = e.sensor.Force(
        name="ball_sensor",
        site="ball_site",
    )
    sensor.add_children([
        ball_sensor,
    ])
    string_actuator = e.General(
        name="string_actuator",
        tendon="string",
        ctrllimited="true",
        gainprm="2000",
        ctrlrange="-2 0",
    )
    actuator.add_children([
        string_actuator,
    ])
    # texture = e.Texture(
    #     builtin="gradient",
    #     height="100",
    #     rgb1=".4 .5 .6",
    #     rgb2="0 0 0",
    #     type="skybox",
    #     width="100",
    # )
    # texgeom = e.Texture(
    #     builtin="flat",
    #     height="1278",
    #     mark="cross",
    #     markrgb="1 1 1",
    #     name="texgeom",
    #     random="0.01",
    #     rgb1="0.8 0.6 0.4",
    #     rgb2="0.8 0.6 0.4",
    #     type="cube",
    #     width="127",
    # )
    # texplane = e.Texture(
    #     builtin="checker",
    #     height="100",
    #     name="texplane",
    #     rgb1="0 0 0",
    #     rgb2="0.8 0.8 0.8",
    #     type="2d",
    #     width="100",
    # )
    # MatPlane = e.Material(
    #     name="MatPlane",
    #     reflectance="0.5",
    #     shininess="1",
    #     specular="1",
    #     texrepeat="60 60",
    #     texture="texplane",
    # )
    # geom_1 = e.Material(
    #     name="geom",
    #     texture="texgeom",
    #     texuniform="true",
    # )
    # asset.add_children([
    #     texture,
    #     texgeom,
    #     texplane,
    #     MatPlane,
    #     geom_1,
    # ])
    block_geom = e.Geom(
        name="block_geom",
        size="0.2 0.2 0.2",
        type="box",
    )
    box_site = e.Site(
        name="box_site",
        pos="0.0 0.0 -0.2",
        size="0.05",
    )
    ball = e.Body(
        name="ball",
        pos="0.0 0.0 -1.0",
    )
    block_body.add_children([
        block_geom,
        box_site,
        ball,
    ])
    site = e.spatial.Site(site="box_site", )
    site_1 = e.spatial.Site(site="ball_site", )
    string.add_children([
        site,
        site_1,
    ])
    ball_joint = e.Joint(
        name="ball_joint",
        pos="0.0 0.0 -0.2",
        type="ball",
        damping="2.0",
    )
    joint = e.Joint(
        type="slide",
        axis="0 0 1",
        damping="2.0",
    )
    joint_1 = e.Joint(
        type="slide",
        axis="0 1 0",
        damping="2.0",
    )
    joint_2 = e.Joint(
        type="slide",
        axis="1 0 0",
        damping="2.0",
    )
    geom_2 = e.Geom(
        pos="0.0 0.0 0.0",
        size="0.2",
        type="sphere",
    )
    ball_site = e.Site(
        name="ball_site",
        pos="0.0 0.0 0.2",
        size="0.05",
    )
    ball.add_children([
        ball_joint,
        joint,
        joint_1,
        joint_2,
        geom_2,
        ball_site,
    ])

    model_xml = mujoco.xml()

    # Output
    out_path = os.path.join("..", "muscledagents", "envs", "mujoco", "assets",
                            "ballonstring.xml")
    with open(out_path, 'w') as fh:
        fh.write(model_xml)
Beispiel #27
0
def get_leg(
    name,
    hip_width=0.2,
    hip_angle=0.0,
    thigh_length=0.4,
    shin_length=0.6,
    leg_radius=0.08
):

    joint_geom_radius = leg_radius * 1.1  # For tendons
    joint_geom_color = [0.3, 0.9, 0.3, 0.4]  # Translucent green

    hip = e.Body(
        name=name,
        pos=[0, 0, 0],
        euler=[0, 0, hip_angle]
    )
    hip_geom = e.Geom(
        fromto=[0, 0, 0, hip_width, 0, 0],
        name="hip_geom_"+name,
        size=leg_radius,
        type="capsule"
    )
    hip_insertion_x = hip_width * 0.1
    left_flex_hip_insertion = e.Site(
        name="left_flex_hip_insertion_"+name,
        pos=[hip_insertion_x, leg_radius, 0.0],
        size=leg_radius / 2
    )
    right_flex_hip_insertion = e.Site(
        name="right_flex_hip_insertion_"+name,
        pos=[hip_insertion_x, -leg_radius, 0.0],
        size=leg_radius / 2
    )
    hip_joint_geom = e.Geom(
        name="hip_joint_geom_"+name,
        fromto=[hip_width, 0.0, leg_radius, hip_width, 0.0, -leg_radius],
        type="cylinder",
        size=joint_geom_radius,
        rgba=joint_geom_color
    )
    thigh_body = e.Body(
        name="thigh_body_"+name,
        pos=[hip_width, 0, 0]
    )
    hip.add_children([
        hip_geom,
        left_flex_hip_insertion,
        right_flex_hip_insertion,
        hip_joint_geom,
        thigh_body
    ])

    # thigh_body
    hip_joint = e.Joint(
        axis=[0, 0, 1],
        name="hip_joint_"+name,
        pos=[0.0, 0.0, 0.0],
        range=[-30, 30],
        type="hinge"
    )
    thigh_geom = e.Geom(
        fromto=[0.0, 0.0, 0.0, thigh_length, 0.0, 0.0],
        name="thigh_geom_"+name,
        size=leg_radius,
        type="capsule"
    )
    upper_insertion_x = thigh_length * 0.3
    flex_thigh_insert_x = thigh_length * 0.8
    quad_u_insertion = e.Site(
        name="quad_u_insertion_"+name,
        pos=[upper_insertion_x, 0.0, leg_radius],
        size=leg_radius / 2
    )
    hamstring_u_insertion = e.Site(
        name="hamstring_u_insertion_"+name,
        pos=[upper_insertion_x, 0.0, -leg_radius],
        size=leg_radius / 2
    )
    left_flex_thigh_insertion = e.Site(
        name="left_flex_thigh_insertion_"+name,
        pos=[flex_thigh_insert_x, leg_radius, 0.0],
        size=leg_radius / 2
    )
    right_flex_thigh_insertion = e.Site(
        name="right_flex_thigh_insertion_"+name,
        pos=[flex_thigh_insert_x, -leg_radius, 0.0],
        size=leg_radius / 2
    )
    knee_geom = e.Geom(
        name="knee_geom_"+name,
        fromto=[thigh_length, leg_radius, 0.0, thigh_length, -leg_radius, 0.0],
        type="cylinder",
        size=joint_geom_radius,
        rgba=joint_geom_color
    )
    knee_top_side = e.Site(
        name="knee_top_side_"+name,
        pos=[thigh_length, 0.0, leg_radius * 2],
        rgba=[0, 0, 0, 0],
        size=leg_radius / 8
    )
    shin_body = e.Body(
        name="shin_body_"+name,
        pos=[thigh_length, 0.0, 0]
    )
    thigh_body.add_children([
        hip_joint,
        thigh_geom,
        left_flex_thigh_insertion,
        right_flex_thigh_insertion,
        quad_u_insertion,
        hamstring_u_insertion,
        knee_geom,
        knee_top_side,
        shin_body
    ])

    # shin_body
    knee_joint = e.Joint(
        axis=[0, 1, 0],
        name="knee_joint_"+name,
        pos=[0.0, 0.0, 0.0],
        range=[30, 70],
        type="hinge"
    )
    shin_geom = e.Geom(
        fromto=[0.0, 0.0, 0.0, shin_length, 0.0, 0.0],
        name="shin_geom_"+name,
        size=leg_radius,
        type="capsule"
    )
    lower_insertion_x = shin_length * 0.2
    quad_l_insertion = e.Site(
        name="quad_l_insertion_"+name,
        pos=[lower_insertion_x, 0.0, leg_radius],
        size=leg_radius / 2
    )
    hamstring_l_insertion = e.Site(
        name="hamstring_l_insertion_"+name,
        pos=[lower_insertion_x, 0.0, -leg_radius],
        size=leg_radius / 2
    )
    shin_body.add_children([
        knee_joint,
        shin_geom,
        quad_l_insertion,
        hamstring_l_insertion
    ])

    # Tendons
    tendons = []
    tendon_width = 0.04
    tendon_color = [0.95, 0.3, 0.3, 1]
    tendon_stiffness = 100
    left_hip_flex = e.Spatial(
        name="left_hip_flex_"+name,
        width=tendon_width,
        rgba=tendon_color,
        stiffness=tendon_stiffness
    )
    lhs1 = e.spatial.Site(site=left_flex_hip_insertion.name)
    lh_geom = e.spatial.Geom(geom=hip_joint_geom.name)
    lhs2 = e.spatial.Site(site=left_flex_thigh_insertion.name)
    left_hip_flex.add_children([
        lhs1,
        lh_geom,
        lhs2
    ])
    right_hip_flex = e.Spatial(
        name="right_hip_flex_"+name,
        width=tendon_width,
        rgba=tendon_color,
        stiffness=tendon_stiffness
    )
    rhs1 = e.spatial.Site(site=right_flex_hip_insertion.name)
    rh_geom = e.spatial.Geom(geom=hip_joint_geom.name)
    rhs2 = e.spatial.Site(site=right_flex_thigh_insertion.name)
    right_hip_flex.add_children([
        rhs1,
        rh_geom,
        rhs2
    ])
    quad = e.Spatial(
        name="quad_"+name,
        width=tendon_width,
        rgba=tendon_color,
        stiffness=tendon_stiffness
    )
    qs1 = e.spatial.Site(site=quad_u_insertion.name)
    q_geom = e.spatial.Geom(
        geom=knee_geom.name,
        sidesite=knee_top_side.name
    )
    qs2 = e.spatial.Site(site=quad_l_insertion.name)
    quad.add_children([
        qs1,
        q_geom,
        qs2
    ])
    hamstring = e.Spatial(
        name="hamstring_"+name,
        width=tendon_width,
        rgba=tendon_color,
        stiffness=tendon_stiffness
    )
    hs1 = e.spatial.Site(site=hamstring_u_insertion.name)
    h_geom = e.spatial.Geom(geom=knee_geom.name)
    hs2 = e.spatial.Site(site=hamstring_l_insertion.name)
    hamstring.add_children([
        hs1,
        h_geom,
        hs2
    ])
    tendons.extend([
        left_hip_flex,
        right_hip_flex,
        quad,
        hamstring
    ])

    # Actuators
    # TODO: Replace with Muscles once 2.0 is released
    actuators = []
    act_gain = 50  # Max 100N output
    act_ctrl_range = [-1.0, 0.0]
    ctrllimited = "true"
    quad_act = e.General(
        name="quad_act_"+name,
        tendon=quad.name,
        ctrllimited=ctrllimited,
        gainprm=act_gain,
        ctrlrange=act_ctrl_range
    )
    hamstring_act = e.General(
        name="hamstring_act_"+name,
        tendon=hamstring.name,
        ctrllimited=ctrllimited,
        gainprm=act_gain,
        ctrlrange=act_ctrl_range
    )
    right_hip_flex_act = e.General(
        name="right_hip_flex_act_"+name,
        tendon=right_hip_flex.name,
        ctrllimited=ctrllimited,
        gainprm=act_gain,
        ctrlrange=act_ctrl_range
    )
    left_hip_flex_act = e.General(
        name="left_hip_flex_act_"+name,
        tendon=left_hip_flex.name,
        ctrllimited=ctrllimited,
        gainprm=act_gain,
        ctrlrange=act_ctrl_range
    )
    actuators.extend([
        quad_act,
        hamstring_act,
        right_hip_flex_act,
        left_hip_flex_act
    ])

    return hip, tendons, actuators
Beispiel #28
0
def main():
    #########################
    # Level 1
    mujoco = e.Mujoco(model="empty")

    #########################
    # Level 2
    option = e.Option(integrator="RK4", timestep=0.01)
    asset = e.Asset()
    worldbody = e.Worldbody()

    mujoco.add_children([option, asset, worldbody])

    ######################
    # Level 3

    # Asset
    tex1 = e.Texture(builtin="gradient",
                     height=100,
                     rgb1=[1, 1, 1],
                     rgb2=[0, 0, 0],
                     type="skybox",
                     width=100)
    tex2 = e.Texture(builtin="flat",
                     height=1278,
                     mark="cross",
                     markrgb=[1, 1, 1],
                     name="texgeom",
                     random=0.01,
                     rgb1=[0.8, 0.6, 0.4],
                     rgb2=[0.8, 0.6, 0.4],
                     type="cube",
                     width=127)
    tex3 = e.Texture(builtin="checker",
                     height=[100],
                     name="texplane",
                     rgb1=[0, 0, 0],
                     rgb2=[0.8, 0.8, 0.8],
                     type="2d",
                     width=100)
    mat1 = e.Material(name="MatPlane",
                      reflectance=0.5,
                      shininess=1,
                      specular=1,
                      texrepeat=[60, 60],
                      texture="texplane")
    mat2 = e.Material(name="geom", texture="texgeom", texuniform=True)
    asset.add_children([
        tex1,
        tex2,
        tex3,
        mat1,
        mat2,
    ])

    # Worldbody
    light = e.Light(cutoff=100,
                    diffuse=[1, 1, 1],
                    dir=[-0, 0, -1.3],
                    directional=True,
                    exponent=1,
                    pos=[0, 0, 1.3],
                    specular=[.1, .1, .1])
    floor_geom = e.Geom(conaffinity=1,
                        condim=3,
                        material="MatPlane",
                        name="floor",
                        pos=[0, 0, 0],
                        rgba=[0.8, 0.9, 0.8, 1],
                        size=[40, 40, 40],
                        type="plane")
    worldbody.add_children([
        light,
        floor_geom,
    ])

    model_xml = mujoco.xml()

    # Output
    with open('empty-gen.xml', 'w') as fh:
        fh.write(model_xml)
Beispiel #29
0
def main():

    mujoco = e.Mujoco(model="reacher", )
    compiler = e.Compiler(
        angle="radian",
        inertiafromgeom="true",
    )
    default = e.Default()
    option = e.Option(
        gravity="0 0 -9.81",
        integrator="RK4",
        timestep="0.01",
    )
    worldbody = e.Worldbody()
    actuator = e.Actuator()
    mujoco.add_children([
        compiler,
        default,
        option,
        worldbody,
        actuator,
    ])
    joint = e.Joint(
        armature="1",
        damping="1",
        limited="true",
    )
    geom = e.Geom(
        contype="0",
        friction="1 0.1 0.1",
        rgba="0.7 0.7 0 1",
    )
    default.add_children([
        joint,
        geom,
    ])
    ground = e.Geom(
        conaffinity="0",
        contype="0",
        name="ground",
        pos="0 0 0",
        rgba="0.9 0.9 0.9 1",
        size="1 1 10",
        type="plane",
    )
    sideS = e.Geom(
        conaffinity="0",
        fromto="-.3 -.3 .01 .3 -.3 .01",
        name="sideS",
        rgba="0.9 0.4 0.6 1",
        size=".02",
        type="capsule",
    )
    sideE = e.Geom(
        conaffinity="0",
        fromto=" .3 -.3 .01 .3  .3 .01",
        name="sideE",
        rgba="0.9 0.4 0.6 1",
        size=".02",
        type="capsule",
    )
    sideN = e.Geom(
        conaffinity="0",
        fromto="-.3  .3 .01 .3  .3 .01",
        name="sideN",
        rgba="0.9 0.4 0.6 1",
        size=".02",
        type="capsule",
    )
    sideW = e.Geom(
        conaffinity="0",
        fromto="-.3 -.3 .01 -.3 .3 .01",
        name="sideW",
        rgba="0.9 0.4 0.6 1",
        size=".02",
        type="capsule",
    )
    root = e.Geom(
        conaffinity="0",
        contype="0",
        fromto="0 0 0 0 0 0.02",
        name="root",
        rgba="0.9 0.4 0.6 1",
        size=".011",
        type="cylinder",
    )
    body0 = e.Body(
        name="body0",
        pos="0 0 .01",
    )
    target = e.Body(
        name="target",
        pos=".1 -.1 .01",
    )
    worldbody.add_children([
        ground,
        sideS,
        sideE,
        sideN,
        sideW,
        root,
        body0,
        target,
    ])
    motor = e.Motor(
        ctrllimited="true",
        ctrlrange="-1.0 1.0",
        gear="200.0",
        joint="joint0",
    )
    motor_1 = e.Motor(
        ctrllimited="true",
        ctrlrange="-1.0 1.0",
        gear="200.0",
        joint="joint1",
    )
    actuator.add_children([
        motor,
        motor_1,
    ])
    link0 = e.Geom(
        fromto="0 0 0 0.1 0 0",
        name="link0",
        rgba="0.0 0.4 0.6 1",
        size=".01",
        type="capsule",
    )
    joint0 = e.Joint(
        axis="0 0 1",
        limited="false",
        name="joint0",
        pos="0 0 0",
        type="hinge",
    )
    body1 = e.Body(
        name="body1",
        pos="0.1 0 0",
    )
    body0.add_children([
        link0,
        joint0,
        body1,
    ])
    target_x = e.Joint(
        armature="0",
        axis="1 0 0",
        damping="0",
        limited="true",
        name="target_x",
        pos="0 0 0",
        range="-.27 .27",
        ref=".1",
        stiffness="0",
        type="slide",
    )
    target_y = e.Joint(
        armature="0",
        axis="0 1 0",
        damping="0",
        limited="true",
        name="target_y",
        pos="0 0 0",
        range="-.27 .27",
        ref="-.1",
        stiffness="0",
        type="slide",
    )
    target_1 = e.Geom(
        conaffinity="0",
        contype="0",
        name="target",
        pos="0 0 0",
        rgba="0.9 0.2 0.2 1",
        size=".009",
        type="sphere",
    )
    target.add_children([
        target_x,
        target_y,
        target_1,
    ])
    joint1 = e.Joint(
        axis="0 0 1",
        limited="true",
        name="joint1",
        pos="0 0 0",
        range="-3.0 3.0",
        type="hinge",
    )
    link1 = e.Geom(
        fromto="0 0 0 0.1 0 0",
        name="link1",
        rgba="0.0 0.4 0.6 1",
        size=".01",
        type="capsule",
    )
    fingertip = e.Body(
        name="fingertip",
        pos="0.11 0 0",
    )
    body1.add_children([
        joint1,
        link1,
        fingertip,
    ])
    fingertip_1 = e.Geom(
        contype="0",
        name="fingertip",
        pos="0 0 0",
        rgba="0.0 0.8 0.6 1",
        size=".01",
        type="sphere",
    )
    fingertip.add_children([
        fingertip_1,
    ])

    model_xml = mujoco.xml()

    # Output
    with open('reacher_gen.xml', 'w') as fh:
        fh.write(model_xml)
def get_mjc_box(pos, size, rgba=[0.5, 0.5, 0.5, 1]):
    body = e.Body(pos=pos)
    geom = e.Geom(type="box", size=size, rgba=rgba)
    body.add_children([geom])

    return body