cmvr-es/model/xiaoyan_description/right_arm_eye_to_hand.xml

810 lines
29 KiB
XML
Raw Normal View History

<?xml version="1.0" encoding="UTF-8"?>
<mujoco model="right_arm_eye_to_hand">
<!-- =========================================================
Compiler
========================================================= -->
<compiler angle="radian"
meshdir="meshes/"/>
<option timestep="0.001"
gravity="0 0 -9.81"
integrator="implicitfast"/>
<default>
<joint damping="10"
armature="0.001"/>
</default>
<!-- =========================================================
Visual
========================================================= -->
<visual>
<global offwidth="1280"
offheight="720"/>
<map znear="0.02"
zfar="5"/>
</visual>
<!-- =========================================================
Assets
========================================================= -->
<asset>
<!-- ================= Right arm meshes ================= -->
<mesh name="PELVIS_S"
file="PELVIS_S.STL"/>
<mesh name="R_SHOULDER_P_S"
file="R_SHOULDER_P_S.STL"/>
<mesh name="R_SHOULDER_R_S"
file="R_SHOULDER_R_S.STL"/>
<mesh name="R_SHOULDER_Y_S"
file="R_SHOULDER_Y_S.STL"/>
<mesh name="R_ELBOW_R_S"
file="R_ELBOW_R_S.STL"/>
<mesh name="R_WRIST_P_S"
file="R_WRIST_P_S.STL"/>
<mesh name="R_WRIST_Y_S"
file="R_WRIST_Y_S.STL"/>
<mesh name="R_WRIST_R_S"
file="R_WRIST_R_S.STL"/>
<!-- ================= Skybox ================= -->
<texture name="skybox"
type="skybox"
builtin="gradient"
rgb1="0.4 0.6 0.8"
rgb2="0 0 0"
width="512"
height="512"/>
<!-- ================= Floor ================= -->
<texture name="grid"
type="2d"
builtin="checker"
width="512"
height="512"
rgb1="0.2 0.3 0.4"
rgb2="0.1 0.2 0.3"
mark="cross"
markrgb="0.8 0.8 0.8"/>
<material name="grid_floor"
texture="grid"
texrepeat="5 5"
rgba="1 1 1 1"
emission="0.9"
specular="0.5"
shininess="1"
reflectance="0.3"/>
<!-- ================= AprilTag =================
tag36h11 family
Hand Tag H:
ID = 0
texture = tag36_11.png
Screen Tag G:
ID = 1
texture = tag36_11_00001.png
Both texture planes are 37.5 mm x 37.5 mm. The PNG quiet zone
leaves a 30 mm x 30 mm detectable black tag region.
=========================================== -->
<!-- Hand Tag H : tag36h11 ID 0 -->
<texture name="hand_apriltag_tex"
type="2d"
file="../april_tag/tag36_11.png"/>
<!-- The +Z face is the visible face for external_touch_cam. -->
<material name="hand_apriltag_mat"
texture="hand_apriltag_tex"
texrepeat="1 1"
rgba="1 1 1 1"
emission="1"
specular="0"
shininess="0"
reflectance="0"/>
<!-- Screen Tag G : tag36h11 ID 1 -->
<texture name="screen_apriltag_tex"
type="2d"
file="../april_tag/tag36_11_00001.png"/>
<material name="screen_apriltag_mat"
texture="screen_apriltag_tex"
texrepeat="-1 -1"
rgba="1 1 1 1"
emission="1"
specular="0"
shininess="0"
reflectance="0"/>
<!-- ================= Screen material ================= -->
<material name="screen_material"
rgba="0.04 0.05 0.06 1"
specular="0.25"
shininess="0.4"/>
<material name="screen_frame_material"
rgba="0.15 0.15 0.15 1"
specular="0.2"
shininess="0.3"/>
</asset>
<!-- =========================================================
World
========================================================= -->
<worldbody>
<!-- =====================================================
Ground
===================================================== -->
<geom name="floor"
type="plane"
pos="0 0 0"
size="0 0 0.05"
material="grid_floor"
condim="3"
friction="1 0.005 0.0001"/>
<!-- =====================================================
Robot support
===================================================== -->
<geom name="robot_stand_visual"
size="0.05 0.6"
pos="0 0 0.6"
type="cylinder"
contype="0"
conaffinity="0"
group="1"
density="0"
rgba="0.25 0.25 0.28 1"/>
<!-- =====================================================
Fixed touch screen
screen center:
world = [0, -1.05, 1.25]
screen size:
width = 500 mm
height = 300 mm
Front surface points toward +Y,
i.e. toward robot.
Screen plane for Eye-to-Hand:
approximately y = -1.045
normal toward robot:
n_world = [0, 1, 0]
===================================================== -->
<body name="touch_screen"
pos="0.62 -0.2 0.95"
euler="0 0.1 1.57">
<!-- Back/frame -->
<geom name="screen_frame"
type="box"
size="0.265 0.012 0.165"
material="screen_frame_material"
contype="1"
conaffinity="1"/>
<!-- Actual screen glass -->
<geom name="screen_surface"
type="box"
pos="0 0.013 0"
size="0.25 0.002 0.15"
material="screen_material"
contype="1"
conaffinity="1"
friction="0.5 0.005 0.0001"/>
<!--
Touch surface center.
This is the point that should be used later
when defining the screen plane.
-->
<site name="screen_center"
pos="0 0.015 0"
size="0.006"
rgba="1 0 0 1"/>
<!-- Four visual reference points -->
<site name="screen_top_left"
pos="-0.25 0.015 0.15"
size="0.004"
rgba="1 1 0 1"/>
<site name="screen_top_right"
pos="0.25 0.015 0.15"
size="0.004"
rgba="1 1 0 0"/>
<site name="screen_bottom_left"
pos="-0.25 0.015 -0.15"
size="0.004"
rgba="1 1 0 1"/>
<site name="screen_bottom_right"
pos="0.25 0.015 -0.15"
size="0.004"
rgba="1 1 0 1"/>
<!-- =================================================
Screen AprilTag G : tag36h11 ID 1
Screen local frame:
- screen plane axes are local X and Z
- screen front normal is local +Y
The screen front surface is at local y = 0.015 m.
The tag is placed at the upper-right corner and
lifted by 0.1 mm to avoid z-fighting.
Texture plane size:
37.5 mm x 37.5 mm
Detectable black tag size:
30 mm x 30 mm
================================================= -->
<body name="SCREEN_APRILTAG"
pos="0.235 0.0151 0.135"
euler="-1.57079632679 0 0">
<geom name="SCREEN_APRILTAG_GEOM"
type="box"
size="0.01875 0.01875 0.0001"
material="screen_apriltag_mat"
rgba="1 1 1 1"
contype="0"
conaffinity="0"
group="2"/>
<!-- Non-rendered Screen Tag center Ground Truth -->
<site name="SCREEN_APRILTAG_SITE"
pos="0 0 0"
size="0.002"
rgba="0 1 0 0"/>
</body>
</body>
<!-- =====================================================
Fixed external Eye-to-Hand camera
IMPORTANT:
- The camera is placed slightly to the left of the robot and
aimed at the screen center, like a human viewing from the
left-front side.
- Screen front normal is local +Y.
- MuJoCo camera looks along its local -Z.
The optical axis is deliberately yawed toward the screen
center instead of being exactly fronto-parallel. This keeps
the Hand Tag visible while the arm moves in front of the
screen.
===================================================== -->
<body name="external_camera_mount"
pos="0.7 -0.2 0.9"
euler="0 0.4 1.57">
<geom name="external_camera_body"
type="box"
pos="0.18 0.55 0"
size="0.025 0.035 0.018"
rgba="0.1 0.1 0.1 1"
contype="0"
conaffinity="0"/>
<site name="external_touch_cam_site"
pos="0.18 0.55 0"
size="0.008"
rgba="1 0.2 0.2 1"/>
<camera name="external_touch_cam"
pos="0.18 0.55 0"
xyaxes="
-0.950 0.311 0
0 0 1
"
fovy="50"/>
</body>
<!-- =====================================================
Robot
===================================================== -->
<body name="PELVIS_S"
pos="0 0 1.2">
<!-- Pelvis visual -->
<geom pos="0 0 0"
quat="1 0 0 0"
type="mesh"
contype="0"
conaffinity="0"
group="1"
density="0"
rgba="0.698039 0.698039 0.698039 1"
mesh="PELVIS_S"/>
<!-- Pelvis collision -->
<geom pos="0 0 0"
quat="1 0 0 0"
type="mesh"
rgba="0.698039 0.698039 0.698039 1"
mesh="PELVIS_S"/>
<!-- =================================================
R_SHOULDER_P
================================================= -->
<body name="R_SHOULDER_P_S"
pos="0 -0.0945 0.042">
<inertial
pos="-0.00982259 -0.0704593 -1.1507e-06"
quat="0.706163 0.705933 0.0386962 0.0386741"
mass="0.880738"
diaginertia="0.000584874 0.000465648 0.000443849"/>
<joint name="R_SHOULDER_P"
pos="0 0 0"
axis="0 -1 0"
range="-3.14 3.14"
actuatorfrcrange="-120 120"/>
<geom type="mesh"
contype="0"
conaffinity="0"
group="1"
density="0"
rgba="0.890196 0.890196 0.913725 1"
mesh="R_SHOULDER_P_S"/>
<geom type="mesh"
rgba="0.890196 0.890196 0.913725 1"
mesh="R_SHOULDER_P_S"/>
<!-- ===============================================
R_SHOULDER_R
=============================================== -->
<body name="R_SHOULDER_R_S"
pos="0.035 -0.0765 0">
<inertial
pos="-0.0346025 -0.0917393 1.86281e-08"
quat="0.609323 0.358823 -0.609303 0.358778"
mass="0.594788"
diaginertia="0.000414771 0.000407636 0.000294296"/>
<joint name="R_SHOULDER_R"
pos="0 0 0"
axis="1 0 0"
range="-0.78 1.57"
actuatorfrcrange="-120 120"/>
<geom type="mesh"
contype="0"
conaffinity="0"
group="1"
density="0"
rgba="0.890196 0.890196 0.913725 1"
mesh="R_SHOULDER_R_S"/>
<geom type="mesh"
rgba="0.890196 0.890196 0.913725 1"
mesh="R_SHOULDER_R_S"/>
<!-- =============================================
R_SHOULDER_Y
============================================= -->
<body name="R_SHOULDER_Y_S"
pos="-0.035 -0.1475 0">
<inertial
pos="-0.00440977 -0.086362 -7.58792e-09"
quat="0.705001 0.704998 0.054559 0.0545441"
mass="0.563406"
diaginertia="0.000329815 0.000297341 0.000211019"/>
<joint name="R_SHOULDER_Y"
pos="0 0 0"
axis="0 -1 0"
range="-3.14 3.14"
actuatorfrcrange="-80 80"/>
<geom type="mesh"
contype="0"
conaffinity="0"
group="1"
density="0"
rgba="0.890196 0.890196 0.913725 1"
mesh="R_SHOULDER_Y_S"/>
<geom type="mesh"
rgba="0.890196 0.890196 0.913725 1"
mesh="R_SHOULDER_Y_S"/>
<!-- ===========================================
R_ELBOW_R
=========================================== -->
<body name="R_ELBOW_R_S"
pos="0.034 -0.1025 0">
<inertial
pos="-0.0335624 -0.06032 -2.97736e-07"
quat="0.674756 0.674714 -0.211333 -0.211667"
mass="0.393572"
diaginertia="0.000189078 0.000181042 0.000139034"/>
<joint name="R_ELBOW_R"
pos="0 0 0"
axis="1 0 0"
range="0 2.05"
actuatorfrcrange="-80 80"/>
<geom type="mesh"
contype="0"
conaffinity="0"
group="1"
density="0"
rgba="0.890196 0.890196 0.913725 1"
mesh="R_ELBOW_R_S"/>
<geom type="mesh"
rgba="0.890196 0.890196 0.913725 1"
mesh="R_ELBOW_R_S"/>
<!-- =========================================
R_WRIST_P
========================================= -->
<body name="R_WRIST_P_S"
pos="-0.034 -0.0965 0">
<inertial
pos="-1.39657e-10 -0.0675973 0.0192006"
quat="0.530481 0.467537 -0.467537 0.530481"
mass="0.442332"
diaginertia="0.000489142 0.000476754 9.72811e-05"/>
<joint name="R_WRIST_P"
pos="0 0 0"
axis="0 -1 0"
range="-3.14 3.14"
actuatorfrcrange="-50 50"/>
<geom type="mesh"
contype="0"
conaffinity="0"
group="1"
density="0"
rgba="0.647059 0.619608 0.588235 1"
mesh="R_WRIST_P_S"/>
<geom type="mesh"
rgba="0.647059 0.619608 0.588235 1"
mesh="R_WRIST_P_S"/>
<!-- =======================================
R_WRIST_Y
======================================= -->
<body name="R_WRIST_Y_S"
pos="0 -0.1525 0.039">
<inertial
pos="-0.00464136 -5.06426e-10 -0.0341254"
quat="0.298107 0.641196 0.641196 0.298107"
mass="0.235738"
diaginertia="6.00636e-05 5.8497e-05 4.579e-05"/>
<joint name="R_WRIST_Y"
pos="0 0 0"
axis="0 0 1"
range="-0.78 0.78"
actuatorfrcrange="-50 50"/>
<geom type="mesh"
contype="0"
conaffinity="0"
group="1"
density="0"
rgba="0.647059 0.619608 0.588235 1"
mesh="R_WRIST_Y_S"/>
<geom type="mesh"
rgba="0.647059 0.619608 0.588235 1"
mesh="R_WRIST_Y_S"/>
<!-- =====================================
R_WRIST_R / hand
===================================== -->
<body name="R_WRIST_R_S"
pos="0.03 0 -0.039">
<inertial
pos="-0.0201642 -0.11075 -0.00598955"
quat="0.483404 0.529786 -0.463203 0.520663"
mass="0.504366"
diaginertia="0.00027189 0.000186086 0.000130629"/>
<joint name="R_WRIST_R"
pos="0 0 0"
axis="1 0 0"
range="-0.26 1.57"
actuatorfrcrange="-50 50"/>
<!-- ===============================
Wrist / hand mesh
=============================== -->
<geom type="mesh"
contype="0"
conaffinity="0"
group="1"
density="0"
rgba="0.890196 0.890196 0.913725 1"
mesh="R_WRIST_R_S"/>
<geom type="mesh"
rgba="0.890196 0.890196 0.913725 1"
mesh="R_WRIST_R_S"/>
<!-- =================================================
Robot TCP
Same location as original:
R_FINGER_TIP_FIXED
================================================= -->
<site name="R_FINGER_TIP_SITE"
pos="0.00684256 -0.284077 0.00801525"
size="0.006"
rgba="0 1 1 1"/>
<!-- Hand-mounted camera copied from dual_arm.xml. -->
<camera name="hand_cam"
pos="-0.01212 -0.17655 0.07506"
quat="3.17467e-11 -3.17467e-11 0.707107 0.707107"
fovy="60"/>
<!-- fingertip visual -->
<geom name="R_FINGER_TIP_VISUAL"
type="sphere"
size="0.004"
pos="0.00684256 -0.284077 0.00801525"
contype="0"
conaffinity="0"
rgba="0 1 1 1"/>
<!-- fingertip collision
for later physical screen contact
-->
<geom name="R_FINGER_TIP_COLLISION"
type="sphere"
size="0.004"
pos="0.00684256 -0.284077 0.00801525"
contype="1"
conaffinity="1"
rgba="0 1 1 0.25"/>
<!-- =================================================
Hand AprilTag H : tag36h11 ID 0
3 cm AprilTag mounted on BACK OF HAND
Texture plane full width:
0.0375 m
Detectable black tag width:
0.030 m
MuJoCo box size is HALF-size:
0.01875 x 0.01875
thickness:
0.0006 m
half thickness:
0.0003
It is fixed rigidly to R_WRIST_R_S.
Current position is on upper/back side of hand,
slightly downstream from wrist camera area.
The tag front surface normal is local +Z.
================================================= -->
<body name="R_HAND_APRILTAG"
pos="0.00684256 -0.254077 0.00801525"
euler="-1.57079632679 0 0">
<geom name="R_HAND_APRILTAG_GEOM"
type="box"
size="0.01875 0.01875 0.0003"
material="hand_apriltag_mat"
rgba="1 1 1 1"
contype="0"
conaffinity="0"
group="2"/>
<!-- Non-rendered Hand Tag center Ground Truth -->
<site name="R_HAND_APRILTAG_SITE"
pos="0 0 0"
size="0.002"
rgba="1 0 1 0"/>
</body>
</body>
</body>
</body>
</body>
</body>
</body>
</body>
</body>
<!-- =====================================================
Lighting
===================================================== -->
<light name="top_light"
mode="fixed"
directional="true"
diffuse="0.7 0.7 0.7"
specular="0.3 0.3 0.3"
pos="0 0 3"
dir="0 0 -1"/>
<!-- Add some front lighting for AprilTag -->
<light name="front_light"
mode="fixed"
directional="false"
diffuse="0.5 0.5 0.5"
specular="0.1 0.1 0.1"
pos="0.4 -0.5 2.0"
dir="-0.3 -0.5 -0.4"/>
</worldbody>
<!-- =========================================================
Actuators
Keep original RIGHT ARM actuator names.
This is important because existing:
mujoco_motors
mujoco_right_arm
uses these right-arm joints.
========================================================= -->
<actuator>
<position name="R_SHOULDER_P_pos"
joint="R_SHOULDER_P"
kp="2000"
ctrlrange="-3.14 3.14"/>
<position name="R_SHOULDER_R_pos"
joint="R_SHOULDER_R"
kp="2000"
ctrlrange="-0.78 1.57"/>
<position name="R_SHOULDER_Y_pos"
joint="R_SHOULDER_Y"
kp="2000"
ctrlrange="-3.14 3.14"/>
<position name="R_ELBOW_R_pos"
joint="R_ELBOW_R"
kp="1500"
ctrlrange="0 2.05"/>
<position name="R_WRIST_P_pos"
joint="R_WRIST_P"
kp="800"
ctrlrange="-3.14 3.14"/>
<position name="R_WRIST_Y_pos"
joint="R_WRIST_Y"
kp="800"
ctrlrange="-0.78 0.78"/>
<position name="R_WRIST_R_pos"
joint="R_WRIST_R"
kp="800"
ctrlrange="-0.26 1.57"/>
</actuator>
<!-- =========================================================
Optional initial pose
This pose keeps the right arm roughly facing the screen.
We can adjust this later after actually running Viewer.
========================================================= -->
<keyframe>
<key name="home"
qpos="
0
0
0
0
0
0
0
"/>
</keyframe>
</mujoco>