robotic 0.2.9__cp39-cp39-manylinux2014_x86_64.whl → 0.2.9.dev2__cp39-cp39-manylinux2014_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of robotic might be problematic. Click here for more details.
- robotic/__init__.py +4 -0
- robotic/_robotic.pyi +13 -9
- robotic/_robotic.so +0 -0
- robotic/cleanMeshes.py +59 -0
- robotic/include/rai/Core/array.ipp +3 -1
- robotic/include/rai/Core/graph.h +2 -2
- robotic/include/rai/Core/util.h +8 -7
- robotic/include/rai/Geo/geo.h +3 -2
- robotic/include/rai/Geo/mesh.h +1 -3
- robotic/include/rai/KOMO/manipTools.h +2 -2
- robotic/include/rai/Kin/frame.h +4 -4
- robotic/include/rai/Kin/kin.h +4 -3
- robotic/include/rai/Kin/kin_physx.h +1 -2
- robotic/include/rai/ry/types.h +3 -2
- robotic/librai.so +0 -0
- robotic/meshTool +0 -0
- robotic/mujoco-import.py +10 -0
- robotic/rai-robotModels/g1/g1.g +1 -1
- robotic/rai-robotModels/g1/g1_29dof_conv.g +77 -0
- robotic/rai-robotModels/g1/g1_clean.g +38 -73
- robotic/rai-robotModels/g1/meshes/head_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_ankle_pitch_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_ankle_roll_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_elbow_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_hip_pitch_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_hip_roll_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_hip_yaw_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_knee_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_rubber_hand.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_shoulder_pitch_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_shoulder_roll_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_shoulder_yaw_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_wrist_pitch_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_wrist_roll_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_wrist_yaw_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/logo_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/pelvis.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/pelvis_contour_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_ankle_pitch_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_ankle_roll_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_elbow_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_hip_pitch_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_hip_roll_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_hip_yaw_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_knee_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_rubber_hand.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_shoulder_pitch_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_shoulder_roll_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_shoulder_yaw_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_wrist_pitch_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_wrist_roll_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_wrist_yaw_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/torso_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/waist_roll_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/waist_support_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/waist_yaw_link.h5 +0 -0
- robotic/rai-robotModels/panda/meshes/finger.h5 +0 -0
- robotic/rai-robotModels/panda/meshes/hand.h5 +0 -0
- robotic/rai-robotModels/panda/meshes/link0.h5 +0 -0
- robotic/rai-robotModels/panda/meshes/link1.h5 +0 -0
- robotic/rai-robotModels/panda/meshes/link2.h5 +0 -0
- robotic/rai-robotModels/panda/meshes/link3.h5 +0 -0
- robotic/rai-robotModels/panda/meshes/link4.h5 +0 -0
- robotic/rai-robotModels/panda/meshes/link5.h5 +0 -0
- robotic/rai-robotModels/panda/meshes/link6.h5 +0 -0
- robotic/rai-robotModels/panda/meshes/link7.h5 +0 -0
- robotic/rai-robotModels/panda/panda.g +1 -1
- robotic/rai-robotModels/panda/panda_arm_hand_conv.g +24 -0
- robotic/rai-robotModels/panda/panda_clean.g +21 -45
- robotic/rai-robotModels/panda/panda_gripper.g +3 -3
- robotic/rai-robotModels/pr2/meshes/base.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/base_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/caster.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/elbow_flex.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/elbow_flex_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/forearm.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/forearm_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/forearm_roll.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/gripper_palm.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/gripper_palm_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/head_pan.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/head_pan_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/head_tilt.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/head_tilt_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/l_finger.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/l_finger_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/l_finger_tip.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/l_finger_tip_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/shoulder_lift.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/shoulder_lift_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/shoulder_pan.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/shoulder_pan_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/tilting_hokuyo.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/tilting_hokuyo_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/torso_lift.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/torso_lift_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/upper_arm.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/upper_arm_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/upper_arm_roll.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/upper_arm_roll_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/wheel.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/wheel_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/wrist_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/wrist_flex.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/wrist_roll.h5 +0 -0
- robotic/rai-robotModels/pr2/pr2.g +1 -1
- robotic/rai-robotModels/pr2/pr2_clean.g +5 -1
- robotic/rai-robotModels/pr2/pr2_conv.g +218 -0
- robotic/rai-robotModels/ranger/meshes/ranger_mini3.h5 +0 -0
- robotic/rai-robotModels/ranger/meshes/ranger_mini_v3_wheel.h5 +0 -0
- robotic/rai-robotModels/ranger/meshes/ranger_mini_v3_wheel_right.h5 +0 -0
- robotic/rai-robotModels/ranger/ranger.g +5 -5
- robotic/rai-robotModels/ranger/ranger_clean.g +5 -5
- robotic/rai-robotModels/ranger/ranger_mini_conv.g +14 -0
- robotic/rai-robotModels/robotiq/meshes/robotiq_arg2f_85_base_link.h5 +0 -0
- robotic/rai-robotModels/robotiq/meshes/robotiq_arg2f_85_inner_finger.h5 +0 -0
- robotic/rai-robotModels/robotiq/meshes/robotiq_arg2f_85_inner_knuckle.h5 +0 -0
- robotic/rai-robotModels/robotiq/meshes/robotiq_arg2f_85_outer_finger.h5 +0 -0
- robotic/rai-robotModels/robotiq/meshes/robotiq_arg2f_85_outer_knuckle.h5 +0 -0
- robotic/rai-robotModels/robotiq/robotiq.g +2 -2
- robotic/rai-robotModels/robotiq/robotiq_arg2f_85_model_conv.g +21 -0
- robotic/rai-robotModels/robotiq/robotiq_clean.g +16 -16
- robotic/rai-robotModels/scenarios/ballFinger.g +2 -2
- robotic/rai-robotModels/tests/compound.g +3 -6
- robotic/rai-robotModels/ur10/meshes/base.h5 +0 -0
- robotic/rai-robotModels/ur10/meshes/forearm.h5 +0 -0
- robotic/rai-robotModels/ur10/meshes/shoulder.h5 +0 -0
- robotic/rai-robotModels/ur10/meshes/upperarm.h5 +0 -0
- robotic/rai-robotModels/ur10/meshes/wrist1.h5 +0 -0
- robotic/rai-robotModels/ur10/meshes/wrist2.h5 +0 -0
- robotic/rai-robotModels/ur10/meshes/wrist3.h5 +0 -0
- robotic/rai-robotModels/ur10/ur10.g +1 -1
- robotic/rai-robotModels/ur10/ur10_conv.g +17 -0
- robotic/ry-h5info +5 -1
- robotic/ry-test +1 -1
- robotic/ry-urdfConvert.py +73 -0
- robotic/src/config_mujoco.py +237 -0
- robotic/src/config_urdf.py +237 -0
- robotic/src/mesh_helper.py +395 -0
- robotic/src/yaml_helper.py +19 -0
- robotic/version.py +1 -1
- {robotic-0.2.9.data → robotic-0.2.9.dev2.data}/scripts/ry-h5info +5 -1
- {robotic-0.2.9.data → robotic-0.2.9.dev2.data}/scripts/ry-test +1 -1
- {robotic-0.2.9.dist-info → robotic-0.2.9.dev2.dist-info}/METADATA +3 -2
- robotic-0.2.9.dev2.dist-info/RECORD +369 -0
- {robotic-0.2.9.dist-info → robotic-0.2.9.dev2.dist-info}/WHEEL +1 -1
- robotic/rai-robotModels/baxter/baxter.g +0 -49
- robotic/rai-robotModels/baxter/baxter_clean.g +0 -116
- robotic/rai-robotModels/baxter/baxter_clean2.g +0 -205
- robotic/rai-robotModels/baxter/baxter_clean3.g +0 -223
- robotic/rai-robotModels/baxter/baxter_description/meshes/base/PEDESTAL.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/base/pedestal_link_collision.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/head/H0.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/head/H1.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/lower_elbow/E1.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/lower_forearm/W1.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/lower_shoulder/S1.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/torso/base_link.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/torso/base_link_collision.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/upper_elbow/E0.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/upper_forearm/W0.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/upper_shoulder/S0.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/wrist/W2.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_new.g +0 -53
- robotic/rai-robotModels/baxter/rethink_ee_description/meshes/electric_gripper/electric_gripper_base.ply +0 -0
- robotic/rai-robotModels/baxter/rethink_ee_description/meshes/electric_gripper/fingers/extended_narrow.ply +0 -0
- robotic/rai-robotModels/baxter/rethink_ee_description/meshes/electric_gripper/fingers/half_round_tip.ply +0 -0
- robotic/rai-robotModels/baxter/rethink_ee_description/meshes/electric_gripper/fingers/paddle_tip.ply +0 -0
- robotic/rai-robotModels/baxter/rethink_ee_description/meshes/pneumatic_gripper/pneumatic_gripper_base.ply +0 -0
- robotic/rai-robotModels/baxter/rethink_ee_description/meshes/pneumatic_gripper/pneumatic_gripper_w_cup.ply +0 -0
- robotic/rai-robotModels/g1/meshes/head_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_ankle_pitch_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_ankle_roll_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_elbow_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hand_index_0_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hand_index_1_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hand_middle_0_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hand_middle_1_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hand_palm_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hand_thumb_0_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hand_thumb_1_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hand_thumb_2_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hip_pitch_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hip_roll_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hip_yaw_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_knee_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_rubber_hand.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_shoulder_pitch_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_shoulder_roll_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_shoulder_yaw_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_wrist_pitch_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_wrist_roll_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_wrist_roll_rubber_hand.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_wrist_yaw_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/logo_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/pelvis.ply +0 -0
- robotic/rai-robotModels/g1/meshes/pelvis_contour_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_ankle_pitch_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_ankle_roll_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_elbow_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hand_index_0_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hand_index_1_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hand_middle_0_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hand_middle_1_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hand_palm_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hand_thumb_0_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hand_thumb_1_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hand_thumb_2_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hip_pitch_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hip_roll_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hip_yaw_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_knee_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_rubber_hand.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_shoulder_pitch_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_shoulder_roll_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_shoulder_yaw_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_wrist_pitch_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_wrist_roll_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_wrist_roll_rubber_hand.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_wrist_yaw_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/torso_constraint_L_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/torso_constraint_L_rod_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/torso_constraint_R_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/torso_constraint_R_rod_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/torso_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/waist_constraint_L.ply +0 -0
- robotic/rai-robotModels/g1/meshes/waist_constraint_R.ply +0 -0
- robotic/rai-robotModels/g1/meshes/waist_roll_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/waist_support_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/waist_yaw_link.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/collision/finger.stl +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/collision/hand.stl +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/collision/link0.stl +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/collision/link1.stl +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/collision/link2.stl +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/collision/link3.stl +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/collision/link4.stl +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/collision/link5.stl +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/collision/link6.stl +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/collision/link7.stl +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/HOWTO.sh +0 -10
- robotic/rai-robotModels/panda/franka_description/meshes/visual/HOWTO2.sh +0 -7
- robotic/rai-robotModels/panda/franka_description/meshes/visual/convMeshes.mlx +0 -38
- robotic/rai-robotModels/panda/franka_description/meshes/visual/finger.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/hand.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/link0.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/link1.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/link2.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/link3.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/link4.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/link5.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/link6.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/link7.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/script.mlx +0 -28
- robotic/rai-robotModels/pr2/pr2_description/meshes/base_v0/base.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/base_v0/base_L.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/base_v0/caster.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/base_v0/caster_L.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/base_v0/pr2_wheel.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/base_v0/wheel.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/forearm_v0/forearm.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/forearm_v0/wrist_flex.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/forearm_v0/wrist_roll.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/forearm_v0/wrist_roll_L.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/gripper_v0/gripper_palm.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/gripper_v0/l_finger.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/gripper_v0/l_finger_tip.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/head_v0/head_pan.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/head_v0/head_pan_L.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/head_v0/head_tilt.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/head_v0/head_tilt_L.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/shoulder_v0/shoulder_lift.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/shoulder_v0/shoulder_pan.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/shoulder_v0/shoulder_yaw.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/shoulder_v0/upper_arm_roll.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/shoulder_v0/upper_arm_roll_L.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/tilting_laser_v0/hok_tilt.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/tilting_laser_v0/tilting_hokuyo.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/tilting_laser_v0/tilting_hokuyo_L.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/torso_v0/torso.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/torso_v0/torso_lift.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/torso_v0/torso_lift_L.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/upper_arm_v0/elbow_flex.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/upper_arm_v0/forearm_roll.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/upper_arm_v0/forearm_roll_L.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/upper_arm_v0/upper_arm.ply +0 -0
- robotic/rai-robotModels/ranger/meshes/cleanMeshes.mlx +0 -23
- robotic/rai-robotModels/ranger/meshes/cleanMeshes.sh +0 -8
- robotic/rai-robotModels/ranger/meshes/ranger_mini3.ply +0 -0
- robotic/rai-robotModels/ranger/meshes/ranger_mini_v3_wheel.ply +0 -0
- robotic/rai-robotModels/ranger/meshes/ranger_mini_v3_wheel_right.ply +0 -0
- robotic/rai-robotModels/robotiq/meshes/visual/robotiq_arg2f_85_base_link.ply +0 -0
- robotic/rai-robotModels/robotiq/meshes/visual/robotiq_arg2f_85_base_link_x.ply +0 -10
- robotic/rai-robotModels/robotiq/meshes/visual/robotiq_arg2f_85_inner_finger.ply +0 -0
- robotic/rai-robotModels/robotiq/meshes/visual/robotiq_arg2f_85_inner_knuckle.ply +0 -0
- robotic/rai-robotModels/robotiq/meshes/visual/robotiq_arg2f_85_outer_finger.ply +0 -0
- robotic/rai-robotModels/robotiq/meshes/visual/robotiq_arg2f_85_outer_knuckle.ply +0 -0
- robotic/rai-robotModels/robotiq/meshes/visual/robotiq_arg2f_85_pad.ply +0 -0
- robotic/rai-robotModels/robotiq/meshes/visual/robotiq_gripper_coupling.ply +0 -0
- robotic/rai-robotModels/ur10/ur_description/meshes/ur10/visual/Base.ply +0 -0
- robotic/rai-robotModels/ur10/ur_description/meshes/ur10/visual/Forearm.ply +0 -0
- robotic/rai-robotModels/ur10/ur_description/meshes/ur10/visual/Shoulder.ply +0 -0
- robotic/rai-robotModels/ur10/ur_description/meshes/ur10/visual/UpperArm.ply +0 -0
- robotic/rai-robotModels/ur10/ur_description/meshes/ur10/visual/Wrist1.ply +0 -0
- robotic/rai-robotModels/ur10/ur_description/meshes/ur10/visual/Wrist2.ply +0 -0
- robotic/rai-robotModels/ur10/ur_description/meshes/ur10/visual/Wrist3.ply +0 -0
- robotic-0.2.9.dist-info/RECORD +0 -420
- /robotic/rai-robotModels/robotiq/meshes/{visual/robotiq_ft300.ply → robotiq_ft300.ply} +0 -0
- {robotic-0.2.9.data → robotic-0.2.9.dev2.data}/scripts/ry-bot +0 -0
- {robotic-0.2.9.data → robotic-0.2.9.dev2.data}/scripts/ry-info +0 -0
- {robotic-0.2.9.data → robotic-0.2.9.dev2.data}/scripts/ry-meshTool +0 -0
- {robotic-0.2.9.data → robotic-0.2.9.dev2.data}/scripts/ry-urdf2rai +0 -0
- {robotic-0.2.9.data → robotic-0.2.9.dev2.data}/scripts/ry-urdf2yaml +0 -0
- {robotic-0.2.9.data → robotic-0.2.9.dev2.data}/scripts/ry-view +0 -0
- {robotic-0.2.9.dist-info → robotic-0.2.9.dev2.dist-info/licenses}/LICENSE +0 -0
- {robotic-0.2.9.dist-info → robotic-0.2.9.dev2.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
|
|
2
|
+
import os
|
|
3
|
+
import numpy as np
|
|
4
|
+
import robotic as ry
|
|
5
|
+
import xml.etree.ElementTree as ET
|
|
6
|
+
from copy import copy
|
|
7
|
+
|
|
8
|
+
class MujocoLoader():
|
|
9
|
+
|
|
10
|
+
def __init__(self, file, visualsOnly=True):
|
|
11
|
+
self.visualsOnly = visualsOnly
|
|
12
|
+
self.debug_counter = 0
|
|
13
|
+
self.muj2rai_joint_map = {
|
|
14
|
+
'1 0 0': ry.JT.hingeX,
|
|
15
|
+
'0 1 0': ry.JT.hingeY,
|
|
16
|
+
'0 0 1': ry.JT.hingeZ,
|
|
17
|
+
'-1 0 0': ry.JT.hingeX,
|
|
18
|
+
'0 -1 0': ry.JT.hingeY,
|
|
19
|
+
'0 0 -1': ry.JT.hingeZ,
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
tree = ET.parse(file)
|
|
23
|
+
path, _ = os.path.split(file)
|
|
24
|
+
root = tree.getroot()
|
|
25
|
+
|
|
26
|
+
self.materials = {}
|
|
27
|
+
self.textures = {}
|
|
28
|
+
self.meshes = {}
|
|
29
|
+
self.load_assets(root, path)
|
|
30
|
+
self.bodyCount = -1
|
|
31
|
+
|
|
32
|
+
self.C = ry.Config()
|
|
33
|
+
self.base = self.C.addFrame('base')
|
|
34
|
+
self.base.addAttributes({'multibody':True})
|
|
35
|
+
self.base.setQuaternion([0,0,0,1])
|
|
36
|
+
self.add_node(root, self.base, path, 0)
|
|
37
|
+
|
|
38
|
+
def as_floats(self, input_string):
|
|
39
|
+
return [float(num) for num in input_string.replace(',', ' ').split()]
|
|
40
|
+
|
|
41
|
+
def load_assets(self, root, path):
|
|
42
|
+
texs = root.findall('.//texture')
|
|
43
|
+
for tex in texs:
|
|
44
|
+
name = tex.attrib.get('name', '')
|
|
45
|
+
file = tex.attrib.get('file', '')
|
|
46
|
+
self.textures[name] = os.path.join(path, file)
|
|
47
|
+
|
|
48
|
+
maters = root.findall('.//material')
|
|
49
|
+
for mater in maters:
|
|
50
|
+
name = mater.attrib.get('name', '')
|
|
51
|
+
color = mater.attrib.get('rgba', '')
|
|
52
|
+
texture_name = mater.attrib.get('texture', '')
|
|
53
|
+
if texture_name:
|
|
54
|
+
self.materials[name] = self.textures[texture_name]
|
|
55
|
+
elif color:
|
|
56
|
+
self.materials[name] = color
|
|
57
|
+
else:
|
|
58
|
+
self.materials[name] = ''
|
|
59
|
+
|
|
60
|
+
for mesh in root.findall('.//mesh'):
|
|
61
|
+
name = mesh.attrib.get('name', '')
|
|
62
|
+
file = mesh.attrib.get('file', '')
|
|
63
|
+
if file.startswith('visual') or file.startswith('collision'): #HACK: the true path is hidden in some compiler attribute
|
|
64
|
+
file = 'meshes/'+file
|
|
65
|
+
mesh.attrib['file'] = file
|
|
66
|
+
self.meshes[name] = mesh.attrib
|
|
67
|
+
|
|
68
|
+
def add_node(self, node, f_parent, path, level):
|
|
69
|
+
if 'file' in node.attrib:
|
|
70
|
+
file = node.attrib['file']
|
|
71
|
+
node.attrib['file'] = os.path.join(path, file)
|
|
72
|
+
|
|
73
|
+
print('|'+level*' ', node.tag, node.attrib)
|
|
74
|
+
|
|
75
|
+
if node.tag == 'include':
|
|
76
|
+
file = node.attrib['file']
|
|
77
|
+
tree = ET.parse(file)
|
|
78
|
+
root = tree.getroot()
|
|
79
|
+
path, _ = os.path.split(file)
|
|
80
|
+
self.load_assets(root, path)
|
|
81
|
+
self.add_node(root, f_parent, path, level+1)
|
|
82
|
+
|
|
83
|
+
f_body = None
|
|
84
|
+
|
|
85
|
+
if node.tag == 'body':
|
|
86
|
+
f_body = self.add_body(node, f_parent)
|
|
87
|
+
|
|
88
|
+
for child in node:
|
|
89
|
+
if f_body is None:
|
|
90
|
+
self.add_node(child, f_parent, path, level+1)
|
|
91
|
+
else:
|
|
92
|
+
self.add_node(child, f_body, path, level+1)
|
|
93
|
+
|
|
94
|
+
def add_body(self, body, f_parent):
|
|
95
|
+
self.bodyCount += 1
|
|
96
|
+
body_name = body.attrib.get('name', f'body_{self.bodyCount}')
|
|
97
|
+
|
|
98
|
+
# if self.C.getFrame(body_name, False):
|
|
99
|
+
body_name = f'{body_name}_{self.bodyCount}'
|
|
100
|
+
f_body = self.C.addFrame(body_name)
|
|
101
|
+
f_body.setParent(f_parent)
|
|
102
|
+
self.setRelativePose(f_body, body.attrib)
|
|
103
|
+
|
|
104
|
+
for i, joint in enumerate(body.findall('./joint')):
|
|
105
|
+
axis = joint.attrib.get('axis', None)
|
|
106
|
+
limits = joint.attrib.get('range', None)
|
|
107
|
+
joint_name = joint.attrib.get('name', f'{body_name}_joint{i*'_'}')
|
|
108
|
+
f_origin = self.C.addFrame(f'{joint_name}_origin')
|
|
109
|
+
f_origin.setParent(f_body)
|
|
110
|
+
self.setRelativePose(f_origin, joint.attrib)
|
|
111
|
+
f_origin.unLink()
|
|
112
|
+
f_origin.setParent(f_parent, True)
|
|
113
|
+
|
|
114
|
+
if axis:
|
|
115
|
+
if axis in self.muj2rai_joint_map:
|
|
116
|
+
axis = self.muj2rai_joint_map[axis]
|
|
117
|
+
else:
|
|
118
|
+
vec1 = np.array([0., 0., 1.])
|
|
119
|
+
vec2 = np.array(self.as_floats(axis))
|
|
120
|
+
quat = ry.Quaternion().setDiff(vec1, vec2).getArr()
|
|
121
|
+
f_origin.setRelativeQuaternion(quat)
|
|
122
|
+
axis = ry.JT.hingeZ
|
|
123
|
+
else:
|
|
124
|
+
axis = ry.JT.hingeZ
|
|
125
|
+
|
|
126
|
+
if joint.attrib.get('type', 'hinge')=='slide':
|
|
127
|
+
trans_map = {
|
|
128
|
+
ry.JT.hingeX: ry.JT.transX,
|
|
129
|
+
ry.JT.hingeY: ry.JT.transY,
|
|
130
|
+
ry.JT.hingeZ: ry.JT.transZ}
|
|
131
|
+
axis = trans_map[axis]
|
|
132
|
+
|
|
133
|
+
if not limits:
|
|
134
|
+
limits = '-1 1'
|
|
135
|
+
|
|
136
|
+
# if self.C.getFrame(joint_name, False):
|
|
137
|
+
# joint_name = f'{joint_name}_{self.bodyCount}'
|
|
138
|
+
f_joint = self.C.addFrame(joint_name)
|
|
139
|
+
f_joint.setParent(f_origin)
|
|
140
|
+
f_joint.setJoint(axis, self.as_floats(limits))
|
|
141
|
+
|
|
142
|
+
# relink body:
|
|
143
|
+
f_parent = f_joint
|
|
144
|
+
f_body.unLink()
|
|
145
|
+
f_body.setParent(f_parent, True)
|
|
146
|
+
|
|
147
|
+
for i, geom in enumerate(body.findall('./geom')):
|
|
148
|
+
isColl = ('contype' in geom.attrib and geom.attrib.get('contype', '')!='0') or 'col' in geom.attrib.get('class','')
|
|
149
|
+
if self.visualsOnly and isColl:
|
|
150
|
+
continue
|
|
151
|
+
|
|
152
|
+
f_shape = self.C.addFrame(f'{body_name}_shape{i}')
|
|
153
|
+
f_shape.setParent(f_body)
|
|
154
|
+
|
|
155
|
+
if 'mesh' in geom.attrib:
|
|
156
|
+
mesh = geom.attrib.get('mesh', '')
|
|
157
|
+
material_name = geom.attrib.get('material', '')
|
|
158
|
+
texture_path = self.materials.get(material_name, None)
|
|
159
|
+
meshfile = self.meshes[mesh]['file']
|
|
160
|
+
scale = self.as_floats(self.meshes[mesh].get('scale', '1 1 1'))
|
|
161
|
+
|
|
162
|
+
f_shape.setMeshFile(meshfile, scale[0])
|
|
163
|
+
|
|
164
|
+
if texture_path:
|
|
165
|
+
if len(texture_path.split()) == 4: # Is a color rgba
|
|
166
|
+
f_shape.setColor(self.as_floats(texture_path))
|
|
167
|
+
|
|
168
|
+
elif 'type' in geom.attrib:
|
|
169
|
+
size = self.as_floats(geom.attrib['size'])
|
|
170
|
+
if geom.attrib['type']=='capsule':
|
|
171
|
+
if 'fromto' in geom.attrib:
|
|
172
|
+
fromto = self.as_floats(geom.attrib['fromto'])
|
|
173
|
+
a, b = np.array(fromto[:3]), np.array(fromto[3:])
|
|
174
|
+
l = np.linalg.norm(b-a)
|
|
175
|
+
q = ry.Quaternion().setDiff([0,0,1],(b-a)/l)
|
|
176
|
+
f_shape.setRelativePosition(0.5*(a+b))
|
|
177
|
+
f_shape.setRelativeQuaternion(q.getArr())
|
|
178
|
+
f_shape.setShape(ry.ST.capsule, [l, size[0]])
|
|
179
|
+
elif len(size)==2:
|
|
180
|
+
f_shape.setShape(ry.ST.capsule, [2.*size[1], size[0]])
|
|
181
|
+
|
|
182
|
+
elif geom.attrib['type']=='cylinder':
|
|
183
|
+
if len(size)==2:
|
|
184
|
+
f_shape.setShape(ry.ST.cylinder, [2.*size[1], size[0]])
|
|
185
|
+
|
|
186
|
+
elif geom.attrib['type']=='box':
|
|
187
|
+
assert len(size)==3
|
|
188
|
+
f_shape.setShape(ry.ST.box, [2.*f for f in size])
|
|
189
|
+
if geom.attrib.get('material', None):
|
|
190
|
+
texture_path = self.materials[geom.attrib.get('material', None)]
|
|
191
|
+
if len(texture_path.split()) == 4: # Is a color rgba
|
|
192
|
+
f_shape.setColor(self.as_floats(texture_path))
|
|
193
|
+
else:
|
|
194
|
+
print('applying to box:', texture_path)
|
|
195
|
+
#TODO incorperate <texrepeat> tag correctly
|
|
196
|
+
uv_coords = np.array([
|
|
197
|
+
[0, 0], # vertex 0
|
|
198
|
+
[1, 0], # vertex 1
|
|
199
|
+
[1, 1], # vertex 2
|
|
200
|
+
[0, 1], # vertex 3
|
|
201
|
+
[0, 0], # vertex 4
|
|
202
|
+
[1, 0], # vertex 5
|
|
203
|
+
[1, 1], # vertex 6
|
|
204
|
+
[0, 1] # vertex 7
|
|
205
|
+
])
|
|
206
|
+
|
|
207
|
+
f_shape.setTextureFile(texture_path, uv_coords)
|
|
208
|
+
|
|
209
|
+
elif geom.attrib['type']=='sphere':
|
|
210
|
+
if len(size)==1:
|
|
211
|
+
f_shape.setShape(ry.ST.sphere, size)
|
|
212
|
+
|
|
213
|
+
self.setRelativePose(f_shape, geom.attrib)
|
|
214
|
+
|
|
215
|
+
if geom.attrib.get('rgba', None):
|
|
216
|
+
if geom.attrib.get('material', None) is None:
|
|
217
|
+
f_shape.setColor(self.as_floats(geom.attrib['rgba']))
|
|
218
|
+
|
|
219
|
+
elif isColl:
|
|
220
|
+
f_shape.setColor([1,0,0,.2])
|
|
221
|
+
|
|
222
|
+
return f_body
|
|
223
|
+
|
|
224
|
+
def setRelativePose(self, f, attrib):
|
|
225
|
+
pos = attrib.get('pos', None)
|
|
226
|
+
if pos:
|
|
227
|
+
f.setRelativePosition(self.as_floats(pos))
|
|
228
|
+
|
|
229
|
+
quat = attrib.get('quat', None)
|
|
230
|
+
if quat:
|
|
231
|
+
f.setRelativeQuaternion(self.as_floats(quat))
|
|
232
|
+
|
|
233
|
+
rpy = attrib.get('euler', None)
|
|
234
|
+
if rpy:
|
|
235
|
+
q = ry.Quaternion()
|
|
236
|
+
q.setRollPitchYaw(self.as_floats(rpy))
|
|
237
|
+
f.setRelativeQuaternion(q.getArr())
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import numpy as np
|
|
3
|
+
import robotic as ry
|
|
4
|
+
from lxml import etree
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class URDFLoader():
|
|
8
|
+
|
|
9
|
+
def __init__(self, file, visualsOnly=True, meshPathRemove='', meshExt=None):
|
|
10
|
+
self.meshPathRemove = meshPathRemove
|
|
11
|
+
self.meshExt = meshExt
|
|
12
|
+
|
|
13
|
+
xmlData = etree.parse(file)
|
|
14
|
+
self.path, _ = os.path.split(file)
|
|
15
|
+
|
|
16
|
+
self.C = ry.Config()
|
|
17
|
+
|
|
18
|
+
useCollisionShapes = not visualsOnly
|
|
19
|
+
|
|
20
|
+
# materials
|
|
21
|
+
|
|
22
|
+
self.materials = {}
|
|
23
|
+
mats = xmlData.findall('./material')
|
|
24
|
+
for mat in mats:
|
|
25
|
+
name = mat.attrib.get('name', '')
|
|
26
|
+
tex = mat.find('texture')
|
|
27
|
+
if tex is not None:
|
|
28
|
+
tex_file = tex.attrib['filename'].replace(self.meshPathRemove,'',1)
|
|
29
|
+
self.materials[name] = os.path.join(self.path, tex_file)
|
|
30
|
+
else:
|
|
31
|
+
col = mat.find('color')
|
|
32
|
+
if col is not None:
|
|
33
|
+
self.materials[name] = self.as_floats(col.attrib['rgba'])
|
|
34
|
+
|
|
35
|
+
# links with shapes
|
|
36
|
+
|
|
37
|
+
links = xmlData.findall('./link')
|
|
38
|
+
for link in links:
|
|
39
|
+
link_name = link.attrib['name']
|
|
40
|
+
f_link = self.C.addFrame(link_name)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
elem = link.find('inertial/inertia')
|
|
44
|
+
matrix=[]
|
|
45
|
+
if elem is not None:
|
|
46
|
+
tags = ['ixx', 'ixy', 'ixz', 'iyy', 'iyz', 'izz']
|
|
47
|
+
matrix = [float(elem.attrib[tag]) for tag in tags]
|
|
48
|
+
|
|
49
|
+
elem = link.find('inertial/mass')
|
|
50
|
+
if elem is not None:
|
|
51
|
+
mass = float(elem.attrib['value'])
|
|
52
|
+
f_link.setMass(mass, matrix)
|
|
53
|
+
|
|
54
|
+
for visual in link.findall('visual'):
|
|
55
|
+
self.add_shape(visual, f'{link_name}_0', f_link, isVisual=True)
|
|
56
|
+
|
|
57
|
+
# collision shape
|
|
58
|
+
if useCollisionShapes:
|
|
59
|
+
for collision in link.findall('collision'):
|
|
60
|
+
f_shape = self.add_shape(collision, f'{link_name}_1', f_link, isVisual=False)
|
|
61
|
+
f_shape.setColor([1,0,0,.2])
|
|
62
|
+
|
|
63
|
+
# joints
|
|
64
|
+
|
|
65
|
+
joints = xmlData.findall('./joint')
|
|
66
|
+
for joint in joints:
|
|
67
|
+
joint_name = joint.attrib['name']
|
|
68
|
+
if joint.find('child') is None:
|
|
69
|
+
continue
|
|
70
|
+
|
|
71
|
+
parent_name = joint.find('parent').attrib['link']
|
|
72
|
+
f_parent = self.C.getFrame(parent_name)
|
|
73
|
+
if f_parent is None:
|
|
74
|
+
print('SHIT', joint_name)
|
|
75
|
+
break
|
|
76
|
+
|
|
77
|
+
# add an origin frame as pre frame?
|
|
78
|
+
elem = joint.find('origin')
|
|
79
|
+
if elem is not None:
|
|
80
|
+
f_origin = self.C.addFrame(f'{joint_name}_origin')
|
|
81
|
+
f_origin.setParent(f_parent)
|
|
82
|
+
self.setRelativePose(f_origin, elem)
|
|
83
|
+
f_parent = f_origin
|
|
84
|
+
|
|
85
|
+
f_joint = self.C.addFrame(joint_name)
|
|
86
|
+
f_joint.setParent(f_parent)
|
|
87
|
+
|
|
88
|
+
child_name = joint.find('child').attrib['link']
|
|
89
|
+
f_child = self.C.getFrame(child_name)
|
|
90
|
+
if f_child is None:
|
|
91
|
+
print('SHIT', joint_name)
|
|
92
|
+
break
|
|
93
|
+
f_child.setParent(f_joint, False)
|
|
94
|
+
|
|
95
|
+
elem = joint.find('limit')
|
|
96
|
+
limits = []
|
|
97
|
+
if elem is not None:
|
|
98
|
+
lo = elem.attrib.get('lower')
|
|
99
|
+
up = elem.attrib.get('upper')
|
|
100
|
+
eff = elem.attrib.get('effort')
|
|
101
|
+
vel = elem.attrib.get('velocity')
|
|
102
|
+
if eff=='0':
|
|
103
|
+
eff=None
|
|
104
|
+
if vel=='0':
|
|
105
|
+
vel=None
|
|
106
|
+
if lo is not None:
|
|
107
|
+
limits = [float(lo), float(up)]
|
|
108
|
+
# if vel is not None:
|
|
109
|
+
# print(' ctrl_limits: [%s -1 %s],' % (vel, eff), end='') #the 2nd value is an acceleration limit
|
|
110
|
+
# else:
|
|
111
|
+
# elem = joint.find('safety_controller')
|
|
112
|
+
# if elem is not None:
|
|
113
|
+
# lo = elem.attrib.get('soft_lower_limit')
|
|
114
|
+
# up = elem.attrib.get('soft_upper_limit')
|
|
115
|
+
# if lo is not None:
|
|
116
|
+
# print(' limits: [%s %s],' % (lo, up), end='')
|
|
117
|
+
|
|
118
|
+
elem = joint.find('mimic')
|
|
119
|
+
f_mimic = None
|
|
120
|
+
if elem is not None:
|
|
121
|
+
f_mimic = self.C.getFrame(elem.attrib['joint'])
|
|
122
|
+
if f_mimic is None:
|
|
123
|
+
print('SHIT', elem.attrib['joint'])
|
|
124
|
+
break
|
|
125
|
+
|
|
126
|
+
att = joint.attrib.get('type')
|
|
127
|
+
|
|
128
|
+
if att in ['revolute', 'continuous']:
|
|
129
|
+
elem = joint.find('axis')
|
|
130
|
+
if elem is not None:
|
|
131
|
+
axis = elem.attrib['xyz']
|
|
132
|
+
if axis=='1 0 0':
|
|
133
|
+
f_joint.setJoint(ry.JT.hingeX, limits, 1., f_mimic)
|
|
134
|
+
elif axis=='0 1 0':
|
|
135
|
+
f_joint.setJoint(ry.JT.hingeY, limits, 1., f_mimic)
|
|
136
|
+
elif axis=='0 0 1':
|
|
137
|
+
f_joint.setJoint(ry.JT.hingeZ, limits, 1., f_mimic)
|
|
138
|
+
elif axis=='0 0 -1':
|
|
139
|
+
f_joint.setJoint(ry.JT.hingeZ, limits, -1., f_mimic)
|
|
140
|
+
else:
|
|
141
|
+
raise Exception('CAN ONLY PROCESS X Y Z hinge joints, not', axis)
|
|
142
|
+
else:
|
|
143
|
+
f_joint.setJoint(ry.JT.hingeX, limits, 1., f_mimic)
|
|
144
|
+
|
|
145
|
+
if att == 'prismatic':
|
|
146
|
+
elem = joint.find('axis')
|
|
147
|
+
if elem is not None:
|
|
148
|
+
axis = elem.attrib['xyz']
|
|
149
|
+
if axis=='1 0 0':
|
|
150
|
+
f_joint.setJoint(ry.JT.transX, limits, 1., f_mimic)
|
|
151
|
+
elif axis=='0 1 0':
|
|
152
|
+
f_joint.setJoint(ry.JT.transY, limits, 1., f_mimic)
|
|
153
|
+
elif axis=='0 -1 0':
|
|
154
|
+
f_joint.setJoint(ry.JT.transY, limits, -1., f_mimic)
|
|
155
|
+
elif axis=='0 0 1':
|
|
156
|
+
f_joint.setJoint(ry.JT.transZ, limits, 1., f_mimic)
|
|
157
|
+
elif axis=='0 0 -1':
|
|
158
|
+
f_joint.setJoint(ry.JT.transZ, limits, -1., f_mimic)
|
|
159
|
+
else:
|
|
160
|
+
raise Exception('CAN ONLY PROCESS X Y Z prismatic joints, not', axis)
|
|
161
|
+
else:
|
|
162
|
+
f_joint.setJoint(ry.JT.transX, limits, 1., f_mimic)
|
|
163
|
+
|
|
164
|
+
if att == 'fixed':
|
|
165
|
+
f_joint.setJoint(ry.JT.rigid)
|
|
166
|
+
|
|
167
|
+
#elem = joint.find('axis')
|
|
168
|
+
#if elem is not None:
|
|
169
|
+
# print('axis:[%s]' % elem.attrib['xyz'])
|
|
170
|
+
|
|
171
|
+
def add_shape(self, shape, shape_name, f_link, isVisual):
|
|
172
|
+
f_shape = self.C.addFrame(shape_name)
|
|
173
|
+
f_shape.setParent(f_link)
|
|
174
|
+
|
|
175
|
+
elem = shape.find('origin')
|
|
176
|
+
if elem is not None:
|
|
177
|
+
self.setRelativePose(f_shape, elem)
|
|
178
|
+
|
|
179
|
+
elem = shape.find('geometry/box')
|
|
180
|
+
if elem is not None:
|
|
181
|
+
size = self.as_floats(elem.attrib['size'])
|
|
182
|
+
f_shape.setShape(ry.ST.box, size)
|
|
183
|
+
|
|
184
|
+
elem = shape.find('geometry/sphere')
|
|
185
|
+
if elem is not None:
|
|
186
|
+
size = self.as_floats(elem.attrib['size'])
|
|
187
|
+
f_shape.setShape(ry.ST.sphere, size)
|
|
188
|
+
|
|
189
|
+
elem = shape.find('geometry/cylinder')
|
|
190
|
+
if elem is not None:
|
|
191
|
+
size = [float(elem.attrib[tag]) for tag in ['length', 'radius']]
|
|
192
|
+
f_shape.setShape(ry.ST.cylinder, size)
|
|
193
|
+
|
|
194
|
+
elem = shape.find('geometry/mesh')
|
|
195
|
+
if elem is not None:
|
|
196
|
+
filename = elem.attrib['filename'].replace(self.meshPathRemove,'',1)
|
|
197
|
+
if self.meshExt is not None:
|
|
198
|
+
filename = filename[:-3] + self.meshExt
|
|
199
|
+
if 'scale' in elem.attrib:
|
|
200
|
+
scale = self.as_floats(elem.attrib['scale'])[0]
|
|
201
|
+
else:
|
|
202
|
+
scale = 1
|
|
203
|
+
filename = os.path.join(self.path, filename)
|
|
204
|
+
f_shape.setMeshFile(filename, scale)
|
|
205
|
+
|
|
206
|
+
elem = shape.find('material/color')
|
|
207
|
+
if elem is not None:
|
|
208
|
+
f_shape.setColor(self.as_floats(elem.attrib['rgba']))
|
|
209
|
+
|
|
210
|
+
# elem = shape.find('material')
|
|
211
|
+
# if elem is not None and 'name' in elem.attrib:
|
|
212
|
+
# mat = self.materials[elem.attrib['name']]
|
|
213
|
+
# if len(mat)==4: #rgba
|
|
214
|
+
# f_shape.setColor(mat)
|
|
215
|
+
# else:
|
|
216
|
+
# f_shape.setTextureFile(mat)
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
return f_shape
|
|
220
|
+
|
|
221
|
+
def as_floats(self, input_string):
|
|
222
|
+
return [float(num) for num in input_string.replace(',', ' ').split()]
|
|
223
|
+
|
|
224
|
+
def setRelativePose(self, f, attrib):
|
|
225
|
+
pos = attrib.get('xyz')
|
|
226
|
+
if pos=='0 0 0':
|
|
227
|
+
pos=None
|
|
228
|
+
if pos is not None:
|
|
229
|
+
f.setRelativePosition(self.as_floats(pos))
|
|
230
|
+
|
|
231
|
+
rpy = attrib.get('rpy')
|
|
232
|
+
if rpy=='0 0 0':
|
|
233
|
+
rpy=None
|
|
234
|
+
if rpy is not None:
|
|
235
|
+
q = ry.Quaternion()
|
|
236
|
+
q.setRollPitchYaw(self.as_floats(rpy))
|
|
237
|
+
f.setRelativeQuaternion(q.getArr())
|