scikit-robot 0.4.3__tar.gz → 0.4.4__tar.gz

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.
Files changed (223) hide show
  1. {scikit_robot-0.4.3/scikit_robot.egg-info → scikit_robot-0.4.4}/PKG-INFO +1 -1
  2. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/pyproject.toml +1 -1
  3. {scikit_robot-0.4.3 → scikit_robot-0.4.4/scikit_robot.egg-info}/PKG-INFO +1 -1
  4. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/scikit_robot.egg-info/SOURCES.txt +1 -0
  5. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/model/robot_model.py +75 -7
  6. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/viewers/__init__.py +16 -1
  7. scikit_robot-0.4.4/skrobot/viewers/_offscreen.py +495 -0
  8. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/LICENSE +0 -0
  9. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/MANIFEST.in +0 -0
  10. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/README.md +0 -0
  11. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/scikit_robot.egg-info/dependency_links.txt +0 -0
  12. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/scikit_robot.egg-info/entry_points.txt +0 -0
  13. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/scikit_robot.egg-info/not-zip-safe +0 -0
  14. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/scikit_robot.egg-info/requires.txt +0 -0
  15. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/scikit_robot.egg-info/top_level.txt +0 -0
  16. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/setup.cfg +0 -0
  17. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/__init__.py +0 -0
  18. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/_lazy_imports.py +0 -0
  19. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/apps/__init__.py +0 -0
  20. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/apps/canonicalize_urdf.py +0 -0
  21. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/apps/change_urdf_root.py +0 -0
  22. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/apps/cli.py +0 -0
  23. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/apps/convert_urdf_mesh.py +0 -0
  24. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/apps/convert_urdf_to_mjcf.py +0 -0
  25. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/apps/convert_urdf_to_primitives.py +0 -0
  26. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/apps/convert_urdf_to_usd.py +0 -0
  27. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/apps/convert_wheel_collision.py +0 -0
  28. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/apps/extract_sub_urdf.py +0 -0
  29. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/apps/generate_robot_class.py +0 -0
  30. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/apps/modularize_urdf.py +0 -0
  31. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/apps/scale_urdf.py +0 -0
  32. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/apps/transform_urdf.py +0 -0
  33. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/apps/urdf_hash.py +0 -0
  34. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/apps/urdf_tree.py +0 -0
  35. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/apps/visualize_mesh.py +0 -0
  36. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/apps/visualize_urdf.py +0 -0
  37. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/assembly/__init__.py +0 -0
  38. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/assembly/module_assembly.py +0 -0
  39. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/assembly/module_registry.py +0 -0
  40. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/backend/__init__.py +0 -0
  41. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/backend/jax_backend.py +0 -0
  42. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/backend/math_utils.py +0 -0
  43. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/backend/numpy_backend.py +0 -0
  44. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/backend/registry.py +0 -0
  45. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/collision/__init__.py +0 -0
  46. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/collision/distance.py +0 -0
  47. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/collision/environment_collision.py +0 -0
  48. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/collision/geometry.py +0 -0
  49. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/collision/robot_collision.py +0 -0
  50. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/collision/self_collision.py +0 -0
  51. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/coordinates/__init__.py +0 -0
  52. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/coordinates/base.py +0 -0
  53. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/coordinates/geo.py +0 -0
  54. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/coordinates/math.py +0 -0
  55. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/__init__.py +0 -0
  56. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/kuka.urdf +0 -0
  57. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/finger_base_left.stl +0 -0
  58. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/finger_base_right.stl +0 -0
  59. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/finger_tip_left.stl +0 -0
  60. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/finger_tip_right.stl +0 -0
  61. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_0.mtl +0 -0
  62. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_0.obj +0 -0
  63. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_0.stl +0 -0
  64. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_1.mtl +0 -0
  65. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_1.obj +0 -0
  66. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_1.stl +0 -0
  67. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_2.mtl +0 -0
  68. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_2.obj +0 -0
  69. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_2.stl +0 -0
  70. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_3.mtl +0 -0
  71. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_3.obj +0 -0
  72. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_3.stl +0 -0
  73. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_4.mtl +0 -0
  74. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_4.obj +0 -0
  75. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_4.stl +0 -0
  76. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_5.mtl +0 -0
  77. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_5.obj +0 -0
  78. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_5.stl +0 -0
  79. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_6.mtl +0 -0
  80. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_6.obj +0 -0
  81. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_6.stl +0 -0
  82. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_7.mtl +0 -0
  83. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_7.obj +0 -0
  84. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/kuka_description/meshes/link_7.stl +0 -0
  85. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/robot_descriptions/urdf/r8_6.urdf +0 -0
  86. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/ros_config_templates/CMakeLists.txt.ros2.template +0 -0
  87. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/ros_config_templates/gazebo.launch.py.template +0 -0
  88. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/ros_config_templates/gazebo_moveit.launch.py.template +0 -0
  89. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/ros_config_templates/isaac_fjt_server.py.template +0 -0
  90. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/ros_config_templates/moveit.rviz.template +0 -0
  91. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/ros_config_templates/package.xml.ros2.template +0 -0
  92. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/ros_config_templates/ros2_control.xacro.joint.template +0 -0
  93. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/ros_config_templates/ros2_control.xacro.template +0 -0
  94. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/data/ros_config_templates/setup_assistant.template +0 -0
  95. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/dynamics/__init__.py +0 -0
  96. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/dynamics/differentiable.py +0 -0
  97. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/dynamics/gravity.py +0 -0
  98. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/export/__init__.py +0 -0
  99. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/export/contact_links.py +0 -0
  100. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/export/isaac/__init__.py +0 -0
  101. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/export/isaac/fjt_server.py +0 -0
  102. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/export/task.py +0 -0
  103. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/export/usd.py +0 -0
  104. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/interfaces/__init__.py +0 -0
  105. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/interfaces/_pybullet.py +0 -0
  106. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/interfaces/ros/__init__.py +0 -0
  107. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/interfaces/ros/base.py +0 -0
  108. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/interfaces/ros/move_base.py +0 -0
  109. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/interfaces/ros/nextage.py +0 -0
  110. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/interfaces/ros/panda.py +0 -0
  111. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/interfaces/ros/pr2.py +0 -0
  112. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/interfaces/ros/tf_utils.py +0 -0
  113. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/interfaces/ros/transform_listener.py +0 -0
  114. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/interfaces/ros2/__init__.py +0 -0
  115. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/interfaces/ros2/base.py +0 -0
  116. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/interfaces/ros2/gripper.py +0 -0
  117. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/interfaces/ros2/panda.py +0 -0
  118. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/kinematics/__init__.py +0 -0
  119. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/kinematics/_base_placement_jax.py +0 -0
  120. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/kinematics/base_placement.py +0 -0
  121. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/kinematics/differentiable.py +0 -0
  122. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/kinematics/inverse_reachability_map.py +0 -0
  123. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/kinematics/loop_closure.py +0 -0
  124. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/kinematics/reachability_map.py +0 -0
  125. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/model/__init__.py +0 -0
  126. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/model/joint.py +0 -0
  127. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/model/joint_limit_table.py +0 -0
  128. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/model/link.py +0 -0
  129. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/model/primitives.py +0 -0
  130. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/model/skeleton.py +0 -0
  131. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/models/__init__.py +0 -0
  132. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/models/aero.py +0 -0
  133. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/models/differential_wrist_sample.py +0 -0
  134. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/models/fetch.py +0 -0
  135. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/models/g1.py +0 -0
  136. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/models/griphis.py +0 -0
  137. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/models/hydrus.py +0 -0
  138. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/models/jaxon_jvrc.py +0 -0
  139. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/models/jedy.py +0 -0
  140. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/models/kuka.py +0 -0
  141. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/models/nextage.py +0 -0
  142. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/models/panda.py +0 -0
  143. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/models/pr2.py +0 -0
  144. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/models/r8_6.py +0 -0
  145. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/models/tycoon.py +0 -0
  146. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/models/urdf.py +0 -0
  147. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/planner/__init__.py +0 -0
  148. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/planner/collision_checker.py +0 -0
  149. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/planner/inverse_kinematics_optimization.py +0 -0
  150. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/planner/sqp_based.py +0 -0
  151. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/planner/swept_sphere.py +0 -0
  152. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/planner/trajectory_optimization/__init__.py +0 -0
  153. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/planner/trajectory_optimization/collision.py +0 -0
  154. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/planner/trajectory_optimization/fk_utils.py +0 -0
  155. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/planner/trajectory_optimization/gridsdf_collision.py +0 -0
  156. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/planner/trajectory_optimization/problem.py +0 -0
  157. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/planner/trajectory_optimization/residuals.py +0 -0
  158. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/planner/trajectory_optimization/solvers/__init__.py +0 -0
  159. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/planner/trajectory_optimization/solvers/augmented_lagrangian.py +0 -0
  160. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/planner/trajectory_optimization/solvers/base.py +0 -0
  161. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/planner/trajectory_optimization/solvers/gradient_descent.py +0 -0
  162. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/planner/trajectory_optimization/solvers/jaxls_solver.py +0 -0
  163. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/planner/trajectory_optimization/solvers/scipy_solver.py +0 -0
  164. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/planner/trajectory_optimization/solvers/solver_utils.py +0 -0
  165. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/planner/trajectory_optimization/trajectory.py +0 -0
  166. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/planner/trajectory_optimization/world_surface_collision.py +0 -0
  167. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/planner/utils.py +0 -0
  168. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/pycompat.py +0 -0
  169. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/sdf/__init__.py +0 -0
  170. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/sdf/signed_distance_function.py +0 -0
  171. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/__init__.py +0 -0
  172. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/aggregate.py +0 -0
  173. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/canonicalize.py +0 -0
  174. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/compare.py +0 -0
  175. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/extract_sub_urdf.py +0 -0
  176. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/flip_axis.py +0 -0
  177. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/hash.py +0 -0
  178. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/link_origins.py +0 -0
  179. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/llm_grouping.py +0 -0
  180. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/merge_fixed_links.py +0 -0
  181. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/modularize_urdf.py +0 -0
  182. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/primitives_converter.py +0 -0
  183. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/robot_class_generator.py +0 -0
  184. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/ros_config/__init__.py +0 -0
  185. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/ros_config/export.py +0 -0
  186. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/ros_config/gazebo_generator.py +0 -0
  187. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/ros_config/moveit_generator.py +0 -0
  188. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/ros_config/moveit_package.py +0 -0
  189. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/ros_config/urdf_parser.py +0 -0
  190. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/ros_package.py +0 -0
  191. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/ros_package_exporter.py +0 -0
  192. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/sanitize.py +0 -0
  193. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/scale_urdf.py +0 -0
  194. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/structure.py +0 -0
  195. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/transform_urdf.py +0 -0
  196. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/wheel_collision_converter.py +0 -0
  197. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/urdf/xml_root_link_changer.py +0 -0
  198. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/utils/__init__.py +0 -0
  199. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/utils/_blender_decimate_core.py +0 -0
  200. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/utils/_blender_remesh_core.py +0 -0
  201. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/utils/archive.py +0 -0
  202. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/utils/blender_mesh.py +0 -0
  203. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/utils/checksum.py +0 -0
  204. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/utils/convex_decomposition.py +0 -0
  205. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/utils/draco.py +0 -0
  206. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/utils/inertia.py +0 -0
  207. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/utils/listify.py +0 -0
  208. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/utils/mesh.py +0 -0
  209. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/utils/mjcf_converter.py +0 -0
  210. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/utils/package.py +0 -0
  211. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/utils/primitive_fitting.py +0 -0
  212. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/utils/urdf.py +0 -0
  213. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/utils/urdf_mesh.py +0 -0
  214. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/utils/video.py +0 -0
  215. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/utils/visualization.py +0 -0
  216. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/viewers/_base.py +0 -0
  217. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/viewers/_manipulability_ellipse.py +0 -0
  218. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/viewers/_mitsuba.py +0 -0
  219. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/viewers/_notebook.py +0 -0
  220. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/viewers/_path_utils.py +0 -0
  221. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/viewers/_pyrender.py +0 -0
  222. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/viewers/_trimesh.py +0 -0
  223. {scikit_robot-0.4.3 → scikit_robot-0.4.4}/skrobot/viewers/_viser.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scikit-robot
3
- Version: 0.4.3
3
+ Version: 0.4.4
4
4
  Summary: A Flexible Framework for Robot Control in Python
5
5
  Author-email: iory <ab.ioryz@gmail.com>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "scikit-robot"
7
- version = "0.4.3"
7
+ version = "0.4.4"
8
8
  description = "A Flexible Framework for Robot Control in Python"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scikit-robot
3
- Version: 0.4.3
3
+ Version: 0.4.4
4
4
  Summary: A Flexible Framework for Robot Control in Python
5
5
  Author-email: iory <ab.ioryz@gmail.com>
6
6
  License: MIT
@@ -214,6 +214,7 @@ skrobot/viewers/_base.py
214
214
  skrobot/viewers/_manipulability_ellipse.py
215
215
  skrobot/viewers/_mitsuba.py
216
216
  skrobot/viewers/_notebook.py
217
+ skrobot/viewers/_offscreen.py
217
218
  skrobot/viewers/_path_utils.py
218
219
  skrobot/viewers/_pyrender.py
219
220
  skrobot/viewers/_trimesh.py
@@ -1433,18 +1433,36 @@ class CascadedLink(CascadedCoords):
1433
1433
  % (use_base,))
1434
1434
  root_link = self._find_fullbody_root_link()
1435
1435
  virtual_link = Link(name='_fullbody_ik_virtual_world')
1436
+ # The virtual joint moves root_link relative to root_link's
1437
+ # coordinate parent (usually the robot model), so the joint's
1438
+ # frame is that parent's world frame. Left at the world origin,
1439
+ # the Jacobian's base columns ignore the robot's own pose: once
1440
+ # the robot is turned, x/y/yaw point the wrong way and the solve
1441
+ # diverges.
1442
+ if root_link.parent is not None:
1443
+ virtual_link.newcoords(root_link.parent.copy_worldcoords())
1436
1444
  state = {
1437
1445
  'root_link': root_link,
1438
1446
  'virtual_link': virtual_link,
1439
1447
  'orig_parent_link': root_link._parent_link,
1440
1448
  'orig_joint': root_link.joint,
1441
1449
  'rel_entries': [],
1450
+ # root_link's own coords, relative to its coordinate parent
1451
+ 'orig_local': Coordinates(pos=root_link.translation.copy(),
1452
+ rot=root_link.rotation.copy()),
1442
1453
  }
1443
1454
  virtual_joint = joint_cls(
1444
1455
  parent_link=virtual_link,
1445
1456
  child_link=root_link,
1446
1457
  name='_fullbody_ik_base_joint',
1447
1458
  )
1459
+ # joint_angle writes default_coords (+ the joint's motion) into
1460
+ # root_link's local coords, but Joint.__init__ took them from
1461
+ # copy_coords(), which is the world pose: away from the origin,
1462
+ # the first step would move root_link by the robot's own pose.
1463
+ virtual_joint.default_coords = Coordinates(
1464
+ pos=root_link.translation.copy(),
1465
+ rot=root_link.rotation.copy())
1448
1466
  # Detach root_link from its original parent's _child_links before
1449
1467
  # reparenting so the kinematic graph stays consistent (a link must
1450
1468
  # appear in at most one parent's child list at a time).
@@ -1496,6 +1514,18 @@ class CascadedLink(CascadedCoords):
1496
1514
  if self._relevance_predicate_table is not None:
1497
1515
  for key in state['rel_entries']:
1498
1516
  self._relevance_predicate_table.pop(key, None)
1517
+ # The solve left the base pose in root_link's local coords, i.e.
1518
+ # root_link is now offset from the robot. Move that pose onto the
1519
+ # robot and put root_link back where it was in it, so the robot's
1520
+ # coords are its base pose (as batch IK's base_poses are) and a
1521
+ # later robot.newcoords() does not carry the offset along.
1522
+ if root_link.parent is self:
1523
+ root_world = root_link.copy_worldcoords()
1524
+ root_link.newcoords(state['orig_local'].copy_worldcoords())
1525
+ self.newcoords(
1526
+ root_world.transform(
1527
+ state['orig_local'].inverse_transformation()),
1528
+ relative_coords='world')
1499
1529
 
1500
1530
  def _attach_batch_virtual_base_chain(self, use_base, link_list):
1501
1531
  """Inject a chain of single-DoF virtual joints above ``root_link``.
@@ -1541,7 +1571,14 @@ class CascadedLink(CascadedCoords):
1541
1571
  % (use_base,))
1542
1572
 
1543
1573
  root_link = self._find_fullbody_root_link()
1574
+ # The chain starts where root_link stands, so its DoFs move the
1575
+ # base in the base's own frame (as PlanarJoint / FloatingJoint do
1576
+ # with their default_coords). At the world origin they would turn
1577
+ # the robot about the origin, and the angles would mean nothing
1578
+ # without the start pose.
1579
+ root0 = root_link.copy_worldcoords()
1544
1580
  virtual_world = Link(name='_batch_ik_virtual_world')
1581
+ virtual_world.newcoords(root0.copy_worldcoords())
1545
1582
 
1546
1583
  chain_links = []
1547
1584
  chain_joints = []
@@ -1553,6 +1590,7 @@ class CascadedLink(CascadedCoords):
1553
1590
  else:
1554
1591
  child = Link(name='_batch_ik_virtual_{}_{}'.format(
1555
1592
  i, axis))
1593
+ child.newcoords(root0.copy_worldcoords())
1556
1594
  chain_links.append(child)
1557
1595
  if kind == 'lin':
1558
1596
  j = LinearJoint(
@@ -1592,6 +1630,12 @@ class CascadedLink(CascadedCoords):
1592
1630
  'orig_parent_link': root_link._parent_link,
1593
1631
  'orig_joint': root_link.joint,
1594
1632
  'orig_parent_had_child': False,
1633
+ # The chain's angles move root_link from root0, in its own
1634
+ # frame; keep root0 (and root_link in the robot's frame) so
1635
+ # base_poses can be returned as the robot's world pose.
1636
+ 'base_frame': (root0,
1637
+ self.copy_worldcoords().inverse_transformation()
1638
+ .transform(root0)),
1595
1639
  }
1596
1640
  # Detach root_link from its original parent's child list before
1597
1641
  # reparenting so the graph stays consistent (a link must appear in
@@ -2800,7 +2844,8 @@ class BatchIKAttempts(object):
2800
2844
 
2801
2845
  def __init__(self, solutions, success, errors, angle_vector,
2802
2846
  robot_joint_indices, solution_indices,
2803
- use_base=None, base_solution_indices=None):
2847
+ use_base=None, base_solution_indices=None,
2848
+ base_frame=None):
2804
2849
  self._solutions = solutions
2805
2850
  self.success = success
2806
2851
  self.errors = errors
@@ -2809,6 +2854,7 @@ class BatchIKAttempts(object):
2809
2854
  self._solution_indices = solution_indices
2810
2855
  self._use_base = use_base
2811
2856
  self._base_solution_indices = base_solution_indices
2857
+ self._base_frame = base_frame
2812
2858
  self._angle_vectors = None
2813
2859
  self._base_poses = None
2814
2860
 
@@ -2859,7 +2905,8 @@ class BatchIKAttempts(object):
2859
2905
  indices = self._base_solution_indices
2860
2906
  self._base_poses = [
2861
2907
  [RobotModel._virtual_chain_angles_to_base_pose(
2862
- self._solutions[pose][attempt][indices], self._use_base)
2908
+ self._solutions[pose][attempt][indices], self._use_base,
2909
+ self._base_frame)
2863
2910
  for attempt in range(self.n_attempts)]
2864
2911
  for pose in range(self._solutions.shape[0])
2865
2912
  ]
@@ -4452,7 +4499,8 @@ class RobotModel(CascadedLink):
4452
4499
  base_solution_indices = np.arange(n_dof, dtype=np.int64)
4453
4500
  base_poses = [
4454
4501
  self._virtual_chain_angles_to_base_pose(
4455
- solutions_np[i, :n_dof], use_base)
4502
+ solutions_np[i, :n_dof], use_base,
4503
+ _base_state['base_frame'])
4456
4504
  for i in range(n_poses)
4457
4505
  ]
4458
4506
 
@@ -4464,20 +4512,38 @@ class RobotModel(CascadedLink):
4464
4512
  joint_indices,
4465
4513
  fk_indices_for_actual_joints,
4466
4514
  use_base=use_base,
4467
- base_solution_indices=base_solution_indices)
4515
+ base_solution_indices=base_solution_indices,
4516
+ base_frame=(None if _base_state is None
4517
+ else _base_state['base_frame']))
4468
4518
 
4469
4519
  return BatchIKResult(full_solutions, success_flags, attempt_counts,
4470
4520
  base_poses=base_poses, attempts=attempts)
4471
4521
 
4472
4522
  @staticmethod
4473
- def _virtual_chain_angles_to_base_pose(joint_angles, use_base):
4523
+ def _virtual_chain_angles_to_base_pose(joint_angles, use_base,
4524
+ base_frame=None):
4474
4525
  """Convert virtual-chain joint angles to a world-frame base pose.
4475
4526
 
4476
4527
  The decomposition in :meth:`_attach_batch_virtual_base_chain` means
4477
4528
  the per-DoF angles compose exactly like the corresponding
4478
4529
  :class:`PlanarJoint` / :class:`FloatingJoint` applied to
4479
4530
  ``default_coords = identity``.
4531
+
4532
+ The angles move root_link from where it stood when the solve
4533
+ started, in its own frame. With ``base_frame`` (root_link's world
4534
+ pose at the start, and root_link in the robot's frame) the result
4535
+ is the robot's world pose, ready for ``robot.newcoords``; without
4536
+ it, the bare move.
4480
4537
  """
4538
+ move = RobotModel._virtual_chain_move(joint_angles, use_base)
4539
+ if base_frame is None:
4540
+ return move
4541
+ root0, root_in_robot = base_frame
4542
+ return root0.copy_worldcoords().transform(move).transform(
4543
+ root_in_robot.inverse_transformation())
4544
+
4545
+ @staticmethod
4546
+ def _virtual_chain_move(joint_angles, use_base):
4481
4547
  if use_base == 'planar':
4482
4548
  x, y, yaw = float(joint_angles[0]), float(joint_angles[1]), float(
4483
4549
  joint_angles[2])
@@ -4776,7 +4842,7 @@ class RobotModel(CascadedLink):
4776
4842
  virtual_angles = solutions_np[:, virtual_idx_arr]
4777
4843
  base_poses = [
4778
4844
  self._virtual_chain_angles_to_base_pose(
4779
- virtual_angles[i], use_base)
4845
+ virtual_angles[i], use_base, _base_state['base_frame'])
4780
4846
  for i in range(n_poses)
4781
4847
  ]
4782
4848
 
@@ -4788,7 +4854,9 @@ class RobotModel(CascadedLink):
4788
4854
  robot_idx_arr.tolist(),
4789
4855
  union_idx_arr.tolist(),
4790
4856
  use_base=use_base,
4791
- base_solution_indices=virtual_idx_arr)
4857
+ base_solution_indices=virtual_idx_arr,
4858
+ base_frame=(None if _base_state is None
4859
+ else _base_state['base_frame']))
4792
4860
 
4793
4861
  return BatchIKResult(full_solutions, success_flags, attempt_counts,
4794
4862
  base_poses=base_poses, attempts=attempts)
@@ -71,6 +71,19 @@ except (ImportError, RuntimeError) as error_log:
71
71
  class PyrenderViewer(DummyViewer):
72
72
  _import_error = error_log
73
73
 
74
+ try:
75
+ from ._offscreen import OffscreenRenderer
76
+ from ._offscreen import look_at_pose
77
+ from ._offscreen import merge_by_material
78
+ from ._offscreen import render_parallel
79
+ except ImportError as error_log:
80
+ _offscreen_import_error = error_log
81
+
82
+ class OffscreenRenderer(object):
83
+ def __init__(self, *args, **kwargs):
84
+ raise ImportError('OffscreenRenderer needs pyrender: {}'.format(
85
+ _offscreen_import_error))
86
+
74
87
  try:
75
88
  from ._notebook import JupyterNotebookViewer
76
89
  except ImportError:
@@ -114,13 +127,15 @@ _VIEWER_CLASSES = {
114
127
  'viser': ViserViewer,
115
128
  'notebook': JupyterNotebookViewer,
116
129
  'mitsuba': MitsubaViewer,
130
+ # headless: same calls, nothing on screen (save_image renders the camera's view)
131
+ 'offscreen': OffscreenRenderer,
117
132
  }
118
133
 
119
134
  # Viewer names suitable for a command-line ``--viewer`` choice (every backend
120
135
  # except the notebook-only one). Examples import this so a newly added viewer
121
136
  # automatically becomes selectable everywhere.
122
137
  VIEWER_TYPES = tuple(
123
- name for name in _VIEWER_CLASSES if name != 'notebook')
138
+ name for name in _VIEWER_CLASSES if name not in ('notebook', 'offscreen'))
124
139
 
125
140
  # Shared ``help=`` text for a ``--viewer`` argparse argument, kept next to
126
141
  # VIEWER_TYPES so the wording (and the listed backends) stay in sync.