<mujoco model="go2">
  <compiler angle="radian" meshdir="../" autolimits="true"/>

  <option cone="elliptic" impratio="100"/>

  <default>
    <default class="go2">
      <geom friction="0.6" margin="0.001" condim="1"/>
      <joint axis="0 1 0" damping="0" armature="0.01" frictionloss="0.2"/>
      <motor ctrlrange="-23.7 23.7"/>
      <default class="abduction">
        <joint axis="1 0 0" range="-1.0472 1.0472"/>
      </default>
      <default class="hip">
        <default class="front_hip">
          <joint range="-1.5708 3.4907"/>
        </default>
        <default class="back_hip">
          <joint range="-0.5236 4.5379"/>
        </default>
      </default>
      <default class="knee">
        <joint range="-2.7227 -0.83776"/>
        <motor ctrlrange="-45.43 45.43"/>
      </default>
      <default class="visual">
        <geom type="mesh" contype="0" conaffinity="0" group="2"/>
      </default>
      <default class="collision">
        <geom group="3"/>
        <default class="foot">
          <geom size="0.022" pos="-0.002 0 -0.213" priority="1" solimp="0.015 1 0.031" condim="6"
            friction="0.8 0.02 0.01"/>
        </default>
      </default>
    </default>
  </default>

  <asset>
    <hfield name="terrain"  nrow="300" ncol="300" size="5 5 1. 0.1"/>
    <material name="metal" rgba=".9 .95 .95 1"/>
    <material name="black" rgba="0 0 0 1"/>
    <material name="white" rgba="1 1 1 1"/>
    <material name="gray" rgba="0.671705 0.692426 0.774270 1"/>
    <texture type="skybox" builtin="gradient" rgb1="0.3 0.5 0.7" rgb2="0 0 0" width="512" height="3072"/>
    <texture type="2d" name="groundplane" builtin="checker" mark="edge" rgb1="0.2 0.3 0.4" rgb2="0.1 0.2 0.3" markrgb="0.8 0.8 0.8" width="300" height="300"/>
    <material name="groundplane" texture="groundplane" texuniform="true" texrepeat="5 5" reflectance="0.2"/>

    <mesh file="go2_assets/obj/base_0.obj"/>
    <mesh file="go2_assets/obj/base_1.obj"/>
    <mesh file="go2_assets/obj/base_2.obj"/>
    <mesh file="go2_assets/obj/base_3.obj"/>
    <mesh file="go2_assets/obj/base_4.obj"/>
    <mesh file="go2_assets/obj/hip_0.obj"/>
    <mesh file="go2_assets/obj/hip_1.obj"/>
    <mesh file="go2_assets/obj/thigh_0.obj"/>
    <mesh file="go2_assets/obj/thigh_1.obj"/>
    <mesh file="go2_assets/obj/thigh_mirror_0.obj"/>
    <mesh file="go2_assets/obj/thigh_mirror_1.obj"/>
    <mesh file="go2_assets/obj/calf_0.obj"/>
    <mesh file="go2_assets/obj/calf_1.obj"/>
    <mesh file="go2_assets/obj/calf_mirror_0.obj"/>
    <mesh file="go2_assets/obj/calf_mirror_1.obj"/>
    <mesh file="go2_assets/obj/foot.obj"/>
  </asset>

  <worldbody>
    <geom name="heightfield" pos="0.0 0.0 -0.1" type="hfield" hfield="terrain"/>
    <geom name="floor" size="0 0 0.05" type="plane" material="groundplane"/>
    <body name="base" pos="0 0 0.445" childclass="go2">
      <light pos="0.0 0.0 2.5" />
      <camera name="front_camera" mode="fixed" pos="0.321618 0.033305 0.081622" euler="1.57079632679 0. 0." resolution="640 480" fovy="45."/>
      <inertial pos="0.021112 0 -0.005366" quat="-0.000543471 0.713435 -0.00173769 0.700719" mass="6.921"
        diaginertia="0.107027 0.0980771 0.0244531"/>
      <freejoint/>
      <geom mesh="base_0" material="black" class="visual"/>
      <geom mesh="base_1" material="black" class="visual"/>
      <geom mesh="base_2" material="black" class="visual"/>
      <geom mesh="base_3" material="white" class="visual"/>
      <geom mesh="base_4" material="gray" class="visual"/>
      <geom size="0.1881 0.04675 0.057" type="box" class="collision"/>
      <geom size="0.05 0.045" pos="0.285 0 0.01" type="cylinder" class="collision"/>
      <geom size="0.047" pos="0.293 0 -0.06" class="collision"/>
      <site name="imu" pos="-0.02557 0 0.04232"/>
      
      <body name="FR_hip" pos="0.1934 -0.0465 0">
        <inertial pos="-0.0054 -0.00194 -0.000105" quat="0.498237 0.505462 0.499245 0.497014" mass="0.678"
          diaginertia="0.00088403 0.000596003 0.000479967"/>
        <joint name="FR_hip_joint" class="abduction"/>
        <geom mesh="hip_0" material="metal" class="visual" quat="4.63268e-05 1 0 0"/>
        <geom mesh="hip_1" material="gray" class="visual" quat="4.63268e-05 1 0 0"/>
        <geom size="0.046 0.02" pos="0 -0.08 0" quat="0.707107 0.707107 0 0" type="cylinder" class="collision"/>
        <body name="FR_thigh" pos="0 -0.0955 0">
          <inertial pos="-0.00374 0.0223 -0.0327" quat="0.551623 -0.0200632 0.0847635 0.829533" mass="1.152"
            diaginertia="0.00594973 0.00584149 0.000878787"/>
          <joint name="FR_thigh_joint" class="front_hip"/>
          <geom mesh="thigh_mirror_0" material="metal" class="visual"/>
          <geom mesh="thigh_mirror_1" material="gray" class="visual"/>
          <geom size="0.1065 0.01225 0.017" pos="0 0 -0.1065" quat="0.707107 0 0.707107 0" type="box" class="collision"/>
          <body name="FR_calf" pos="0 0 -0.213">
            <inertial pos="0.00629595 0.000622121 -0.141417" quat="0.703508 -0.00450087 0.00154099 0.710672"
              mass="0.241352" diaginertia="0.0014901 0.00146356 5.31397e-05"/>
            <joint name="FR_calf_joint" class="knee"/>
            <geom mesh="calf_mirror_0" material="gray" class="visual"/>
            <geom mesh="calf_mirror_1" material="black" class="visual"/>
            <geom size="0.013 0.06" pos="0.01 0 -0.06" quat="0.995004 0 -0.0998334 0" type="cylinder" class="collision"/>
            <geom size="0.011 0.0325" pos="0.02 0 -0.148" quat="0.999688 0 0.0249974 0" type="cylinder" class="collision"/>
            <geom pos="0 0 -0.213" mesh="foot" class="visual" material="black"/>
            <geom name="FR" class="foot"/>
            <site name="FR_foot" pos="0 0 -0.213" size="0.02"/>
          </body>
        </body>
      </body>

      <body name="FL_hip" pos="0.1934 0.0465 0">
        <inertial pos="-0.0054 0.00194 -0.000105" quat="0.497014 0.499245 0.505462 0.498237" mass="0.678"
          diaginertia="0.00088403 0.000596003 0.000479967"/>
        <joint name="FL_hip_joint" class="abduction"/>
        <geom mesh="hip_0" material="metal" class="visual"/>
        <geom mesh="hip_1" material="gray" class="visual"/>
        <geom size="0.046 0.02" pos="0 0.08 0" quat="1 1 0 0" type="cylinder" class="collision"/>
        <body name="FL_thigh" pos="0 0.0955 0">
          <inertial pos="-0.00374 -0.0223 -0.0327" quat="0.829533 0.0847635 -0.0200632 0.551623" mass="1.152"
            diaginertia="0.00594973 0.00584149 0.000878787"/>
          <joint name="FL_thigh_joint" class="front_hip"/>
          <geom mesh="thigh_0" material="metal" class="visual"/>
          <geom mesh="thigh_1" material="gray" class="visual"/>
          <geom size="0.1065 0.01225 0.017" pos="0 0 -0.1065" quat="0.707107 0 0.707107 0" type="box" class="collision"/>
          <body name="FL_calf" pos="0 0 -0.213">
            <inertial pos="0.00629595 -0.000622121 -0.141417" quat="0.710672 0.00154099 -0.00450087 0.703508"
              mass="0.241352" diaginertia="0.0014901 0.00146356 5.31397e-05"/>
            <joint name="FL_calf_joint" class="knee"/>
            <geom mesh="calf_0" material="gray" class="visual"/>
            <geom mesh="calf_1" material="black" class="visual"/>
            <geom size="0.012 0.06" pos="0.008 0 -0.06" quat="0.994493 0 -0.104807 0" type="cylinder" class="collision"/>
            <geom size="0.011 0.0325" pos="0.02 0 -0.148" quat="0.999688 0 0.0249974 0" type="cylinder" class="collision"/>
            <geom pos="0 0 -0.213" mesh="foot" class="visual" material="black"/>
            <geom name="FL" class="foot"/>
            <site name="FL_foot" pos="0 0 -0.213" size="0.02"/>

          </body>
        </body>
      </body>

      <body name="RR_hip" pos="-0.1934 -0.0465 0">
        <inertial pos="0.0054 -0.00194 -0.000105" quat="0.499245 0.497014 0.498237 0.505462" mass="0.678"
          diaginertia="0.00088403 0.000596003 0.000479967"/>
        <joint name="RR_hip_joint" class="abduction"/>
        <geom mesh="hip_0" material="metal" class="visual" quat="2.14617e-09 4.63268e-05 4.63268e-05 -1"/>
        <geom mesh="hip_1" material="gray" class="visual" quat="2.14617e-09 4.63268e-05 4.63268e-05 -1"/>
        <geom size="0.046 0.02" pos="0 -0.08 0" quat="0.707107 0.707107 0 0" type="cylinder" class="collision"/>
        <body name="RR_thigh" pos="0 -0.0955 0">
          <inertial pos="-0.00374 0.0223 -0.0327" quat="0.551623 -0.0200632 0.0847635 0.829533" mass="1.152"
            diaginertia="0.00594973 0.00584149 0.000878787"/>
          <joint name="RR_thigh_joint" class="back_hip"/>
          <geom mesh="thigh_mirror_0" material="metal" class="visual"/>
          <geom mesh="thigh_mirror_1" material="gray" class="visual"/>
          <geom size="0.1065 0.01225 0.017" pos="0 0 -0.1065" quat="0.707107 0 0.707107 0" type="box" class="collision"/>
          <body name="RR_calf" pos="0 0 -0.213">
            <inertial pos="0.00629595 0.000622121 -0.141417" quat="0.703508 -0.00450087 0.00154099 0.710672"
              mass="0.241352" diaginertia="0.0014901 0.00146356 5.31397e-05"/>
            <joint name="RR_calf_joint" class="knee"/>
            <geom mesh="calf_mirror_0" material="gray" class="visual"/>
            <geom mesh="calf_mirror_1" material="black" class="visual"/>
            <geom size="0.013 0.06" pos="0.01 0 -0.06" quat="0.995004 0 -0.0998334 0" type="cylinder" class="collision"/>
            <geom size="0.011 0.0325" pos="0.02 0 -0.148" quat="0.999688 0 0.0249974 0" type="cylinder" class="collision"/>
            <geom pos="0 0 -0.213" mesh="foot" class="visual" material="black"/>
            <geom name="RR" class="foot"/>
            <site name="RR_foot" pos="0 0 -0.213" size="0.02"/>
          </body>
        </body>
      </body>

      <body name="RL_hip" pos="-0.1934 0.0465 0">
        <inertial pos="0.0054 0.00194 -0.000105" quat="0.505462 0.498237 0.497014 0.499245" mass="0.678"
          diaginertia="0.00088403 0.000596003 0.000479967"/>
        <joint name="RL_hip_joint" class="abduction"/>
        <geom mesh="hip_0" material="metal" class="visual" quat="4.63268e-05 0 1 0"/>
        <geom mesh="hip_1" material="gray" class="visual" quat="4.63268e-05 0 1 0"/>
        <geom size="0.046 0.02" pos="0 0.08 0" quat="0.707107 0.707107 0 0" type="cylinder" class="collision"/>
        <body name="RL_thigh" pos="0 0.0955 0">
          <inertial pos="-0.00374 -0.0223 -0.0327" quat="0.829533 0.0847635 -0.0200632 0.551623" mass="1.152"
            diaginertia="0.00594973 0.00584149 0.000878787"/>
          <joint name="RL_thigh_joint" class="back_hip"/>
          <geom mesh="thigh_0" material="metal" class="visual"/>
          <geom mesh="thigh_1" material="gray" class="visual"/>
          <geom size="0.1065 0.01225 0.017" pos="0 0 -0.1065" quat="0.707107 0 0.707107 0" type="box" class="collision"/>
          <body name="RL_calf" pos="0 0 -0.213">
            <inertial pos="0.00629595 -0.000622121 -0.141417" quat="0.710672 0.00154099 -0.00450087 0.703508"
              mass="0.241352" diaginertia="0.0014901 0.00146356 5.31397e-05"/>
            <joint name="RL_calf_joint" class="knee"/>
            <geom mesh="calf_0" material="gray" class="visual"/>
            <geom mesh="calf_1" material="black" class="visual"/>
            <geom size="0.013 0.06" pos="0.01 0 -0.06" quat="0.995004 0 -0.0998334 0" type="cylinder" class="collision"/>
            <geom size="0.011 0.0325" pos="0.02 0 -0.148" quat="0.999688 0 0.0249974 0" type="cylinder" class="collision"/>
            <geom pos="0 0 -0.213" mesh="foot" class="visual" material="black"/>
            <geom name="RL" class="foot"/>
            <site name="RL_foot" pos="0 0 -0.213" size="0.02"/>

          </body>
        </body>
      </body>



    </body>
  </worldbody>

  <actuator>
    <motor class="abduction" name="FR_hip" joint="FR_hip_joint"/>
    <motor class="hip" name="FR_thigh" joint="FR_thigh_joint"/>
    <motor class="knee" name="FR_calf" joint="FR_calf_joint"/>
    <motor class="abduction" name="FL_hip" joint="FL_hip_joint"/>
    <motor class="hip" name="FL_thigh" joint="FL_thigh_joint"/>
    <motor class="knee" name="FL_calf" joint="FL_calf_joint"/>
    <motor class="abduction" name="RR_hip" joint="RR_hip_joint"/>
    <motor class="hip" name="RR_thigh" joint="RR_thigh_joint"/>
    <motor class="knee" name="RR_calf" joint="RR_calf_joint"/>
    <motor class="abduction" name="RL_hip" joint="RL_hip_joint"/>
    <motor class="hip" name="RL_thigh" joint="RL_thigh_joint"/>
    <motor class="knee" name="RL_calf" joint="RL_calf_joint"/>
  </actuator>

  <sensor>
    <!-- IMU -->
    <accelerometer name="imu_accel" site="imu"/>
    <gyro name="imu_gyro" site="imu"/>
    <!-- Contact sensors for the feet -->
    <touch name="FR_foot_contact" site="FR_foot"/>
    <touch name="FL_foot_contact" site="RL_foot"/>
    <touch name="RR_foot_contact" site="RR_foot"/>
    <touch name="RL_foot_contact" site="RL_foot"/>
  </sensor>

  <keyframe>
    <key name="home" qpos="0 0 0.27 1 0 0 0 0 0.9 -1.8 0 0.9 -1.8 0 0.9 -1.8 0 0.9 -1.8"
      ctrl="0 0.9 -1.8 0 0.9 -1.8 0 0.9 -1.8 0 0.9 -1.8"/>
  </keyframe>
</mujoco>