robotic 0.2.9__cp312-cp312-manylinux2014_x86_64.whl → 0.2.9.dev2__cp312-cp312-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.

Files changed (316) hide show
  1. robotic/__init__.py +4 -0
  2. robotic/_robotic.pyi +13 -9
  3. robotic/_robotic.so +0 -0
  4. robotic/cleanMeshes.py +59 -0
  5. robotic/include/rai/Core/array.ipp +3 -1
  6. robotic/include/rai/Core/graph.h +2 -2
  7. robotic/include/rai/Core/util.h +8 -7
  8. robotic/include/rai/Geo/geo.h +3 -2
  9. robotic/include/rai/Geo/mesh.h +1 -3
  10. robotic/include/rai/KOMO/manipTools.h +2 -2
  11. robotic/include/rai/Kin/frame.h +4 -4
  12. robotic/include/rai/Kin/kin.h +4 -3
  13. robotic/include/rai/Kin/kin_physx.h +1 -2
  14. robotic/include/rai/ry/types.h +3 -2
  15. robotic/librai.so +0 -0
  16. robotic/meshTool +0 -0
  17. robotic/mujoco-import.py +10 -0
  18. robotic/rai-robotModels/g1/g1.g +1 -1
  19. robotic/rai-robotModels/g1/g1_29dof_conv.g +77 -0
  20. robotic/rai-robotModels/g1/g1_clean.g +38 -73
  21. robotic/rai-robotModels/g1/meshes/head_link.h5 +0 -0
  22. robotic/rai-robotModels/g1/meshes/left_ankle_pitch_link.h5 +0 -0
  23. robotic/rai-robotModels/g1/meshes/left_ankle_roll_link.h5 +0 -0
  24. robotic/rai-robotModels/g1/meshes/left_elbow_link.h5 +0 -0
  25. robotic/rai-robotModels/g1/meshes/left_hip_pitch_link.h5 +0 -0
  26. robotic/rai-robotModels/g1/meshes/left_hip_roll_link.h5 +0 -0
  27. robotic/rai-robotModels/g1/meshes/left_hip_yaw_link.h5 +0 -0
  28. robotic/rai-robotModels/g1/meshes/left_knee_link.h5 +0 -0
  29. robotic/rai-robotModels/g1/meshes/left_rubber_hand.h5 +0 -0
  30. robotic/rai-robotModels/g1/meshes/left_shoulder_pitch_link.h5 +0 -0
  31. robotic/rai-robotModels/g1/meshes/left_shoulder_roll_link.h5 +0 -0
  32. robotic/rai-robotModels/g1/meshes/left_shoulder_yaw_link.h5 +0 -0
  33. robotic/rai-robotModels/g1/meshes/left_wrist_pitch_link.h5 +0 -0
  34. robotic/rai-robotModels/g1/meshes/left_wrist_roll_link.h5 +0 -0
  35. robotic/rai-robotModels/g1/meshes/left_wrist_yaw_link.h5 +0 -0
  36. robotic/rai-robotModels/g1/meshes/logo_link.h5 +0 -0
  37. robotic/rai-robotModels/g1/meshes/pelvis.h5 +0 -0
  38. robotic/rai-robotModels/g1/meshes/pelvis_contour_link.h5 +0 -0
  39. robotic/rai-robotModels/g1/meshes/right_ankle_pitch_link.h5 +0 -0
  40. robotic/rai-robotModels/g1/meshes/right_ankle_roll_link.h5 +0 -0
  41. robotic/rai-robotModels/g1/meshes/right_elbow_link.h5 +0 -0
  42. robotic/rai-robotModels/g1/meshes/right_hip_pitch_link.h5 +0 -0
  43. robotic/rai-robotModels/g1/meshes/right_hip_roll_link.h5 +0 -0
  44. robotic/rai-robotModels/g1/meshes/right_hip_yaw_link.h5 +0 -0
  45. robotic/rai-robotModels/g1/meshes/right_knee_link.h5 +0 -0
  46. robotic/rai-robotModels/g1/meshes/right_rubber_hand.h5 +0 -0
  47. robotic/rai-robotModels/g1/meshes/right_shoulder_pitch_link.h5 +0 -0
  48. robotic/rai-robotModels/g1/meshes/right_shoulder_roll_link.h5 +0 -0
  49. robotic/rai-robotModels/g1/meshes/right_shoulder_yaw_link.h5 +0 -0
  50. robotic/rai-robotModels/g1/meshes/right_wrist_pitch_link.h5 +0 -0
  51. robotic/rai-robotModels/g1/meshes/right_wrist_roll_link.h5 +0 -0
  52. robotic/rai-robotModels/g1/meshes/right_wrist_yaw_link.h5 +0 -0
  53. robotic/rai-robotModels/g1/meshes/torso_link.h5 +0 -0
  54. robotic/rai-robotModels/g1/meshes/waist_roll_link.h5 +0 -0
  55. robotic/rai-robotModels/g1/meshes/waist_support_link.h5 +0 -0
  56. robotic/rai-robotModels/g1/meshes/waist_yaw_link.h5 +0 -0
  57. robotic/rai-robotModels/panda/meshes/finger.h5 +0 -0
  58. robotic/rai-robotModels/panda/meshes/hand.h5 +0 -0
  59. robotic/rai-robotModels/panda/meshes/link0.h5 +0 -0
  60. robotic/rai-robotModels/panda/meshes/link1.h5 +0 -0
  61. robotic/rai-robotModels/panda/meshes/link2.h5 +0 -0
  62. robotic/rai-robotModels/panda/meshes/link3.h5 +0 -0
  63. robotic/rai-robotModels/panda/meshes/link4.h5 +0 -0
  64. robotic/rai-robotModels/panda/meshes/link5.h5 +0 -0
  65. robotic/rai-robotModels/panda/meshes/link6.h5 +0 -0
  66. robotic/rai-robotModels/panda/meshes/link7.h5 +0 -0
  67. robotic/rai-robotModels/panda/panda.g +1 -1
  68. robotic/rai-robotModels/panda/panda_arm_hand_conv.g +24 -0
  69. robotic/rai-robotModels/panda/panda_clean.g +21 -45
  70. robotic/rai-robotModels/panda/panda_gripper.g +3 -3
  71. robotic/rai-robotModels/pr2/meshes/base.h5 +0 -0
  72. robotic/rai-robotModels/pr2/meshes/base_color.png +0 -0
  73. robotic/rai-robotModels/pr2/meshes/caster.h5 +0 -0
  74. robotic/rai-robotModels/pr2/meshes/elbow_flex.h5 +0 -0
  75. robotic/rai-robotModels/pr2/meshes/elbow_flex_color.png +0 -0
  76. robotic/rai-robotModels/pr2/meshes/forearm.h5 +0 -0
  77. robotic/rai-robotModels/pr2/meshes/forearm_color.png +0 -0
  78. robotic/rai-robotModels/pr2/meshes/forearm_roll.h5 +0 -0
  79. robotic/rai-robotModels/pr2/meshes/gripper_palm.h5 +0 -0
  80. robotic/rai-robotModels/pr2/meshes/gripper_palm_color.png +0 -0
  81. robotic/rai-robotModels/pr2/meshes/head_pan.h5 +0 -0
  82. robotic/rai-robotModels/pr2/meshes/head_pan_color.png +0 -0
  83. robotic/rai-robotModels/pr2/meshes/head_tilt.h5 +0 -0
  84. robotic/rai-robotModels/pr2/meshes/head_tilt_color.png +0 -0
  85. robotic/rai-robotModels/pr2/meshes/l_finger.h5 +0 -0
  86. robotic/rai-robotModels/pr2/meshes/l_finger_color.png +0 -0
  87. robotic/rai-robotModels/pr2/meshes/l_finger_tip.h5 +0 -0
  88. robotic/rai-robotModels/pr2/meshes/l_finger_tip_color.png +0 -0
  89. robotic/rai-robotModels/pr2/meshes/shoulder_lift.h5 +0 -0
  90. robotic/rai-robotModels/pr2/meshes/shoulder_lift_color.png +0 -0
  91. robotic/rai-robotModels/pr2/meshes/shoulder_pan.h5 +0 -0
  92. robotic/rai-robotModels/pr2/meshes/shoulder_pan_color.png +0 -0
  93. robotic/rai-robotModels/pr2/meshes/tilting_hokuyo.h5 +0 -0
  94. robotic/rai-robotModels/pr2/meshes/tilting_hokuyo_color.png +0 -0
  95. robotic/rai-robotModels/pr2/meshes/torso_lift.h5 +0 -0
  96. robotic/rai-robotModels/pr2/meshes/torso_lift_color.png +0 -0
  97. robotic/rai-robotModels/pr2/meshes/upper_arm.h5 +0 -0
  98. robotic/rai-robotModels/pr2/meshes/upper_arm_color.png +0 -0
  99. robotic/rai-robotModels/pr2/meshes/upper_arm_roll.h5 +0 -0
  100. robotic/rai-robotModels/pr2/meshes/upper_arm_roll_color.png +0 -0
  101. robotic/rai-robotModels/pr2/meshes/wheel.h5 +0 -0
  102. robotic/rai-robotModels/pr2/meshes/wheel_color.png +0 -0
  103. robotic/rai-robotModels/pr2/meshes/wrist_color.png +0 -0
  104. robotic/rai-robotModels/pr2/meshes/wrist_flex.h5 +0 -0
  105. robotic/rai-robotModels/pr2/meshes/wrist_roll.h5 +0 -0
  106. robotic/rai-robotModels/pr2/pr2.g +1 -1
  107. robotic/rai-robotModels/pr2/pr2_clean.g +5 -1
  108. robotic/rai-robotModels/pr2/pr2_conv.g +218 -0
  109. robotic/rai-robotModels/ranger/meshes/ranger_mini3.h5 +0 -0
  110. robotic/rai-robotModels/ranger/meshes/ranger_mini_v3_wheel.h5 +0 -0
  111. robotic/rai-robotModels/ranger/meshes/ranger_mini_v3_wheel_right.h5 +0 -0
  112. robotic/rai-robotModels/ranger/ranger.g +5 -5
  113. robotic/rai-robotModels/ranger/ranger_clean.g +5 -5
  114. robotic/rai-robotModels/ranger/ranger_mini_conv.g +14 -0
  115. robotic/rai-robotModels/robotiq/meshes/robotiq_arg2f_85_base_link.h5 +0 -0
  116. robotic/rai-robotModels/robotiq/meshes/robotiq_arg2f_85_inner_finger.h5 +0 -0
  117. robotic/rai-robotModels/robotiq/meshes/robotiq_arg2f_85_inner_knuckle.h5 +0 -0
  118. robotic/rai-robotModels/robotiq/meshes/robotiq_arg2f_85_outer_finger.h5 +0 -0
  119. robotic/rai-robotModels/robotiq/meshes/robotiq_arg2f_85_outer_knuckle.h5 +0 -0
  120. robotic/rai-robotModels/robotiq/robotiq.g +2 -2
  121. robotic/rai-robotModels/robotiq/robotiq_arg2f_85_model_conv.g +21 -0
  122. robotic/rai-robotModels/robotiq/robotiq_clean.g +16 -16
  123. robotic/rai-robotModels/scenarios/ballFinger.g +2 -2
  124. robotic/rai-robotModels/tests/compound.g +3 -6
  125. robotic/rai-robotModels/ur10/meshes/base.h5 +0 -0
  126. robotic/rai-robotModels/ur10/meshes/forearm.h5 +0 -0
  127. robotic/rai-robotModels/ur10/meshes/shoulder.h5 +0 -0
  128. robotic/rai-robotModels/ur10/meshes/upperarm.h5 +0 -0
  129. robotic/rai-robotModels/ur10/meshes/wrist1.h5 +0 -0
  130. robotic/rai-robotModels/ur10/meshes/wrist2.h5 +0 -0
  131. robotic/rai-robotModels/ur10/meshes/wrist3.h5 +0 -0
  132. robotic/rai-robotModels/ur10/ur10.g +1 -1
  133. robotic/rai-robotModels/ur10/ur10_conv.g +17 -0
  134. robotic/ry-h5info +5 -1
  135. robotic/ry-test +1 -1
  136. robotic/ry-urdfConvert.py +73 -0
  137. robotic/src/config_mujoco.py +237 -0
  138. robotic/src/config_urdf.py +237 -0
  139. robotic/src/mesh_helper.py +395 -0
  140. robotic/src/yaml_helper.py +19 -0
  141. robotic/version.py +1 -1
  142. {robotic-0.2.9.data → robotic-0.2.9.dev2.data}/scripts/ry-h5info +5 -1
  143. {robotic-0.2.9.data → robotic-0.2.9.dev2.data}/scripts/ry-test +1 -1
  144. {robotic-0.2.9.dist-info → robotic-0.2.9.dev2.dist-info}/METADATA +3 -2
  145. robotic-0.2.9.dev2.dist-info/RECORD +369 -0
  146. {robotic-0.2.9.dist-info → robotic-0.2.9.dev2.dist-info}/WHEEL +1 -1
  147. robotic/rai-robotModels/baxter/baxter.g +0 -49
  148. robotic/rai-robotModels/baxter/baxter_clean.g +0 -116
  149. robotic/rai-robotModels/baxter/baxter_clean2.g +0 -205
  150. robotic/rai-robotModels/baxter/baxter_clean3.g +0 -223
  151. robotic/rai-robotModels/baxter/baxter_description/meshes/base/PEDESTAL.ply +0 -0
  152. robotic/rai-robotModels/baxter/baxter_description/meshes/base/pedestal_link_collision.ply +0 -0
  153. robotic/rai-robotModels/baxter/baxter_description/meshes/head/H0.ply +0 -0
  154. robotic/rai-robotModels/baxter/baxter_description/meshes/head/H1.ply +0 -0
  155. robotic/rai-robotModels/baxter/baxter_description/meshes/lower_elbow/E1.ply +0 -0
  156. robotic/rai-robotModels/baxter/baxter_description/meshes/lower_forearm/W1.ply +0 -0
  157. robotic/rai-robotModels/baxter/baxter_description/meshes/lower_shoulder/S1.ply +0 -0
  158. robotic/rai-robotModels/baxter/baxter_description/meshes/torso/base_link.ply +0 -0
  159. robotic/rai-robotModels/baxter/baxter_description/meshes/torso/base_link_collision.ply +0 -0
  160. robotic/rai-robotModels/baxter/baxter_description/meshes/upper_elbow/E0.ply +0 -0
  161. robotic/rai-robotModels/baxter/baxter_description/meshes/upper_forearm/W0.ply +0 -0
  162. robotic/rai-robotModels/baxter/baxter_description/meshes/upper_shoulder/S0.ply +0 -0
  163. robotic/rai-robotModels/baxter/baxter_description/meshes/wrist/W2.ply +0 -0
  164. robotic/rai-robotModels/baxter/baxter_new.g +0 -53
  165. robotic/rai-robotModels/baxter/rethink_ee_description/meshes/electric_gripper/electric_gripper_base.ply +0 -0
  166. robotic/rai-robotModels/baxter/rethink_ee_description/meshes/electric_gripper/fingers/extended_narrow.ply +0 -0
  167. robotic/rai-robotModels/baxter/rethink_ee_description/meshes/electric_gripper/fingers/half_round_tip.ply +0 -0
  168. robotic/rai-robotModels/baxter/rethink_ee_description/meshes/electric_gripper/fingers/paddle_tip.ply +0 -0
  169. robotic/rai-robotModels/baxter/rethink_ee_description/meshes/pneumatic_gripper/pneumatic_gripper_base.ply +0 -0
  170. robotic/rai-robotModels/baxter/rethink_ee_description/meshes/pneumatic_gripper/pneumatic_gripper_w_cup.ply +0 -0
  171. robotic/rai-robotModels/g1/meshes/head_link.ply +0 -0
  172. robotic/rai-robotModels/g1/meshes/left_ankle_pitch_link.ply +0 -0
  173. robotic/rai-robotModels/g1/meshes/left_ankle_roll_link.ply +0 -0
  174. robotic/rai-robotModels/g1/meshes/left_elbow_link.ply +0 -0
  175. robotic/rai-robotModels/g1/meshes/left_hand_index_0_link.ply +0 -0
  176. robotic/rai-robotModels/g1/meshes/left_hand_index_1_link.ply +0 -0
  177. robotic/rai-robotModels/g1/meshes/left_hand_middle_0_link.ply +0 -0
  178. robotic/rai-robotModels/g1/meshes/left_hand_middle_1_link.ply +0 -0
  179. robotic/rai-robotModels/g1/meshes/left_hand_palm_link.ply +0 -0
  180. robotic/rai-robotModels/g1/meshes/left_hand_thumb_0_link.ply +0 -0
  181. robotic/rai-robotModels/g1/meshes/left_hand_thumb_1_link.ply +0 -0
  182. robotic/rai-robotModels/g1/meshes/left_hand_thumb_2_link.ply +0 -0
  183. robotic/rai-robotModels/g1/meshes/left_hip_pitch_link.ply +0 -0
  184. robotic/rai-robotModels/g1/meshes/left_hip_roll_link.ply +0 -0
  185. robotic/rai-robotModels/g1/meshes/left_hip_yaw_link.ply +0 -0
  186. robotic/rai-robotModels/g1/meshes/left_knee_link.ply +0 -0
  187. robotic/rai-robotModels/g1/meshes/left_rubber_hand.ply +0 -0
  188. robotic/rai-robotModels/g1/meshes/left_shoulder_pitch_link.ply +0 -0
  189. robotic/rai-robotModels/g1/meshes/left_shoulder_roll_link.ply +0 -0
  190. robotic/rai-robotModels/g1/meshes/left_shoulder_yaw_link.ply +0 -0
  191. robotic/rai-robotModels/g1/meshes/left_wrist_pitch_link.ply +0 -0
  192. robotic/rai-robotModels/g1/meshes/left_wrist_roll_link.ply +0 -0
  193. robotic/rai-robotModels/g1/meshes/left_wrist_roll_rubber_hand.ply +0 -0
  194. robotic/rai-robotModels/g1/meshes/left_wrist_yaw_link.ply +0 -0
  195. robotic/rai-robotModels/g1/meshes/logo_link.ply +0 -0
  196. robotic/rai-robotModels/g1/meshes/pelvis.ply +0 -0
  197. robotic/rai-robotModels/g1/meshes/pelvis_contour_link.ply +0 -0
  198. robotic/rai-robotModels/g1/meshes/right_ankle_pitch_link.ply +0 -0
  199. robotic/rai-robotModels/g1/meshes/right_ankle_roll_link.ply +0 -0
  200. robotic/rai-robotModels/g1/meshes/right_elbow_link.ply +0 -0
  201. robotic/rai-robotModels/g1/meshes/right_hand_index_0_link.ply +0 -0
  202. robotic/rai-robotModels/g1/meshes/right_hand_index_1_link.ply +0 -0
  203. robotic/rai-robotModels/g1/meshes/right_hand_middle_0_link.ply +0 -0
  204. robotic/rai-robotModels/g1/meshes/right_hand_middle_1_link.ply +0 -0
  205. robotic/rai-robotModels/g1/meshes/right_hand_palm_link.ply +0 -0
  206. robotic/rai-robotModels/g1/meshes/right_hand_thumb_0_link.ply +0 -0
  207. robotic/rai-robotModels/g1/meshes/right_hand_thumb_1_link.ply +0 -0
  208. robotic/rai-robotModels/g1/meshes/right_hand_thumb_2_link.ply +0 -0
  209. robotic/rai-robotModels/g1/meshes/right_hip_pitch_link.ply +0 -0
  210. robotic/rai-robotModels/g1/meshes/right_hip_roll_link.ply +0 -0
  211. robotic/rai-robotModels/g1/meshes/right_hip_yaw_link.ply +0 -0
  212. robotic/rai-robotModels/g1/meshes/right_knee_link.ply +0 -0
  213. robotic/rai-robotModels/g1/meshes/right_rubber_hand.ply +0 -0
  214. robotic/rai-robotModels/g1/meshes/right_shoulder_pitch_link.ply +0 -0
  215. robotic/rai-robotModels/g1/meshes/right_shoulder_roll_link.ply +0 -0
  216. robotic/rai-robotModels/g1/meshes/right_shoulder_yaw_link.ply +0 -0
  217. robotic/rai-robotModels/g1/meshes/right_wrist_pitch_link.ply +0 -0
  218. robotic/rai-robotModels/g1/meshes/right_wrist_roll_link.ply +0 -0
  219. robotic/rai-robotModels/g1/meshes/right_wrist_roll_rubber_hand.ply +0 -0
  220. robotic/rai-robotModels/g1/meshes/right_wrist_yaw_link.ply +0 -0
  221. robotic/rai-robotModels/g1/meshes/torso_constraint_L_link.ply +0 -0
  222. robotic/rai-robotModels/g1/meshes/torso_constraint_L_rod_link.ply +0 -0
  223. robotic/rai-robotModels/g1/meshes/torso_constraint_R_link.ply +0 -0
  224. robotic/rai-robotModels/g1/meshes/torso_constraint_R_rod_link.ply +0 -0
  225. robotic/rai-robotModels/g1/meshes/torso_link.ply +0 -0
  226. robotic/rai-robotModels/g1/meshes/waist_constraint_L.ply +0 -0
  227. robotic/rai-robotModels/g1/meshes/waist_constraint_R.ply +0 -0
  228. robotic/rai-robotModels/g1/meshes/waist_roll_link.ply +0 -0
  229. robotic/rai-robotModels/g1/meshes/waist_support_link.ply +0 -0
  230. robotic/rai-robotModels/g1/meshes/waist_yaw_link.ply +0 -0
  231. robotic/rai-robotModels/panda/franka_description/meshes/collision/finger.stl +0 -0
  232. robotic/rai-robotModels/panda/franka_description/meshes/collision/hand.stl +0 -0
  233. robotic/rai-robotModels/panda/franka_description/meshes/collision/link0.stl +0 -0
  234. robotic/rai-robotModels/panda/franka_description/meshes/collision/link1.stl +0 -0
  235. robotic/rai-robotModels/panda/franka_description/meshes/collision/link2.stl +0 -0
  236. robotic/rai-robotModels/panda/franka_description/meshes/collision/link3.stl +0 -0
  237. robotic/rai-robotModels/panda/franka_description/meshes/collision/link4.stl +0 -0
  238. robotic/rai-robotModels/panda/franka_description/meshes/collision/link5.stl +0 -0
  239. robotic/rai-robotModels/panda/franka_description/meshes/collision/link6.stl +0 -0
  240. robotic/rai-robotModels/panda/franka_description/meshes/collision/link7.stl +0 -0
  241. robotic/rai-robotModels/panda/franka_description/meshes/visual/HOWTO.sh +0 -10
  242. robotic/rai-robotModels/panda/franka_description/meshes/visual/HOWTO2.sh +0 -7
  243. robotic/rai-robotModels/panda/franka_description/meshes/visual/convMeshes.mlx +0 -38
  244. robotic/rai-robotModels/panda/franka_description/meshes/visual/finger.ply +0 -0
  245. robotic/rai-robotModels/panda/franka_description/meshes/visual/hand.ply +0 -0
  246. robotic/rai-robotModels/panda/franka_description/meshes/visual/link0.ply +0 -0
  247. robotic/rai-robotModels/panda/franka_description/meshes/visual/link1.ply +0 -0
  248. robotic/rai-robotModels/panda/franka_description/meshes/visual/link2.ply +0 -0
  249. robotic/rai-robotModels/panda/franka_description/meshes/visual/link3.ply +0 -0
  250. robotic/rai-robotModels/panda/franka_description/meshes/visual/link4.ply +0 -0
  251. robotic/rai-robotModels/panda/franka_description/meshes/visual/link5.ply +0 -0
  252. robotic/rai-robotModels/panda/franka_description/meshes/visual/link6.ply +0 -0
  253. robotic/rai-robotModels/panda/franka_description/meshes/visual/link7.ply +0 -0
  254. robotic/rai-robotModels/panda/franka_description/meshes/visual/script.mlx +0 -28
  255. robotic/rai-robotModels/pr2/pr2_description/meshes/base_v0/base.ply +0 -0
  256. robotic/rai-robotModels/pr2/pr2_description/meshes/base_v0/base_L.ply +0 -0
  257. robotic/rai-robotModels/pr2/pr2_description/meshes/base_v0/caster.ply +0 -0
  258. robotic/rai-robotModels/pr2/pr2_description/meshes/base_v0/caster_L.ply +0 -0
  259. robotic/rai-robotModels/pr2/pr2_description/meshes/base_v0/pr2_wheel.ply +0 -0
  260. robotic/rai-robotModels/pr2/pr2_description/meshes/base_v0/wheel.ply +0 -0
  261. robotic/rai-robotModels/pr2/pr2_description/meshes/forearm_v0/forearm.ply +0 -0
  262. robotic/rai-robotModels/pr2/pr2_description/meshes/forearm_v0/wrist_flex.ply +0 -0
  263. robotic/rai-robotModels/pr2/pr2_description/meshes/forearm_v0/wrist_roll.ply +0 -0
  264. robotic/rai-robotModels/pr2/pr2_description/meshes/forearm_v0/wrist_roll_L.ply +0 -0
  265. robotic/rai-robotModels/pr2/pr2_description/meshes/gripper_v0/gripper_palm.ply +0 -0
  266. robotic/rai-robotModels/pr2/pr2_description/meshes/gripper_v0/l_finger.ply +0 -0
  267. robotic/rai-robotModels/pr2/pr2_description/meshes/gripper_v0/l_finger_tip.ply +0 -0
  268. robotic/rai-robotModels/pr2/pr2_description/meshes/head_v0/head_pan.ply +0 -0
  269. robotic/rai-robotModels/pr2/pr2_description/meshes/head_v0/head_pan_L.ply +0 -0
  270. robotic/rai-robotModels/pr2/pr2_description/meshes/head_v0/head_tilt.ply +0 -0
  271. robotic/rai-robotModels/pr2/pr2_description/meshes/head_v0/head_tilt_L.ply +0 -0
  272. robotic/rai-robotModels/pr2/pr2_description/meshes/shoulder_v0/shoulder_lift.ply +0 -0
  273. robotic/rai-robotModels/pr2/pr2_description/meshes/shoulder_v0/shoulder_pan.ply +0 -0
  274. robotic/rai-robotModels/pr2/pr2_description/meshes/shoulder_v0/shoulder_yaw.ply +0 -0
  275. robotic/rai-robotModels/pr2/pr2_description/meshes/shoulder_v0/upper_arm_roll.ply +0 -0
  276. robotic/rai-robotModels/pr2/pr2_description/meshes/shoulder_v0/upper_arm_roll_L.ply +0 -0
  277. robotic/rai-robotModels/pr2/pr2_description/meshes/tilting_laser_v0/hok_tilt.ply +0 -0
  278. robotic/rai-robotModels/pr2/pr2_description/meshes/tilting_laser_v0/tilting_hokuyo.ply +0 -0
  279. robotic/rai-robotModels/pr2/pr2_description/meshes/tilting_laser_v0/tilting_hokuyo_L.ply +0 -0
  280. robotic/rai-robotModels/pr2/pr2_description/meshes/torso_v0/torso.ply +0 -0
  281. robotic/rai-robotModels/pr2/pr2_description/meshes/torso_v0/torso_lift.ply +0 -0
  282. robotic/rai-robotModels/pr2/pr2_description/meshes/torso_v0/torso_lift_L.ply +0 -0
  283. robotic/rai-robotModels/pr2/pr2_description/meshes/upper_arm_v0/elbow_flex.ply +0 -0
  284. robotic/rai-robotModels/pr2/pr2_description/meshes/upper_arm_v0/forearm_roll.ply +0 -0
  285. robotic/rai-robotModels/pr2/pr2_description/meshes/upper_arm_v0/forearm_roll_L.ply +0 -0
  286. robotic/rai-robotModels/pr2/pr2_description/meshes/upper_arm_v0/upper_arm.ply +0 -0
  287. robotic/rai-robotModels/ranger/meshes/cleanMeshes.mlx +0 -23
  288. robotic/rai-robotModels/ranger/meshes/cleanMeshes.sh +0 -8
  289. robotic/rai-robotModels/ranger/meshes/ranger_mini3.ply +0 -0
  290. robotic/rai-robotModels/ranger/meshes/ranger_mini_v3_wheel.ply +0 -0
  291. robotic/rai-robotModels/ranger/meshes/ranger_mini_v3_wheel_right.ply +0 -0
  292. robotic/rai-robotModels/robotiq/meshes/visual/robotiq_arg2f_85_base_link.ply +0 -0
  293. robotic/rai-robotModels/robotiq/meshes/visual/robotiq_arg2f_85_base_link_x.ply +0 -10
  294. robotic/rai-robotModels/robotiq/meshes/visual/robotiq_arg2f_85_inner_finger.ply +0 -0
  295. robotic/rai-robotModels/robotiq/meshes/visual/robotiq_arg2f_85_inner_knuckle.ply +0 -0
  296. robotic/rai-robotModels/robotiq/meshes/visual/robotiq_arg2f_85_outer_finger.ply +0 -0
  297. robotic/rai-robotModels/robotiq/meshes/visual/robotiq_arg2f_85_outer_knuckle.ply +0 -0
  298. robotic/rai-robotModels/robotiq/meshes/visual/robotiq_arg2f_85_pad.ply +0 -0
  299. robotic/rai-robotModels/robotiq/meshes/visual/robotiq_gripper_coupling.ply +0 -0
  300. robotic/rai-robotModels/ur10/ur_description/meshes/ur10/visual/Base.ply +0 -0
  301. robotic/rai-robotModels/ur10/ur_description/meshes/ur10/visual/Forearm.ply +0 -0
  302. robotic/rai-robotModels/ur10/ur_description/meshes/ur10/visual/Shoulder.ply +0 -0
  303. robotic/rai-robotModels/ur10/ur_description/meshes/ur10/visual/UpperArm.ply +0 -0
  304. robotic/rai-robotModels/ur10/ur_description/meshes/ur10/visual/Wrist1.ply +0 -0
  305. robotic/rai-robotModels/ur10/ur_description/meshes/ur10/visual/Wrist2.ply +0 -0
  306. robotic/rai-robotModels/ur10/ur_description/meshes/ur10/visual/Wrist3.ply +0 -0
  307. robotic-0.2.9.dist-info/RECORD +0 -420
  308. /robotic/rai-robotModels/robotiq/meshes/{visual/robotiq_ft300.ply → robotiq_ft300.ply} +0 -0
  309. {robotic-0.2.9.data → robotic-0.2.9.dev2.data}/scripts/ry-bot +0 -0
  310. {robotic-0.2.9.data → robotic-0.2.9.dev2.data}/scripts/ry-info +0 -0
  311. {robotic-0.2.9.data → robotic-0.2.9.dev2.data}/scripts/ry-meshTool +0 -0
  312. {robotic-0.2.9.data → robotic-0.2.9.dev2.data}/scripts/ry-urdf2rai +0 -0
  313. {robotic-0.2.9.data → robotic-0.2.9.dev2.data}/scripts/ry-urdf2yaml +0 -0
  314. {robotic-0.2.9.data → robotic-0.2.9.dev2.data}/scripts/ry-view +0 -0
  315. {robotic-0.2.9.dist-info → robotic-0.2.9.dev2.dist-info/licenses}/LICENSE +0 -0
  316. {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())