placo 0.6.3__tar.gz → 0.6.5__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.

Potentially problematic release.


This version of placo might be problematic. Click here for more details.

Files changed (180) hide show
  1. {placo-0.6.3 → placo-0.6.5}/CMakeLists.txt +4 -0
  2. placo-0.6.5/PKG-INFO +61 -0
  3. placo-0.6.5/README.md +39 -0
  4. {placo-0.6.3 → placo-0.6.5}/bindings/expose-footsteps.cpp +9 -8
  5. {placo-0.6.3 → placo-0.6.5}/bindings/expose-kinematics.cpp +9 -0
  6. {placo-0.6.3 → placo-0.6.5}/bindings/expose-parameters.cpp +6 -14
  7. {placo-0.6.3 → placo-0.6.5}/bindings/expose-problem.cpp +8 -1
  8. {placo-0.6.3 → placo-0.6.5}/bindings/expose-tools.cpp +21 -0
  9. {placo-0.6.3 → placo-0.6.5}/bindings/expose-walk-pattern-generator.cpp +30 -10
  10. {placo-0.6.3 → placo-0.6.5}/placo.pyi +553 -226
  11. {placo-0.6.3 → placo-0.6.5}/pyproject.toml +1 -1
  12. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/footsteps_planner.cpp +51 -54
  13. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/footsteps_planner.h +21 -10
  14. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/footsteps_planner_naive.cpp +0 -90
  15. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/humanoid_parameters.cpp +7 -52
  16. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/humanoid_parameters.h +16 -50
  17. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/humanoid_robot.cpp +2 -2
  18. placo-0.6.5/src/placo/humanoid/kick.cpp +44 -0
  19. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/lipm.cpp +36 -8
  20. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/lipm.h +27 -12
  21. placo-0.6.5/src/placo/humanoid/swing_foot_cubic.cpp +56 -0
  22. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/swing_foot_cubic.h +4 -3
  23. placo-0.6.5/src/placo/humanoid/walk_pattern_generator.cpp +642 -0
  24. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/walk_pattern_generator.h +62 -46
  25. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/walk_tasks.cpp +14 -0
  26. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/walk_tasks.h +11 -0
  27. placo-0.6.5/src/placo/kinematics/joint_space_half_spaces_constraint.cpp +43 -0
  28. placo-0.6.5/src/placo/kinematics/joint_space_half_spaces_constraint.h +32 -0
  29. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/kinematics_solver.cpp +6 -0
  30. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/kinematics_solver.h +9 -0
  31. {placo-0.6.3 → placo-0.6.5}/src/placo/problem/integrator.cpp +5 -0
  32. {placo-0.6.3 → placo-0.6.5}/src/placo/problem/integrator.h +1 -1
  33. {placo-0.6.3 → placo-0.6.5}/src/placo/problem/polygon_constraint.cpp +1 -1
  34. {placo-0.6.3 → placo-0.6.5}/src/placo/problem/problem.cpp +0 -1
  35. placo-0.6.5/src/placo/problem/problem_polynom.cpp +30 -0
  36. placo-0.6.5/src/placo/problem/problem_polynom.h +37 -0
  37. placo-0.6.5/src/placo/tools/polynom.cpp +41 -0
  38. placo-0.6.5/src/placo/tools/polynom.h +27 -0
  39. placo-0.6.5/src/placo/tools/segment.cpp +103 -0
  40. placo-0.6.5/src/placo/tools/segment.h +80 -0
  41. {placo-0.6.3 → placo-0.6.5}/stubs.py +12 -7
  42. placo-0.6.3/PKG-INFO +0 -56
  43. placo-0.6.3/README.md +0 -34
  44. placo-0.6.3/src/placo/humanoid/kick.cpp +0 -44
  45. placo-0.6.3/src/placo/humanoid/swing_foot_cubic.cpp +0 -45
  46. placo-0.6.3/src/placo/humanoid/walk_pattern_generator.cpp +0 -694
  47. {placo-0.6.3 → placo-0.6.5}/.clang-format +0 -0
  48. {placo-0.6.3 → placo-0.6.5}/.gitattributes +0 -0
  49. {placo-0.6.3 → placo-0.6.5}/.gitignore +0 -0
  50. {placo-0.6.3 → placo-0.6.5}/.readthedocs.yaml +0 -0
  51. {placo-0.6.3 → placo-0.6.5}/Doxyfile +0 -0
  52. {placo-0.6.3 → placo-0.6.5}/LICENSE +0 -0
  53. {placo-0.6.3 → placo-0.6.5}/Makefile +0 -0
  54. {placo-0.6.3 → placo-0.6.5}/bindings/expose-dynamics.cpp +0 -0
  55. {placo-0.6.3 → placo-0.6.5}/bindings/expose-eigen.cpp +0 -0
  56. {placo-0.6.3 → placo-0.6.5}/bindings/expose-robot-wrapper.cpp +0 -0
  57. {placo-0.6.3 → placo-0.6.5}/bindings/expose-utils.hpp +0 -0
  58. {placo-0.6.3 → placo-0.6.5}/bindings/module.cpp +0 -0
  59. {placo-0.6.3 → placo-0.6.5}/bindings/module.h +0 -0
  60. {placo-0.6.3 → placo-0.6.5}/bindings/registry.cpp +0 -0
  61. {placo-0.6.3 → placo-0.6.5}/bindings/registry.h +0 -0
  62. {placo-0.6.3 → placo-0.6.5}/doxygen_parse.py +0 -0
  63. {placo-0.6.3 → placo-0.6.5}/python/.vscode/settings.json +0 -0
  64. {placo-0.6.3 → placo-0.6.5}/python/Makefile +0 -0
  65. {placo-0.6.3 → placo-0.6.5}/python/placo_utils/__init__.py +0 -0
  66. {placo-0.6.3 → placo-0.6.5}/python/placo_utils/tf.py +0 -0
  67. {placo-0.6.3 → placo-0.6.5}/python/placo_utils/view.py +0 -0
  68. {placo-0.6.3 → placo-0.6.5}/python/placo_utils/visualization.py +0 -0
  69. {placo-0.6.3 → placo-0.6.5}/python/run_tests.sh +0 -0
  70. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/avoid_self_collisions_constraint.cpp +0 -0
  71. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/avoid_self_collisions_constraint.h +0 -0
  72. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/com_task.cpp +0 -0
  73. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/com_task.h +0 -0
  74. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/constraint.cpp +0 -0
  75. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/constraint.h +0 -0
  76. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/contacts.cpp +0 -0
  77. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/contacts.h +0 -0
  78. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/dynamics_solver.cpp +0 -0
  79. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/dynamics_solver.h +0 -0
  80. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/frame_task.cpp +0 -0
  81. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/frame_task.h +0 -0
  82. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/gear_task.cpp +0 -0
  83. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/gear_task.h +0 -0
  84. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/joints_task.cpp +0 -0
  85. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/joints_task.h +0 -0
  86. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/orientation_task.cpp +0 -0
  87. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/orientation_task.h +0 -0
  88. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/position_task.cpp +0 -0
  89. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/position_task.h +0 -0
  90. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/relative_frame_task.cpp +0 -0
  91. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/relative_frame_task.h +0 -0
  92. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/relative_orientation_task.cpp +0 -0
  93. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/relative_orientation_task.h +0 -0
  94. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/relative_position_task.cpp +0 -0
  95. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/relative_position_task.h +0 -0
  96. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/task.cpp +0 -0
  97. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/task.h +0 -0
  98. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/torque_task.cpp +0 -0
  99. {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/torque_task.h +0 -0
  100. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/foot_trajectory.cpp +0 -0
  101. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/foot_trajectory.h +0 -0
  102. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/footsteps_planner_naive.h +0 -0
  103. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/footsteps_planner_repetitive.cpp +0 -0
  104. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/footsteps_planner_repetitive.h +0 -0
  105. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/humanoid_robot.h +0 -0
  106. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/kick.h +0 -0
  107. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/swing_foot.cpp +0 -0
  108. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/swing_foot.h +0 -0
  109. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/swing_foot_quintic.cpp +0 -0
  110. {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/swing_foot_quintic.h +0 -0
  111. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/avoid_self_collisions_constraint.cpp +0 -0
  112. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/avoid_self_collisions_constraint.h +0 -0
  113. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/axis_align_task.cpp +0 -0
  114. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/axis_align_task.h +0 -0
  115. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/centroidal_momentum_task.cpp +0 -0
  116. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/centroidal_momentum_task.h +0 -0
  117. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/com_polygon_constraint.cpp +0 -0
  118. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/com_polygon_constraint.h +0 -0
  119. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/com_task.cpp +0 -0
  120. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/com_task.h +0 -0
  121. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/cone_constraint.cpp +0 -0
  122. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/cone_constraint.h +0 -0
  123. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/constraint.cpp +0 -0
  124. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/constraint.h +0 -0
  125. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/distance_task.cpp +0 -0
  126. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/distance_task.h +0 -0
  127. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/frame_task.cpp +0 -0
  128. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/frame_task.h +0 -0
  129. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/gear_task.cpp +0 -0
  130. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/gear_task.h +0 -0
  131. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/joints_task.cpp +0 -0
  132. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/joints_task.h +0 -0
  133. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/kinetic_energy_regularization_task.cpp +0 -0
  134. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/kinetic_energy_regularization_task.h +0 -0
  135. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/manipulability_task.cpp +0 -0
  136. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/manipulability_task.h +0 -0
  137. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/orientation_task.cpp +0 -0
  138. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/orientation_task.h +0 -0
  139. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/position_task.cpp +0 -0
  140. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/position_task.h +0 -0
  141. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/regularization_task.cpp +0 -0
  142. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/regularization_task.h +0 -0
  143. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/relative_frame_task.cpp +0 -0
  144. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/relative_frame_task.h +0 -0
  145. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/relative_orientation_task.cpp +0 -0
  146. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/relative_orientation_task.h +0 -0
  147. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/relative_position_task.cpp +0 -0
  148. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/relative_position_task.h +0 -0
  149. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/task.cpp +0 -0
  150. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/task.h +0 -0
  151. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/wheel_task.cpp +0 -0
  152. {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/wheel_task.h +0 -0
  153. {placo-0.6.3 → placo-0.6.5}/src/placo/model/robot_wrapper.cpp +0 -0
  154. {placo-0.6.3 → placo-0.6.5}/src/placo/model/robot_wrapper.h +0 -0
  155. {placo-0.6.3 → placo-0.6.5}/src/placo/problem/constraint.cpp +0 -0
  156. {placo-0.6.3 → placo-0.6.5}/src/placo/problem/constraint.h +0 -0
  157. {placo-0.6.3 → placo-0.6.5}/src/placo/problem/expression.cpp +0 -0
  158. {placo-0.6.3 → placo-0.6.5}/src/placo/problem/expression.h +0 -0
  159. {placo-0.6.3 → placo-0.6.5}/src/placo/problem/polygon_constraint.h +0 -0
  160. {placo-0.6.3 → placo-0.6.5}/src/placo/problem/problem.h +0 -0
  161. {placo-0.6.3 → placo-0.6.5}/src/placo/problem/qp_error.cpp +0 -0
  162. {placo-0.6.3 → placo-0.6.5}/src/placo/problem/qp_error.h +0 -0
  163. {placo-0.6.3 → placo-0.6.5}/src/placo/problem/sparsity.cpp +0 -0
  164. {placo-0.6.3 → placo-0.6.5}/src/placo/problem/sparsity.h +0 -0
  165. {placo-0.6.3 → placo-0.6.5}/src/placo/problem/variable.cpp +0 -0
  166. {placo-0.6.3 → placo-0.6.5}/src/placo/problem/variable.h +0 -0
  167. {placo-0.6.3 → placo-0.6.5}/src/placo/tools/axises_mask.cpp +0 -0
  168. {placo-0.6.3 → placo-0.6.5}/src/placo/tools/axises_mask.h +0 -0
  169. {placo-0.6.3 → placo-0.6.5}/src/placo/tools/cubic_spline.cpp +0 -0
  170. {placo-0.6.3 → placo-0.6.5}/src/placo/tools/cubic_spline.h +0 -0
  171. {placo-0.6.3 → placo-0.6.5}/src/placo/tools/cubic_spline_3d.cpp +0 -0
  172. {placo-0.6.3 → placo-0.6.5}/src/placo/tools/cubic_spline_3d.h +0 -0
  173. {placo-0.6.3 → placo-0.6.5}/src/placo/tools/directions.cpp +0 -0
  174. {placo-0.6.3 → placo-0.6.5}/src/placo/tools/directions.h +0 -0
  175. {placo-0.6.3 → placo-0.6.5}/src/placo/tools/prioritized.cpp +0 -0
  176. {placo-0.6.3 → placo-0.6.5}/src/placo/tools/prioritized.h +0 -0
  177. {placo-0.6.3 → placo-0.6.5}/src/placo/tools/utils.cpp +0 -0
  178. {placo-0.6.3 → placo-0.6.5}/src/placo/tools/utils.h +0 -0
  179. {placo-0.6.3 → placo-0.6.5}/tweak_sdist.sh +0 -0
  180. {placo-0.6.3 → placo-0.6.5}/wks.yml +0 -0
@@ -52,6 +52,8 @@ add_library(libplaco SHARED
52
52
  src/placo/tools/cubic_spline.cpp
53
53
  src/placo/tools/cubic_spline_3d.cpp
54
54
  src/placo/tools/directions.cpp
55
+ src/placo/tools/polynom.cpp
56
+ src/placo/tools/segment.cpp
55
57
 
56
58
  # Problem formulation
57
59
  src/placo/problem/problem.cpp
@@ -59,6 +61,7 @@ add_library(libplaco SHARED
59
61
  src/placo/problem/variable.cpp
60
62
  src/placo/problem/expression.cpp
61
63
  src/placo/problem/integrator.cpp
64
+ src/placo/problem/problem_polynom.cpp
62
65
  src/placo/problem/constraint.cpp
63
66
  src/placo/problem/polygon_constraint.cpp
64
67
  src/placo/problem/sparsity.cpp
@@ -84,6 +87,7 @@ add_library(libplaco SHARED
84
87
  src/placo/kinematics/constraint.cpp
85
88
  src/placo/kinematics/avoid_self_collisions_constraint.cpp
86
89
  src/placo/kinematics/com_polygon_constraint.cpp
90
+ src/placo/kinematics/joint_space_half_spaces_constraint.cpp
87
91
  src/placo/kinematics/cone_constraint.cpp
88
92
  src/placo/kinematics/axis_align_task.cpp
89
93
 
placo-0.6.5/PKG-INFO ADDED
@@ -0,0 +1,61 @@
1
+ Metadata-Version: 2.4
2
+ Name: placo
3
+ Version: 0.6.5
4
+ Summary: PlaCo: Rhoban Planning and Control
5
+ Requires-Python: >= 3.8
6
+ License-Expression: MIT
7
+ Author-email: Rhoban team <team@rhoban.com>
8
+ Project-URL: Changelog, https://github.com/rhoban/placo/blob/main/CHANGELOG.md
9
+ Home-page: https://placo.readthedocs.io/en/latest/
10
+ Project-URL: Repository, https://github.com/rhoban/placo.git
11
+ Requires-Dist: cmeel
12
+ Requires-Dist: eiquadprog >= 1.2.6, < 2
13
+ Requires-Dist: pin >= 2.6.18, < 3
14
+ Requires-Dist: rhoban-cmeel-jsoncpp
15
+ Requires-Dist: meshcat
16
+ Requires-Dist: numpy<2
17
+ Requires-Dist: ischedule
18
+ Provides-Extra: build
19
+ Requires-Dist: pin[build] >= 2.6.18, < 3 ; extra == "build"
20
+ Requires-Dist: cmeel-urdfdom[build] ; extra == "build"
21
+ Description-Content-Type: text/markdown
22
+
23
+ <img width="400" src="https://placo.readthedocs.io/en/latest/_static/placo.png" />
24
+
25
+ ## Planning & Control
26
+
27
+ PlaCo is Rhoban's planning and control library. It is built on the top of [pinocchio](https://github.com/stack-of-tasks/pinocchio), [eiquadprog](https://github.com/stack-of-tasks/eiquadprog) QP solver, and fully written in C++ with Python bindings, allowing fast prototyping with good runtime performances. It features task-space inverse kinematics and dynamics (see below) high-level API for whole-body control tasks.
28
+
29
+ ### Task-Space Inverse Kinematics
30
+
31
+ [![Quadruoped demo](https://github.com/Rhoban/placo-examples/blob/master/kinematics/videos/quadruped_targets.gif?raw=true)](https://github.com/Rhoban/placo-examples/blob/master/kinematics/videos/quadruped_targets.mp4?raw=true)
32
+
33
+ High-level API to specify tasks for constrained inverse kinematics (IK).
34
+
35
+ - [See documentation](https://placo.readthedocs.io/en/latest/kinematics/getting_started.html)
36
+ - [Examples](https://placo.readthedocs.io/en/latest/kinematics/examples_gallery.html)
37
+
38
+ ### Task-Space Inverse Dynamics
39
+
40
+ [![Megabot demo](https://github.com/Rhoban/placo-examples/blob/master/dynamics/videos/megabot.gif?raw=true)](https://github.com/Rhoban/placo-examples/blob/master/dynamics/videos/megabot.mp4?raw=true)
41
+
42
+ High-level API to specify tasks for constrained inverse dynamics (ID).
43
+
44
+ - [See documentation](https://placo.readthedocs.io/en/latest/dynamics/getting_started.html)
45
+ - [Examples](https://placo.readthedocs.io/en/latest/dynamics/examples_gallery.html)
46
+
47
+
48
+ ## Installing
49
+
50
+ PlaCo can be installed from ``pip``
51
+
52
+ ```
53
+ pip install placo
54
+ ```
55
+
56
+ Or [built from sources](https://placo.readthedocs.io/en/latest/basics/installation_source.html)
57
+
58
+ ## Resources
59
+
60
+ * [Documentation](https://placo.readthedocs.io/en/latest/)
61
+ * [Examples](https://github.com/rhoban/placo-examples) repository
placo-0.6.5/README.md ADDED
@@ -0,0 +1,39 @@
1
+ <img width="400" src="https://placo.readthedocs.io/en/latest/_static/placo.png" />
2
+
3
+ ## Planning & Control
4
+
5
+ PlaCo is Rhoban's planning and control library. It is built on the top of [pinocchio](https://github.com/stack-of-tasks/pinocchio), [eiquadprog](https://github.com/stack-of-tasks/eiquadprog) QP solver, and fully written in C++ with Python bindings, allowing fast prototyping with good runtime performances. It features task-space inverse kinematics and dynamics (see below) high-level API for whole-body control tasks.
6
+
7
+ ### Task-Space Inverse Kinematics
8
+
9
+ [![Quadruoped demo](https://github.com/Rhoban/placo-examples/blob/master/kinematics/videos/quadruped_targets.gif?raw=true)](https://github.com/Rhoban/placo-examples/blob/master/kinematics/videos/quadruped_targets.mp4?raw=true)
10
+
11
+ High-level API to specify tasks for constrained inverse kinematics (IK).
12
+
13
+ - [See documentation](https://placo.readthedocs.io/en/latest/kinematics/getting_started.html)
14
+ - [Examples](https://placo.readthedocs.io/en/latest/kinematics/examples_gallery.html)
15
+
16
+ ### Task-Space Inverse Dynamics
17
+
18
+ [![Megabot demo](https://github.com/Rhoban/placo-examples/blob/master/dynamics/videos/megabot.gif?raw=true)](https://github.com/Rhoban/placo-examples/blob/master/dynamics/videos/megabot.mp4?raw=true)
19
+
20
+ High-level API to specify tasks for constrained inverse dynamics (ID).
21
+
22
+ - [See documentation](https://placo.readthedocs.io/en/latest/dynamics/getting_started.html)
23
+ - [Examples](https://placo.readthedocs.io/en/latest/dynamics/examples_gallery.html)
24
+
25
+
26
+ ## Installing
27
+
28
+ PlaCo can be installed from ``pip``
29
+
30
+ ```
31
+ pip install placo
32
+ ```
33
+
34
+ Or [built from sources](https://placo.readthedocs.io/en/latest/basics/installation_source.html)
35
+
36
+ ## Resources
37
+
38
+ * [Documentation](https://placo.readthedocs.io/en/latest/)
39
+ * [Examples](https://github.com/rhoban/placo-examples) repository
@@ -21,35 +21,36 @@ void exposeFootsteps()
21
21
  .value("right", HumanoidRobot::Side::Right);
22
22
 
23
23
  class__<FootstepsPlanner::Footstep>("Footstep", init<double, double>())
24
- .def("support_polygon", &FootstepsPlanner::Footstep::support_polygon)
25
24
  .add_property("side", &FootstepsPlanner::Footstep::side, &FootstepsPlanner::Footstep::side)
26
- .def_readwrite("frame", &FootstepsPlanner::Footstep::frame)
27
25
  .add_property("foot_length", &FootstepsPlanner::Footstep::foot_length, &FootstepsPlanner::Footstep::foot_length)
28
26
  .add_property("foot_width", &FootstepsPlanner::Footstep::foot_width, &FootstepsPlanner::Footstep::foot_width)
27
+ .add_property("frame", &FootstepsPlanner::Footstep::frame, &FootstepsPlanner::Footstep::frame)
29
28
  .def("support_polygon", &FootstepsPlanner::Footstep::support_polygon)
30
29
  .def("overlap", &FootstepsPlanner::Footstep::overlap)
31
30
  .def("polygon_contains", &FootstepsPlanner::Footstep::polygon_contains)
32
- .staticmethod("polygon_contains")
33
- .add_property("kick", &FootstepsPlanner::Footstep::kick, &FootstepsPlanner::Footstep::kick);
31
+ .staticmethod("polygon_contains");
34
32
 
35
- class__<FootstepsPlanner::Support>("Support")
33
+ class__<FootstepsPlanner::Support>("Support", init<>())
36
34
  .def("support_polygon", &FootstepsPlanner::Support::support_polygon)
37
35
  .def("frame", &FootstepsPlanner::Support::frame)
38
36
  .def("footstep_frame", &FootstepsPlanner::Support::footstep_frame)
37
+ .def("apply_offset", &FootstepsPlanner::Support::apply_offset)
39
38
  .def("side", &FootstepsPlanner::Support::side)
40
39
  .def("is_both", &FootstepsPlanner::Support::is_both)
41
40
  .def(
42
41
  "set_start", +[](FootstepsPlanner::Support& support, bool b) { support.start = b; })
43
42
  .def(
44
43
  "set_end", +[](FootstepsPlanner::Support& support, bool b) { support.end = b; })
45
- .def("kick", &FootstepsPlanner::Support::kick)
46
44
  .add_property("footsteps", &FootstepsPlanner::Support::footsteps)
45
+ .add_property("t_start", &FootstepsPlanner::Support::t_start, &FootstepsPlanner::Support::t_start)
46
+ .add_property("elapsed_ratio", &FootstepsPlanner::Support::elapsed_ratio, &FootstepsPlanner::Support::elapsed_ratio)
47
+ .add_property("time_ratio", &FootstepsPlanner::Support::time_ratio, &FootstepsPlanner::Support::time_ratio)
47
48
  .add_property("start", &FootstepsPlanner::Support::start, &FootstepsPlanner::Support::start)
48
- .add_property("end", &FootstepsPlanner::Support::end, &FootstepsPlanner::Support::end);
49
+ .add_property("end", &FootstepsPlanner::Support::end, &FootstepsPlanner::Support::end)
50
+ .add_property("replanned", &FootstepsPlanner::Support::replanned, &FootstepsPlanner::Support::replanned);
49
51
 
50
52
  class__<FootstepsPlanner, boost::noncopyable>("FootstepsPlanner", no_init)
51
53
  .def("make_supports", &FootstepsPlanner::make_supports)
52
- .def("add_first_support", &FootstepsPlanner::add_first_support)
53
54
  .def("opposite_footstep", &FootstepsPlanner::opposite_footstep);
54
55
 
55
56
  class__<FootstepsPlannerNaive, bases<FootstepsPlanner>>("FootstepsPlannerNaive", init<HumanoidParameters&>())
@@ -93,6 +93,10 @@ void exposeKinematics()
93
93
  .def("add_com_polygon_constraint", &KinematicsSolver::add_com_polygon_constraint,
94
94
  return_internal_reference<>())
95
95
 
96
+ // Joint-space half-spaces
97
+ .def("add_joint_space_half_spaces_constraint", &KinematicsSolver::add_joint_space_half_spaces_constraint,
98
+ return_internal_reference<>())
99
+
96
100
  // Cone constraint
97
101
  .def<ConeConstraint& (KinematicsSolver::*)(std::string, std::string, double)>(
98
102
  "add_cone_constraint", &KinematicsSolver::add_cone_constraint, return_internal_reference<>())
@@ -232,6 +236,11 @@ void exposeKinematics()
232
236
  .def_readwrite("omega", &CoMPolygonConstraint::omega)
233
237
  .def_readwrite("margin", &CoMPolygonConstraint::margin);
234
238
 
239
+ class__<JointSpaceHalfSpacesConstraint, bases<Constraint>>("JointSpaceHalfSpacesConstraint",
240
+ init<Eigen::MatrixXd, Eigen::VectorXd>())
241
+ .def_readwrite("A", &JointSpaceHalfSpacesConstraint::A)
242
+ .def_readwrite("b", &JointSpaceHalfSpacesConstraint::b);
243
+
235
244
  class__<ConeConstraint, bases<Constraint>>(
236
245
  "ConeConstraint", init<model::RobotWrapper::FrameIndex, model::RobotWrapper::FrameIndex, double>())
237
246
  .def_readwrite("angle_max", &ConeConstraint::angle_max)
@@ -18,16 +18,10 @@ using namespace placo::humanoid;
18
18
  void exposeParameters()
19
19
  {
20
20
  class__<HumanoidParameters>("HumanoidParameters")
21
- .add_property("single_support_duration", &HumanoidParameters::single_support_duration,
22
- &HumanoidParameters::single_support_duration)
23
- .add_property("single_support_timesteps", &HumanoidParameters::single_support_timesteps,
24
- &HumanoidParameters::single_support_timesteps)
25
- .add_property("double_support_ratio", &HumanoidParameters::double_support_ratio,
26
- &HumanoidParameters::double_support_ratio)
27
- .add_property("startend_double_support_ratio", &HumanoidParameters::startend_double_support_ratio,
28
- &HumanoidParameters::startend_double_support_ratio)
29
- .add_property("kick_support_ratio", &HumanoidParameters::kick_support_ratio,
30
- &HumanoidParameters::kick_support_ratio)
21
+ .add_property("single_support_duration", &HumanoidParameters::single_support_duration, &HumanoidParameters::single_support_duration)
22
+ .add_property("single_support_timesteps", &HumanoidParameters::single_support_timesteps, &HumanoidParameters::single_support_timesteps)
23
+ .add_property("double_support_ratio", &HumanoidParameters::double_support_ratio, &HumanoidParameters::double_support_ratio)
24
+ .add_property("startend_double_support_ratio", &HumanoidParameters::startend_double_support_ratio, &HumanoidParameters::startend_double_support_ratio)
31
25
  .add_property("planned_timesteps", &HumanoidParameters::planned_timesteps, &HumanoidParameters::planned_timesteps)
32
26
  .add_property("replan_timesteps", &HumanoidParameters::replan_timesteps, &HumanoidParameters::replan_timesteps)
33
27
  .add_property("zmp_margin", &HumanoidParameters::zmp_margin, &HumanoidParameters::zmp_margin)
@@ -52,12 +46,10 @@ void exposeParameters()
52
46
  .add_property("walk_dtheta_spacing", &HumanoidParameters::walk_dtheta_spacing,
53
47
  &HumanoidParameters::walk_dtheta_spacing)
54
48
  .def("dt", &HumanoidParameters::dt)
55
- .def("double_support_duration", &HumanoidParameters::double_support_duration)
56
- .def("startend_double_support_duration", &HumanoidParameters::startend_double_support_duration)
57
- .def("kick_support_duration", &HumanoidParameters::kick_support_duration)
58
49
  .def("double_support_timesteps", &HumanoidParameters::double_support_timesteps)
59
50
  .def("startend_double_support_timesteps", &HumanoidParameters::startend_double_support_timesteps)
60
- .def("kick_support_timesteps", &HumanoidParameters::kick_support_timesteps)
51
+ .def("double_support_duration", &HumanoidParameters::double_support_duration)
52
+ .def("startend_double_support_duration", &HumanoidParameters::startend_double_support_duration)
61
53
  .def("has_double_support", &HumanoidParameters::has_double_support)
62
54
  .def("ellipsoid_clip", &HumanoidParameters::ellipsoid_clip);
63
55
  }
@@ -12,6 +12,7 @@
12
12
  #include "placo/problem/constraint.h"
13
13
  #include "placo/problem/polygon_constraint.h"
14
14
  #include "placo/problem/integrator.h"
15
+ #include "placo/problem/problem_polynom.h"
15
16
  #include "placo/problem/sparsity.h"
16
17
  #include "placo/problem/qp_error.h"
17
18
  #include <Eigen/Dense>
@@ -24,6 +25,8 @@ using namespace placo::problem;
24
25
 
25
26
  BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(expr_overloads, expr, 0, 2);
26
27
  BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(integrator_expr_overloads, expr, 1, 2);
28
+ BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(integrator_expr_t_overloads, expr_t, 1, 2);
29
+ BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(problem_polynom_expr_overloads, expr, 1, 2);
27
30
  BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(configure_overloads, configure, 1, 2);
28
31
 
29
32
  void exposeProblem()
@@ -90,10 +93,14 @@ void exposeProblem()
90
93
  .def_readonly("B", &Integrator::B)
91
94
  .def_readonly("final_transition_matrix", &Integrator::final_transition_matrix)
92
95
  .def("expr", &Integrator::expr, integrator_expr_overloads())
93
- .def("expr_t", &Integrator::expr_t)
96
+ .def("expr_t", &Integrator::expr_t, integrator_expr_t_overloads())
94
97
  .def("value", &Integrator::value)
95
98
  .def("get_trajectory", &Integrator::get_trajectory);
96
99
 
100
+ class__<ProblemPolynom>("ProblemPolynom", init<Variable&>())
101
+ .def("expr", &ProblemPolynom::expr, problem_polynom_expr_overloads())
102
+ .def("get_polynom", &ProblemPolynom::get_polynom);
103
+
97
104
  class__<Integrator::Trajectory>("IntegratorTrajectory")
98
105
  .def("value", &Integrator::Trajectory::value)
99
106
  .def("duration", &Integrator::Trajectory::duration);
@@ -10,6 +10,8 @@
10
10
  #include "placo/tools/axises_mask.h"
11
11
  #include "placo/tools/prioritized.h"
12
12
  #include "placo/tools/directions.h"
13
+ #include "placo/tools/polynom.h"
14
+ #include "placo/tools/segment.h"
13
15
  #include "expose-utils.hpp"
14
16
  #ifdef HAVE_RHOBAN_UTILS
15
17
  #include "rhoban_utils/history/history.h"
@@ -26,6 +28,7 @@ BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(loadReplays_overloads, loadReplays, 1, 2)
26
28
  BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(set_axises_overloads, set_axises, 1, 2);
27
29
  BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(configure_overloads, configure, 2, 3);
28
30
  BOOST_PYTHON_FUNCTION_OVERLOADS(directions_3d_overloads, directions_3d, 1, 2);
31
+ BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(value_overloads, value, 1, 2);
29
32
 
30
33
  void exposeTools()
31
34
  {
@@ -77,6 +80,24 @@ void exposeTools()
77
80
  .def("clear", &CubicSpline3D::clear)
78
81
  .def("duration", &CubicSpline3D::duration);
79
82
 
83
+ class__<Polynom>("Polynom", init<Eigen::VectorXd>())
84
+ .def("value", &Polynom::value, value_overloads())
85
+ .def("derivative_coefficient", &Polynom::derivative_coefficient)
86
+ .staticmethod("derivative_coefficient")
87
+ .def_readwrite("coefficients", &Polynom::coefficients);
88
+
89
+ class__<Segment>("Segment", init<Eigen::Vector2d, Eigen::Vector2d>())
90
+ .add_property("start", &Segment::start, &Segment::start)
91
+ .add_property("end", &Segment::end, &Segment::start)
92
+ .def("is_parallel", +[](Segment& s1, const Segment& s2) { return s1.is_parallel(s2); })
93
+ .def("is_point_aligned", +[](Segment& s, const Eigen::Vector2d& point) { return s.is_point_aligned(point); })
94
+ .def("is_collinear", +[](Segment& s1, const Segment& s2) { return s1.is_collinear(s2); })
95
+ .def("is_point_in_segment", +[](Segment& s, const Eigen::Vector2d& point) { return s.is_point_in_segment(point); })
96
+ .def("intersects", &Segment::intersects)
97
+ .def("line_pass_through", &Segment::line_pass_through)
98
+ .def("half_line_pass_through", &Segment::half_line_pass_through)
99
+ .def("lines_intersection", &Segment::lines_intersection);
100
+
80
101
  #ifdef HAVE_RHOBAN_UTILS
81
102
  using namespace rhoban_utils;
82
103
 
@@ -22,13 +22,22 @@ using namespace placo::humanoid;
22
22
 
23
23
  void exposeWalkPatternGenerator()
24
24
  {
25
- class__<WalkPatternGenerator::Trajectory>("WalkTrajectory")
25
+ class__<WalkPatternGenerator::TrajectoryPart>("WPGTrajectoryPart", init<FootstepsPlanner::Support, double>())
26
+ .add_property("t_start", &WalkPatternGenerator::TrajectoryPart::t_start)
27
+ .add_property("t_end", &WalkPatternGenerator::TrajectoryPart::t_end, &WalkPatternGenerator::TrajectoryPart::t_end)
28
+ .add_property("support", &WalkPatternGenerator::TrajectoryPart::support);
29
+
30
+ class__<WalkPatternGenerator::Trajectory>("WPGTrajectory", init<double, double, double>())
26
31
  .add_property("t_start", &WalkPatternGenerator::Trajectory::t_start)
27
32
  .add_property("t_end", &WalkPatternGenerator::Trajectory::t_end)
28
- .add_property("jerk_planner_timesteps", &WalkPatternGenerator::Trajectory::jerk_planner_timesteps)
33
+ .add_property("com_target_z", &WalkPatternGenerator::Trajectory::com_target_z)
34
+ .add_property("trunk_pitch", &WalkPatternGenerator::Trajectory::trunk_pitch)
35
+ .add_property("trunk_roll", &WalkPatternGenerator::Trajectory::trunk_roll)
36
+ .add_property("kept_ts", &WalkPatternGenerator::Trajectory::kept_ts)
29
37
  .def("get_T_world_left", &WalkPatternGenerator::Trajectory::get_T_world_left)
30
- .def("get_supports", &WalkPatternGenerator::Trajectory::get_supports)
31
38
  .def("get_T_world_right", &WalkPatternGenerator::Trajectory::get_T_world_right)
39
+ .def("get_v_world_right", &WalkPatternGenerator::Trajectory::get_v_world_right)
40
+ .def("get_v_world_foot", &WalkPatternGenerator::Trajectory::get_v_world_foot)
32
41
  .def("get_p_world_CoM", &WalkPatternGenerator::Trajectory::get_p_world_CoM)
33
42
  .def("get_v_world_CoM", &WalkPatternGenerator::Trajectory::get_v_world_CoM)
34
43
  .def("get_a_world_CoM", &WalkPatternGenerator::Trajectory::get_a_world_CoM)
@@ -38,17 +47,20 @@ void exposeWalkPatternGenerator()
38
47
  .def("get_R_world_trunk", &WalkPatternGenerator::Trajectory::get_R_world_trunk)
39
48
  .def("support_side", &WalkPatternGenerator::Trajectory::support_side)
40
49
  .def("support_is_both", &WalkPatternGenerator::Trajectory::support_is_both)
50
+ .def("get_supports", &WalkPatternGenerator::Trajectory::get_supports)
41
51
  .def("get_support", &WalkPatternGenerator::Trajectory::get_support)
42
52
  .def("get_next_support", &WalkPatternGenerator::Trajectory::get_next_support)
43
53
  .def("get_prev_support", &WalkPatternGenerator::Trajectory::get_prev_support)
44
54
  .def("get_part_t_start", &WalkPatternGenerator::Trajectory::get_part_t_start)
45
- .def("apply_transform", &WalkPatternGenerator::Trajectory::apply_transform);
55
+ .def("apply_transform", &WalkPatternGenerator::Trajectory::apply_transform)
56
+ .def("print_parts_timings", &WalkPatternGenerator::Trajectory::print_parts_timings);
46
57
 
47
58
  class__<WalkPatternGenerator>("WalkPatternGenerator", init<HumanoidRobot&, HumanoidParameters&>())
48
59
  .def("plan", &WalkPatternGenerator::plan)
49
60
  .def("replan", &WalkPatternGenerator::replan)
50
61
  .def("can_replan_supports", &WalkPatternGenerator::can_replan_supports)
51
- .def("replan_supports", &WalkPatternGenerator::replan_supports);
62
+ .def("replan_supports", &WalkPatternGenerator::replan_supports)
63
+ .def("compute_next_support", &WalkPatternGenerator::compute_next_support);
52
64
 
53
65
  class__<SwingFoot>("SwingFoot", init<>())
54
66
  .def("make_trajectory", &SwingFoot::make_trajectory)
@@ -125,16 +137,24 @@ void exposeWalkPatternGenerator()
125
137
  .def("dzmp", &LIPM::Trajectory::dzmp)
126
138
  .def("dcm", &LIPM::Trajectory::dcm);
127
139
 
128
- class__<LIPM>("LIPM", init<problem::Problem&, int, double, Eigen::Vector2d, Eigen::Vector2d, Eigen::Vector2d>())
140
+ class__<LIPM>("LIPM", init<problem::Problem&, double, int, double, Eigen::Vector2d, Eigen::Vector2d, Eigen::Vector2d>())
141
+ .def("compute_omega", &LIPM::compute_omega)
142
+ .def("get_trajectory", &LIPM::get_trajectory)
129
143
  .def("pos", &LIPM::pos)
130
144
  .def("vel", &LIPM::vel)
131
145
  .def("acc", &LIPM::acc)
132
146
  .def("jerk", &LIPM::jerk)
147
+ .def("dcm", &LIPM::dcm)
133
148
  .def("zmp", &LIPM::zmp)
134
149
  .def("dzmp", &LIPM::dzmp)
135
- .def("dcm", &LIPM::dcm)
136
- .def("compute_omega", &LIPM::compute_omega)
150
+ .def("build_LIPM_from_previous", &LIPM::build_LIPM_from_previous)
137
151
  .def("get_trajectory", &LIPM::get_trajectory)
138
- .add_property("x", &LIPM::x)
139
- .add_property("y", &LIPM::y);
152
+ .add_property("dt", &LIPM::dt, &LIPM::dt)
153
+ .add_property("timesteps", &LIPM::timesteps, &LIPM::timesteps)
154
+ .add_property("t_start", &LIPM::t_start, &LIPM::t_start)
155
+ .add_property("t_end", &LIPM::t_end, &LIPM::t_end)
156
+ .add_property("x_var", &LIPM::x_var, &LIPM::x_var)
157
+ .add_property("y_var", &LIPM::y_var, &LIPM::y_var)
158
+ .add_property("x", &LIPM::x, &LIPM::x)
159
+ .add_property("y", &LIPM::y, &LIPM::y);
140
160
  }