placo 0.8.7__tar.gz → 0.8.9__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 (175) hide show
  1. {placo-0.8.7 → placo-0.8.9}/.github/workflows/wheels.yml +6 -0
  2. {placo-0.8.7 → placo-0.8.9}/PKG-INFO +1 -1
  3. {placo-0.8.7 → placo-0.8.9}/bindings/expose-tools.cpp +2 -2
  4. {placo-0.8.7 → placo-0.8.9}/bindings/expose-walk-pattern-generator.cpp +8 -0
  5. {placo-0.8.7 → placo-0.8.9}/bindings/module.cpp +3 -0
  6. {placo-0.8.7 → placo-0.8.9}/pyproject.toml +1 -1
  7. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/footsteps_planner.cpp +13 -14
  8. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/walk_pattern_generator.cpp +90 -55
  9. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/manipulability_task.cpp +1 -1
  10. {placo-0.8.7 → placo-0.8.9}/src/placo/problem/integrator.cpp +1 -6
  11. placo-0.8.7/Makefile +0 -12
  12. placo-0.8.7/build_wheel.sh +0 -9
  13. placo-0.8.7/tweak_sdist.sh +0 -22
  14. {placo-0.8.7 → placo-0.8.9}/.clang-format +0 -0
  15. {placo-0.8.7 → placo-0.8.9}/.gitattributes +0 -0
  16. {placo-0.8.7 → placo-0.8.9}/.gitignore +0 -0
  17. {placo-0.8.7 → placo-0.8.9}/.readthedocs.yaml +0 -0
  18. {placo-0.8.7 → placo-0.8.9}/CMakeLists.txt +0 -0
  19. {placo-0.8.7 → placo-0.8.9}/Doxyfile +0 -0
  20. {placo-0.8.7 → placo-0.8.9}/LICENSE +0 -0
  21. {placo-0.8.7 → placo-0.8.9}/README.md +0 -0
  22. {placo-0.8.7 → placo-0.8.9}/bindings/doxystub.h +0 -0
  23. {placo-0.8.7 → placo-0.8.9}/bindings/expose-dynamics.cpp +0 -0
  24. {placo-0.8.7 → placo-0.8.9}/bindings/expose-eigen.cpp +0 -0
  25. {placo-0.8.7 → placo-0.8.9}/bindings/expose-footsteps.cpp +0 -0
  26. {placo-0.8.7 → placo-0.8.9}/bindings/expose-kinematics.cpp +0 -0
  27. {placo-0.8.7 → placo-0.8.9}/bindings/expose-parameters.cpp +0 -0
  28. {placo-0.8.7 → placo-0.8.9}/bindings/expose-problem.cpp +0 -0
  29. {placo-0.8.7 → placo-0.8.9}/bindings/expose-robot-wrapper.cpp +0 -0
  30. {placo-0.8.7 → placo-0.8.9}/bindings/expose-utils.hpp +0 -0
  31. {placo-0.8.7 → placo-0.8.9}/bindings/module.h +0 -0
  32. {placo-0.8.7 → placo-0.8.9}/python/.vscode/settings.json +0 -0
  33. {placo-0.8.7 → placo-0.8.9}/python/Makefile +0 -0
  34. {placo-0.8.7 → placo-0.8.9}/python/placo_utils/__init__.py +0 -0
  35. {placo-0.8.7 → placo-0.8.9}/python/placo_utils/tf.py +0 -0
  36. {placo-0.8.7 → placo-0.8.9}/python/placo_utils/view.py +0 -0
  37. {placo-0.8.7 → placo-0.8.9}/python/placo_utils/visualization.py +0 -0
  38. {placo-0.8.7 → placo-0.8.9}/python/run_tests.sh +0 -0
  39. {placo-0.8.7 → placo-0.8.9}/scripts/requirements.sh +0 -0
  40. {placo-0.8.7 → placo-0.8.9}/scripts/robotpkg.sh +0 -0
  41. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/avoid_self_collisions_constraint.cpp +0 -0
  42. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/avoid_self_collisions_constraint.h +0 -0
  43. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/com_task.cpp +0 -0
  44. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/com_task.h +0 -0
  45. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/constraint.cpp +0 -0
  46. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/constraint.h +0 -0
  47. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/contacts.cpp +0 -0
  48. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/contacts.h +0 -0
  49. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/dynamics_solver.cpp +0 -0
  50. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/dynamics_solver.h +0 -0
  51. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/frame_task.cpp +0 -0
  52. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/frame_task.h +0 -0
  53. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/gear_task.cpp +0 -0
  54. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/gear_task.h +0 -0
  55. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/joints_task.cpp +0 -0
  56. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/joints_task.h +0 -0
  57. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/orientation_task.cpp +0 -0
  58. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/orientation_task.h +0 -0
  59. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/position_task.cpp +0 -0
  60. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/position_task.h +0 -0
  61. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/relative_frame_task.cpp +0 -0
  62. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/relative_frame_task.h +0 -0
  63. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/relative_orientation_task.cpp +0 -0
  64. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/relative_orientation_task.h +0 -0
  65. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/relative_position_task.cpp +0 -0
  66. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/relative_position_task.h +0 -0
  67. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/task.cpp +0 -0
  68. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/task.h +0 -0
  69. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/torque_task.cpp +0 -0
  70. {placo-0.8.7 → placo-0.8.9}/src/placo/dynamics/torque_task.h +0 -0
  71. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/foot_trajectory.cpp +0 -0
  72. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/foot_trajectory.h +0 -0
  73. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/footsteps_planner.h +0 -0
  74. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/footsteps_planner_naive.cpp +0 -0
  75. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/footsteps_planner_naive.h +0 -0
  76. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/footsteps_planner_repetitive.cpp +0 -0
  77. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/footsteps_planner_repetitive.h +0 -0
  78. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/humanoid_parameters.cpp +0 -0
  79. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/humanoid_parameters.h +0 -0
  80. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/humanoid_robot.cpp +0 -0
  81. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/humanoid_robot.h +0 -0
  82. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/kick.cpp +0 -0
  83. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/kick.h +0 -0
  84. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/lipm.cpp +0 -0
  85. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/lipm.h +0 -0
  86. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/swing_foot.cpp +0 -0
  87. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/swing_foot.h +0 -0
  88. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/swing_foot_cubic.cpp +0 -0
  89. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/swing_foot_cubic.h +0 -0
  90. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/swing_foot_quintic.cpp +0 -0
  91. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/swing_foot_quintic.h +0 -0
  92. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/walk_pattern_generator.h +0 -0
  93. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/walk_tasks.cpp +0 -0
  94. {placo-0.8.7 → placo-0.8.9}/src/placo/humanoid/walk_tasks.h +0 -0
  95. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/avoid_self_collisions_constraint.cpp +0 -0
  96. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/avoid_self_collisions_constraint.h +0 -0
  97. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/axis_align_task.cpp +0 -0
  98. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/axis_align_task.h +0 -0
  99. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/centroidal_momentum_task.cpp +0 -0
  100. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/centroidal_momentum_task.h +0 -0
  101. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/com_polygon_constraint.cpp +0 -0
  102. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/com_polygon_constraint.h +0 -0
  103. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/com_task.cpp +0 -0
  104. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/com_task.h +0 -0
  105. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/cone_constraint.cpp +0 -0
  106. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/cone_constraint.h +0 -0
  107. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/constraint.cpp +0 -0
  108. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/constraint.h +0 -0
  109. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/distance_task.cpp +0 -0
  110. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/distance_task.h +0 -0
  111. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/frame_task.cpp +0 -0
  112. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/frame_task.h +0 -0
  113. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/gear_task.cpp +0 -0
  114. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/gear_task.h +0 -0
  115. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/joint_space_half_spaces_constraint.cpp +0 -0
  116. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/joint_space_half_spaces_constraint.h +0 -0
  117. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/joints_task.cpp +0 -0
  118. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/joints_task.h +0 -0
  119. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/kinematics_solver.cpp +0 -0
  120. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/kinematics_solver.h +0 -0
  121. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/kinetic_energy_regularization_task.cpp +0 -0
  122. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/kinetic_energy_regularization_task.h +0 -0
  123. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/manipulability_task.h +0 -0
  124. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/orientation_task.cpp +0 -0
  125. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/orientation_task.h +0 -0
  126. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/position_task.cpp +0 -0
  127. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/position_task.h +0 -0
  128. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/regularization_task.cpp +0 -0
  129. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/regularization_task.h +0 -0
  130. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/relative_frame_task.cpp +0 -0
  131. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/relative_frame_task.h +0 -0
  132. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/relative_orientation_task.cpp +0 -0
  133. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/relative_orientation_task.h +0 -0
  134. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/relative_position_task.cpp +0 -0
  135. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/relative_position_task.h +0 -0
  136. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/task.cpp +0 -0
  137. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/task.h +0 -0
  138. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/wheel_task.cpp +0 -0
  139. {placo-0.8.7 → placo-0.8.9}/src/placo/kinematics/wheel_task.h +0 -0
  140. {placo-0.8.7 → placo-0.8.9}/src/placo/model/robot_wrapper.cpp +0 -0
  141. {placo-0.8.7 → placo-0.8.9}/src/placo/model/robot_wrapper.h +0 -0
  142. {placo-0.8.7 → placo-0.8.9}/src/placo/problem/constraint.cpp +0 -0
  143. {placo-0.8.7 → placo-0.8.9}/src/placo/problem/constraint.h +0 -0
  144. {placo-0.8.7 → placo-0.8.9}/src/placo/problem/expression.cpp +0 -0
  145. {placo-0.8.7 → placo-0.8.9}/src/placo/problem/expression.h +0 -0
  146. {placo-0.8.7 → placo-0.8.9}/src/placo/problem/integrator.h +0 -0
  147. {placo-0.8.7 → placo-0.8.9}/src/placo/problem/polygon_constraint.cpp +0 -0
  148. {placo-0.8.7 → placo-0.8.9}/src/placo/problem/polygon_constraint.h +0 -0
  149. {placo-0.8.7 → placo-0.8.9}/src/placo/problem/problem.cpp +0 -0
  150. {placo-0.8.7 → placo-0.8.9}/src/placo/problem/problem.h +0 -0
  151. {placo-0.8.7 → placo-0.8.9}/src/placo/problem/problem_polynom.cpp +0 -0
  152. {placo-0.8.7 → placo-0.8.9}/src/placo/problem/problem_polynom.h +0 -0
  153. {placo-0.8.7 → placo-0.8.9}/src/placo/problem/qp_error.cpp +0 -0
  154. {placo-0.8.7 → placo-0.8.9}/src/placo/problem/qp_error.h +0 -0
  155. {placo-0.8.7 → placo-0.8.9}/src/placo/problem/sparsity.cpp +0 -0
  156. {placo-0.8.7 → placo-0.8.9}/src/placo/problem/sparsity.h +0 -0
  157. {placo-0.8.7 → placo-0.8.9}/src/placo/problem/variable.cpp +0 -0
  158. {placo-0.8.7 → placo-0.8.9}/src/placo/problem/variable.h +0 -0
  159. {placo-0.8.7 → placo-0.8.9}/src/placo/tools/axises_mask.cpp +0 -0
  160. {placo-0.8.7 → placo-0.8.9}/src/placo/tools/axises_mask.h +0 -0
  161. {placo-0.8.7 → placo-0.8.9}/src/placo/tools/cubic_spline.cpp +0 -0
  162. {placo-0.8.7 → placo-0.8.9}/src/placo/tools/cubic_spline.h +0 -0
  163. {placo-0.8.7 → placo-0.8.9}/src/placo/tools/cubic_spline_3d.cpp +0 -0
  164. {placo-0.8.7 → placo-0.8.9}/src/placo/tools/cubic_spline_3d.h +0 -0
  165. {placo-0.8.7 → placo-0.8.9}/src/placo/tools/directions.cpp +0 -0
  166. {placo-0.8.7 → placo-0.8.9}/src/placo/tools/directions.h +0 -0
  167. {placo-0.8.7 → placo-0.8.9}/src/placo/tools/polynom.cpp +0 -0
  168. {placo-0.8.7 → placo-0.8.9}/src/placo/tools/polynom.h +0 -0
  169. {placo-0.8.7 → placo-0.8.9}/src/placo/tools/prioritized.cpp +0 -0
  170. {placo-0.8.7 → placo-0.8.9}/src/placo/tools/prioritized.h +0 -0
  171. {placo-0.8.7 → placo-0.8.9}/src/placo/tools/segment.cpp +0 -0
  172. {placo-0.8.7 → placo-0.8.9}/src/placo/tools/segment.h +0 -0
  173. {placo-0.8.7 → placo-0.8.9}/src/placo/tools/utils.cpp +0 -0
  174. {placo-0.8.7 → placo-0.8.9}/src/placo/tools/utils.h +0 -0
  175. {placo-0.8.7 → placo-0.8.9}/wks.yml +0 -0
@@ -4,10 +4,15 @@ on:
4
4
  release:
5
5
  types:
6
6
  - published
7
+ push:
8
+ branches:
9
+ - 'master' # Sur tout push, toutes branches
7
10
 
8
11
  env:
9
12
  CIBW_SKIP: "*i686 *musl* *armv7* *ppc64* *s390*"
10
13
  CIBW_REPAIR_WHEEL_COMMAND: ""
14
+ CIBW_TEST_REQUIRES: matplotlib
15
+ CIBW_TEST_COMMAND: "python -m unittest discover python/tests/ \"*_test.py\""
11
16
 
12
17
  jobs:
13
18
  build_wheels:
@@ -40,6 +45,7 @@ jobs:
40
45
  path: ./wheelhouse/*.whl
41
46
 
42
47
  build_sdist:
48
+ if: github.event_name == 'release' && github.event.action == 'published'
43
49
  name: Build source distribution
44
50
  runs-on: ubuntu-latest
45
51
  steps:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: placo
3
- Version: 0.8.7
3
+ Version: 0.8.9
4
4
  Summary: PlaCo: Rhoban Planning and Control
5
5
  Requires-Python: >= 3.9
6
6
  License-Expression: MIT
@@ -55,7 +55,7 @@ void exposeTools()
55
55
  set_axises_overloads())
56
56
  .def_readwrite("R_local_world", &AxisesMask::R_local_world)
57
57
  .def_readwrite("R_custom_world", &AxisesMask::R_custom_world)
58
- .def("apply", &AxisesMask::apply);
58
+ .def("apply", &AxisesMask::apply);
59
59
 
60
60
  class__<Prioritized, boost::noncopyable>("Prioritized", no_init)
61
61
  .add_property("name", &Prioritized::name)
@@ -140,7 +140,7 @@ void exposeTools()
140
140
  +[](HistoryCollection& collection, std::vector<std::string> entries, double start_t, double dt, int length) {
141
141
  Eigen::MatrixXd result(length, entries.size());
142
142
 
143
- for (unsigned int i = 0; i < length; i++)
143
+ for (int i = 0; i < length; i++)
144
144
  {
145
145
  double t = start_t + i * dt;
146
146
  for (unsigned int j = 0; j < entries.size(); j++)
@@ -133,6 +133,14 @@ void exposeWalkPatternGenerator()
133
133
  .add_property("trunk_orientation_task",
134
134
  make_function(
135
135
  +[](WalkTasks& tasks) -> OrientationTask& { return *tasks.trunk_orientation_task; },
136
+ return_value_policy<reference_existing_object>()))
137
+ .add_property("com_task",
138
+ make_function(
139
+ +[](WalkTasks& tasks) -> CoMTask& { return *tasks.com_task; },
140
+ return_value_policy<reference_existing_object>()))
141
+ .add_property("trunk_task",
142
+ make_function(
143
+ +[](WalkTasks& tasks) -> PositionTask& { return *tasks.trunk_task; },
136
144
  return_value_policy<reference_existing_object>()));
137
145
 
138
146
  class__<LIPM::Trajectory>("LIPMTrajectory", init<>())
@@ -9,6 +9,9 @@
9
9
 
10
10
  BOOST_PYTHON_MODULE(placo)
11
11
  {
12
+ // Ensure pinocchio is imported before exposing the module
13
+ boost::python::import("pinocchio");
14
+
12
15
  using namespace boost::python;
13
16
 
14
17
  exposeEigen();
@@ -23,7 +23,7 @@ description = "PlaCo: Rhoban Planning and Control"
23
23
  license = "MIT"
24
24
  name = "placo"
25
25
  requires-python = ">= 3.9"
26
- version = "0.8.7"
26
+ version = "0.8.9"
27
27
 
28
28
  [project.urls]
29
29
  changelog = "https://github.com/rhoban/placo/blob/main/CHANGELOG.md"
@@ -98,12 +98,11 @@ bool FootstepsPlanner::Footstep::operator==(const Footstep& other)
98
98
  return side == other.side && frame.isApprox(other.frame);
99
99
  }
100
100
 
101
- FootstepsPlanner::Support::Support()
101
+ FootstepsPlanner::Support::Support()
102
102
  {
103
103
  }
104
104
 
105
- FootstepsPlanner::Support::Support(std::vector<Footstep> footsteps)
106
- : footsteps(footsteps)
105
+ FootstepsPlanner::Support::Support(std::vector<Footstep> footsteps) : footsteps(footsteps)
107
106
  {
108
107
  }
109
108
 
@@ -216,7 +215,7 @@ bool FootstepsPlanner::Support::operator==(const Support& other)
216
215
  {
217
216
  return false;
218
217
  }
219
- for (int k = 0; k < footsteps.size(); k++)
218
+ for (int k = 0; k < (int)footsteps.size(); k++)
220
219
  {
221
220
  if (!(footsteps[k] == other.footsteps[k]))
222
221
  {
@@ -231,8 +230,8 @@ FootstepsPlanner::FootstepsPlanner(HumanoidParameters& parameters) : parameters(
231
230
  {
232
231
  }
233
232
 
234
- std::vector<FootstepsPlanner::Support>
235
- FootstepsPlanner::make_supports(std::vector<FootstepsPlanner::Footstep> footsteps, double t_start, bool start, bool middle, bool end)
233
+ std::vector<FootstepsPlanner::Support> FootstepsPlanner::make_supports(
234
+ std::vector<FootstepsPlanner::Footstep> footsteps, double t_start, bool start, bool middle, bool end)
236
235
  {
237
236
  std::vector<Support> supports;
238
237
 
@@ -241,36 +240,36 @@ FootstepsPlanner::make_supports(std::vector<FootstepsPlanner::Footstep> footstep
241
240
  if (start)
242
241
  {
243
242
  // Creating the first (double-support) initial state
244
- Support support({footsteps[0], footsteps[1]});
243
+ Support support({ footsteps[0], footsteps[1] });
245
244
  support.start = true;
246
245
  support.t_start = t_start;
247
246
  supports.push_back(support);
248
247
  }
249
248
  else
250
249
  {
251
- Support support({footsteps[0]});
250
+ Support support({ footsteps[0] });
252
251
  support.t_start = t_start;
253
252
  supports.push_back(support);
254
253
 
255
254
  if (middle)
256
255
  {
257
- Support double_support({footsteps[0], footsteps[1]});
256
+ Support double_support({ footsteps[0], footsteps[1] });
258
257
  double_support.t_start = t_start;
259
258
  supports.push_back(double_support);
260
259
  }
261
260
  }
262
261
 
263
262
  // Adding single/double support phases
264
- for (int step = 1; step < footsteps.size() - 1; step++)
263
+ for (int step = 1; step < (int)footsteps.size() - 1; step++)
265
264
  {
266
- Support single_support({footsteps[step]});
265
+ Support single_support({ footsteps[step] });
267
266
  supports.push_back(single_support);
268
267
 
269
- bool is_end = (step == footsteps.size() - 2);
268
+ bool is_end = (step == (int)footsteps.size() - 2);
270
269
 
271
270
  if ((!is_end && middle))
272
271
  {
273
- Support double_support({footsteps[step], footsteps[step + 1]});
272
+ Support double_support({ footsteps[step], footsteps[step + 1] });
274
273
  supports.push_back(double_support);
275
274
  }
276
275
  }
@@ -279,7 +278,7 @@ FootstepsPlanner::make_supports(std::vector<FootstepsPlanner::Footstep> footstep
279
278
  if (end)
280
279
  {
281
280
  // Creating the first (double-support) initial state
282
- Support support({footsteps[footsteps.size() - 2], footsteps[footsteps.size() - 1]});
281
+ Support support({ footsteps[footsteps.size() - 2], footsteps[footsteps.size() - 1] });
283
282
  support.end = true;
284
283
  supports.push_back(support);
285
284
  }
@@ -9,29 +9,24 @@ namespace placo::humanoid
9
9
  using namespace placo::problem;
10
10
  using namespace placo::tools;
11
11
 
12
-
13
12
  WalkPatternGenerator::TrajectoryPart::TrajectoryPart(FootstepsPlanner::Support support, double t_start)
14
- : support(support)
15
- , t_start(t_start)
13
+ : t_start(t_start), support(support)
16
14
  {
17
15
  }
18
16
 
19
- WalkPatternGenerator::Trajectory::Trajectory()
20
- : left_foot_yaw(true)
21
- , right_foot_yaw(true)
22
- , trunk_yaw(true)
17
+ WalkPatternGenerator::Trajectory::Trajectory() : left_foot_yaw(true), right_foot_yaw(true), trunk_yaw(true)
23
18
  {
24
19
  T.setIdentity();
25
20
  }
26
21
 
27
- WalkPatternGenerator::Trajectory::Trajectory(double com_target_z, double t_start, double trunk_pitch, double trunk_roll)
28
- : left_foot_yaw(true)
29
- , right_foot_yaw(true)
30
- , trunk_yaw(true)
22
+ WalkPatternGenerator::Trajectory::Trajectory(double com_target_z, double t_start, double trunk_pitch, double trunk_roll)
23
+ : t_start(t_start)
31
24
  , com_target_z(com_target_z)
32
- , t_start(t_start)
33
25
  , trunk_pitch(trunk_pitch)
34
26
  , trunk_roll(trunk_roll)
27
+ , left_foot_yaw(true)
28
+ , right_foot_yaw(true)
29
+ , trunk_yaw(true)
35
30
  {
36
31
  T.setIdentity();
37
32
  }
@@ -237,7 +232,7 @@ FootstepsPlanner::Support WalkPatternGenerator::Trajectory::get_next_support(dou
237
232
  {
238
233
  int index;
239
234
  _findPart(parts, t, &index);
240
- if (index + n >= parts.size())
235
+ if (index + n >= (int)parts.size())
241
236
  {
242
237
  return T * parts.back().support;
243
238
  }
@@ -317,8 +312,9 @@ void WalkPatternGenerator::plan_sgl_support(Trajectory& trajectory, int part_ind
317
312
  {
318
313
  Eigen::Vector3d start = old_trajectory->get_T_world_foot(flying_side, trajectory.t_start).translation();
319
314
  Eigen::Vector3d start_vel = old_trajectory->get_v_world_foot(flying_side, trajectory.t_start);
320
- part.swing_trajectory = SwingFootCubic::make_trajectory(part.t_start, virt_duration, parameters.walk_foot_height,
321
- parameters.walk_foot_rise_ratio, start, T_world_end.translation(), part.support.elapsed_ratio, start_vel);
315
+ part.swing_trajectory = SwingFootCubic::make_trajectory(
316
+ part.t_start, virt_duration, parameters.walk_foot_height, parameters.walk_foot_rise_ratio, start,
317
+ T_world_end.translation(), part.support.elapsed_ratio, start_vel);
322
318
 
323
319
  double replan_yaw = old_trajectory->foot_yaw(flying_side).pos(trajectory.t_start);
324
320
  trajectory.foot_yaw(flying_side).add_point(trajectory.t_start, replan_yaw, 0);
@@ -326,8 +322,9 @@ void WalkPatternGenerator::plan_sgl_support(Trajectory& trajectory, int part_ind
326
322
  else
327
323
  {
328
324
  Eigen::Vector3d start = trajectory.parts[part_index - 1].support.footstep_frame(flying_side).translation();
329
- part.swing_trajectory = SwingFootCubic::make_trajectory(part.t_start, virt_duration, parameters.walk_foot_height,
330
- parameters.walk_foot_rise_ratio, start, T_world_end.translation());
325
+ part.swing_trajectory =
326
+ SwingFootCubic::make_trajectory(part.t_start, virt_duration, parameters.walk_foot_height,
327
+ parameters.walk_foot_rise_ratio, start, T_world_end.translation());
331
328
  }
332
329
 
333
330
  trajectory.foot_yaw(flying_side).add_point(part.t_end, frame_yaw(T_world_end.rotation()), 0);
@@ -356,7 +353,7 @@ void WalkPatternGenerator::plan_feet_trajectories(Trajectory& trajectory, Trajec
356
353
  old_trajectory->trunk_yaw.vel(trajectory.t_start));
357
354
  }
358
355
 
359
- for (int i; i<trajectory.parts.size(); i++)
356
+ for (int i = 0; i < (int)trajectory.parts.size(); i++)
360
357
  {
361
358
  // Single support
362
359
  if (trajectory.parts[i].support.footsteps.size() == 1)
@@ -371,12 +368,14 @@ void WalkPatternGenerator::plan_feet_trajectories(Trajectory& trajectory, Trajec
371
368
  }
372
369
  }
373
370
 
374
- void WalkPatternGenerator::constrain_lipm(problem::Problem& problem, LIPM& lipm, FootstepsPlanner::Support& support, double omega_2, HumanoidParameters& parameters)
371
+ void WalkPatternGenerator::constrain_lipm(problem::Problem& problem, LIPM& lipm, FootstepsPlanner::Support& support,
372
+ double omega_2, HumanoidParameters& parameters)
375
373
  {
376
- for (int timestep = 1; timestep < lipm.timesteps+1; timestep++)
374
+ for (int timestep = 1; timestep < lipm.timesteps + 1; timestep++)
377
375
  {
378
376
  // Ensuring ZMP remains in the support polygon
379
- auto& zmp_constraint = problem.add_constraint(PolygonConstraint::in_polygon_xy(lipm.zmp(timestep, omega_2), support.support_polygon(), parameters.zmp_margin));
377
+ auto& zmp_constraint = problem.add_constraint(PolygonConstraint::in_polygon_xy(
378
+ lipm.zmp(timestep, omega_2), support.support_polygon(), parameters.zmp_margin));
380
379
  if (soft)
381
380
  {
382
381
  zmp_constraint.configure(ProblemConstraint::Soft, 1e5);
@@ -392,12 +391,14 @@ void WalkPatternGenerator::constrain_lipm(problem::Problem& problem, LIPM& lipm,
392
391
 
393
392
  // ZMP reference trajectory : target is the center of the support polygon
394
393
  Eigen::Vector2d zmp_target = (support.frame() * Eigen::Vector3d(x_offset, y_offset, 0)).head(2);
395
- problem.add_constraint(lipm.zmp(timestep, omega_2) == zmp_target).configure(ProblemConstraint::Soft, parameters.zmp_reference_weight);
396
-
394
+ problem.add_constraint(lipm.zmp(timestep, omega_2) == zmp_target)
395
+ .configure(ProblemConstraint::Soft, parameters.zmp_reference_weight);
396
+
397
397
  // At the end of an end support, we reach the target with a null speed and a null acceleration
398
398
  if (support.end && timestep == lipm.timesteps)
399
399
  {
400
- auto& pos_constraint = problem.add_constraint(lipm.pos(timestep) == Eigen::Vector2d(support.frame().translation().x(), support.frame().translation().y()));
400
+ auto& pos_constraint = problem.add_constraint(
401
+ lipm.pos(timestep) == Eigen::Vector2d(support.frame().translation().x(), support.frame().translation().y()));
401
402
  auto& vel_constraint = problem.add_constraint(lipm.vel(timestep) == Eigen::Vector2d(0., 0.));
402
403
  auto& acc_constraint = problem.add_constraint(lipm.acc(timestep) == Eigen::Vector2d(0., 0.));
403
404
 
@@ -411,8 +412,9 @@ void WalkPatternGenerator::constrain_lipm(problem::Problem& problem, LIPM& lipm,
411
412
  }
412
413
  }
413
414
 
414
- void WalkPatternGenerator::plan_com(Trajectory& trajectory, std::vector<FootstepsPlanner::Support>& supports,
415
- Eigen::Vector2d initial_pos, Eigen::Vector2d initial_vel, Eigen::Vector2d initial_acc)
415
+ void WalkPatternGenerator::plan_com(Trajectory& trajectory, std::vector<FootstepsPlanner::Support>& supports,
416
+ Eigen::Vector2d initial_pos, Eigen::Vector2d initial_vel,
417
+ Eigen::Vector2d initial_acc)
416
418
  {
417
419
  // Initialization of the LIPM problem
418
420
  problem::Problem problem;
@@ -420,7 +422,7 @@ void WalkPatternGenerator::plan_com(Trajectory& trajectory, std::vector<Footstep
420
422
 
421
423
  // Building each TrajectoryPart and LIPM
422
424
  double t = trajectory.t_start;
423
- for (auto& support: supports)
425
+ for (auto& support : supports)
424
426
  {
425
427
  double support_duration = (1 - support.elapsed_ratio) * support_default_duration(support) * support.time_ratio;
426
428
  int lipm_timesteps = std::max(1, int((1 - support.elapsed_ratio) * support_default_timesteps(support)));
@@ -451,8 +453,8 @@ void WalkPatternGenerator::plan_com(Trajectory& trajectory, std::vector<Footstep
451
453
 
452
454
  // Solving the problem
453
455
  problem.solve();
454
-
455
- for (int i = 0; i < trajectory.parts.size(); i++)
456
+
457
+ for (int i = 0; i < (int)trajectory.parts.size(); i++)
456
458
  {
457
459
  auto& part = trajectory.parts[i];
458
460
  part.com_trajectory = lipms[i].get_trajectory();
@@ -507,11 +509,18 @@ WalkPatternGenerator::Trajectory WalkPatternGenerator::replan(std::vector<Footst
507
509
  bool WalkPatternGenerator::can_replan_supports(Trajectory& trajectory, double t_replan)
508
510
  {
509
511
  // We can't replan from an "end", a "start" or if the next support is an "end"
510
- if (trajectory.get_support(t_replan).end || trajectory.get_support(t_replan).start || trajectory.get_next_support(t_replan).end)
512
+ if (trajectory.get_support(t_replan).end || trajectory.get_support(t_replan).start ||
513
+ trajectory.get_next_support(t_replan).end)
511
514
  {
512
515
  return false;
513
516
  }
514
517
 
518
+ if (trajectory.get_support(t_replan).is_both())
519
+ {
520
+ // We can't replan if the current support is a double support
521
+ return false;
522
+ }
523
+
515
524
  // XXX: Need to move to a branch
516
525
  // We can't replan if more than 1/2 of the support phase has passed
517
526
  // if (trajectory.get_support(t_replan).elapsed_ratio > 0.8)
@@ -526,7 +535,9 @@ bool WalkPatternGenerator::can_replan_supports(Trajectory& trajectory, double t_
526
535
  return true;
527
536
  }
528
537
 
529
- std::vector<FootstepsPlanner::Support> WalkPatternGenerator::replan_supports(FootstepsPlanner& planner, Trajectory& trajectory, double t_replan, double t_last_replan)
538
+ std::vector<FootstepsPlanner::Support> WalkPatternGenerator::replan_supports(FootstepsPlanner& planner,
539
+ Trajectory& trajectory, double t_replan,
540
+ double t_last_replan)
530
541
  {
531
542
  if (!can_replan_supports(trajectory, t_replan))
532
543
  {
@@ -563,16 +574,20 @@ std::vector<FootstepsPlanner::Support> WalkPatternGenerator::replan_supports(Foo
563
574
  std::vector<FootstepsPlanner::Support> supports;
564
575
  if (current_support.is_both())
565
576
  {
566
- supports = FootstepsPlanner::make_supports(footsteps, current_support.t_start, false, parameters.has_double_support(), true);
577
+ supports = FootstepsPlanner::make_supports(footsteps, current_support.t_start, false,
578
+ parameters.has_double_support(), true);
567
579
  supports.erase(supports.begin());
568
580
  }
569
581
  else
570
582
  {
571
- supports = FootstepsPlanner::make_supports(footsteps, current_support.t_start, false, parameters.has_double_support(), true);
583
+ supports = FootstepsPlanner::make_supports(footsteps, current_support.t_start, false,
584
+ parameters.has_double_support(), true);
572
585
  }
573
586
 
574
587
  double elapsed_duration = t_replan - std::max(t_last_replan, current_support.t_start);
575
- supports[0].elapsed_ratio = current_support.elapsed_ratio + elapsed_duration / (support_default_duration(current_support) * current_support.time_ratio);
588
+ supports[0].elapsed_ratio =
589
+ current_support.elapsed_ratio +
590
+ elapsed_duration / (support_default_duration(current_support) * current_support.time_ratio);
576
591
  supports[0].time_ratio = current_support.time_ratio;
577
592
  supports[0].target_world_dcm = current_support.target_world_dcm;
578
593
  return supports;
@@ -606,14 +621,15 @@ double WalkPatternGenerator::support_default_duration(FootstepsPlanner::Support&
606
621
 
607
622
  void WalkPatternGenerator::Trajectory::print_parts_timings()
608
623
  {
609
- for (int i=0; i<parts.size(); i++)
624
+ for (int i = 0; i < (int)parts.size(); i++)
610
625
  {
611
626
  std::cout << "Part " << i << " : start at " << parts[i].t_start << ", end at " << parts[i].t_end << std::endl;
612
627
  }
613
628
  }
614
629
 
615
- std::vector<FootstepsPlanner::Support> WalkPatternGenerator::update_supports(double t,
616
- std::vector<FootstepsPlanner::Support> supports, Eigen::Vector2d world_target_zmp, Eigen::Vector2d world_measured_dcm)
630
+ std::vector<FootstepsPlanner::Support>
631
+ WalkPatternGenerator::update_supports(double t, std::vector<FootstepsPlanner::Support> supports,
632
+ Eigen::Vector2d world_target_zmp, Eigen::Vector2d world_measured_dcm)
617
633
  {
618
634
  FootstepsPlanner::Support current_support = supports[0];
619
635
  if (current_support.is_both())
@@ -632,9 +648,11 @@ std::vector<FootstepsPlanner::Support> WalkPatternGenerator::update_supports(dou
632
648
  Eigen::Vector2d p_world_support = current_support.frame().translation().head(2);
633
649
 
634
650
  // Decision variables
635
- placo::problem::Variable* support_next_zmp = &problem.add_variable(2); // ZMP of the next support expressed in the current support frame
636
- placo::problem::Variable* tau = &problem.add_variable(1); // exp(omega * T) where T is the end of the current support
637
- placo::problem::Variable* support_dcm_offset = &problem.add_variable(2); // Offset of the DCM from the ZMP in the current support frame
651
+ placo::problem::Variable* support_next_zmp =
652
+ &problem.add_variable(2); // ZMP of the next support expressed in the current support frame
653
+ placo::problem::Variable* tau = &problem.add_variable(1); // exp(omega * T) where T is the end of the current support
654
+ placo::problem::Variable* support_dcm_offset =
655
+ &problem.add_variable(2); // Offset of the DCM from the ZMP in the current support frame
638
656
 
639
657
  // ----------------- Objective functions: -----------------
640
658
  // Time reference
@@ -656,15 +674,16 @@ std::vector<FootstepsPlanner::Support> WalkPatternGenerator::update_supports(dou
656
674
 
657
675
  // --------------------- Constraints: ---------------------
658
676
  // Time constraints
659
- double T_min = std::max(0.15, elapsed_time); // Should probably add an offset to elapsed_time
660
- double T_max = std::max(3., elapsed_time); // Arbitrary value of 3s
677
+ double T_min = std::max(0.15, elapsed_time); // Should probably add an offset to elapsed_time
678
+ double T_max = std::max(3., elapsed_time); // Arbitrary value of 3s
661
679
  problem.add_constraint(tau->expr() >= exp(omega * (T_min))).configure(ProblemConstraint::Hard);
662
680
  problem.add_constraint(tau->expr() <= exp(omega * (T_max))).configure(ProblemConstraint::Hard);
663
681
 
664
682
  // ZMP and DCM offset constraints (expressed in the current support frame)
665
683
  if (current_support.side() == HumanoidRobot::Side::Right)
666
684
  {
667
- problem.add_constraint(PolygonConstraint::in_polygon_xy(support_next_zmp->expr(), parameters.op_space_polygon)).configure(ProblemConstraint::Hard);
685
+ problem.add_constraint(PolygonConstraint::in_polygon_xy(support_next_zmp->expr(), parameters.op_space_polygon))
686
+ .configure(ProblemConstraint::Hard);
668
687
 
669
688
  std::vector<Eigen::Vector2d> dcm_offset_polygon = parameters.dcm_offset_polygon;
670
689
  for (auto& point : dcm_offset_polygon)
@@ -672,7 +691,8 @@ std::vector<FootstepsPlanner::Support> WalkPatternGenerator::update_supports(dou
672
691
  point(0) = -point(0);
673
692
  point(1) = -point(1);
674
693
  }
675
- problem.add_constraint(PolygonConstraint::in_polygon_xy(support_dcm_offset->expr(), parameters.dcm_offset_polygon)).configure(ProblemConstraint::Soft, w_viability);
694
+ problem.add_constraint(PolygonConstraint::in_polygon_xy(support_dcm_offset->expr(), parameters.dcm_offset_polygon))
695
+ .configure(ProblemConstraint::Soft, w_viability);
676
696
  }
677
697
  else
678
698
  {
@@ -682,16 +702,23 @@ std::vector<FootstepsPlanner::Support> WalkPatternGenerator::update_supports(dou
682
702
  point(0) = -point(0);
683
703
  point(1) = -point(1);
684
704
  }
685
- problem.add_constraint(PolygonConstraint::in_polygon_xy(support_next_zmp->expr(), op_space_polygon)).configure(ProblemConstraint::Hard);
705
+ problem.add_constraint(PolygonConstraint::in_polygon_xy(support_next_zmp->expr(), op_space_polygon))
706
+ .configure(ProblemConstraint::Hard);
686
707
 
687
- problem.add_constraint(PolygonConstraint::in_polygon_xy(support_dcm_offset->expr(), parameters.dcm_offset_polygon)).configure(ProblemConstraint::Soft, w_viability);
708
+ problem.add_constraint(PolygonConstraint::in_polygon_xy(support_dcm_offset->expr(), parameters.dcm_offset_polygon))
709
+ .configure(ProblemConstraint::Soft, w_viability);
688
710
  }
689
-
711
+
690
712
  // LIPM Dynamics (expressed in the world frame)
691
713
  double duration = std::max(0., T - elapsed_time);
692
- Eigen::Vector2d world_virtual_zmp = get_optimal_zmp(world_measured_dcm, current_support.target_world_dcm, duration, current_support);
714
+ Eigen::Vector2d world_virtual_zmp =
715
+ get_optimal_zmp(world_measured_dcm, current_support.target_world_dcm, duration, current_support);
693
716
  // Eigen::Vector2d world_virtual_zmp = flatten_on_floor(current_support.frame()).translation().head(2);
694
- problem.add_constraint(world_next_zmp_expr + world_dcm_offset_expr == (world_measured_dcm - world_virtual_zmp) * exp(-omega * elapsed_time) * tau->expr() + world_virtual_zmp).configure(ProblemConstraint::Hard);
717
+ problem
718
+ .add_constraint(world_next_zmp_expr + world_dcm_offset_expr ==
719
+ (world_measured_dcm - world_virtual_zmp) * exp(-omega * elapsed_time) * tau->expr() +
720
+ world_virtual_zmp)
721
+ .configure(ProblemConstraint::Hard);
695
722
 
696
723
  problem.solve();
697
724
 
@@ -702,13 +729,14 @@ std::vector<FootstepsPlanner::Support> WalkPatternGenerator::update_supports(dou
702
729
 
703
730
  // Updating current support remaining duration
704
731
  double support_remaining_time = log(tau->value(0)) / omega - elapsed_time;
705
- supports[0].time_ratio = support_remaining_time / (support_default_duration(current_support) * (1 - current_support.elapsed_ratio));
732
+ supports[0].time_ratio =
733
+ support_remaining_time / (support_default_duration(current_support) * (1 - current_support.elapsed_ratio));
706
734
 
707
735
  return supports;
708
736
  }
709
737
 
710
- Eigen::Vector2d WalkPatternGenerator::get_optimal_zmp(Eigen::Vector2d world_dcm_start,
711
- Eigen::Vector2d world_dcm_end, double duration, FootstepsPlanner::Support& support)
738
+ Eigen::Vector2d WalkPatternGenerator::get_optimal_zmp(Eigen::Vector2d world_dcm_start, Eigen::Vector2d world_dcm_end,
739
+ double duration, FootstepsPlanner::Support& support)
712
740
  {
713
741
  placo::problem::Problem problem;
714
742
 
@@ -716,11 +744,18 @@ Eigen::Vector2d WalkPatternGenerator::get_optimal_zmp(Eigen::Vector2d world_dcm_
716
744
  placo::problem::Variable* world_zmp = &problem.add_variable(2);
717
745
 
718
746
  // LIPM Dynamics
719
- // problem.add_constraint(world_dcm_end == (world_dcm_start - world_zmp->expr()) * exp(omega * duration) + world_zmp->expr()).configure(ProblemConstraint::Soft, 1);
720
- problem.add_constraint(world_zmp->expr() == (world_dcm_end - world_dcm_start * exp(omega * duration)) / (1 - exp(omega * duration))).configure(ProblemConstraint::Soft, 1);
747
+ // problem.add_constraint(world_dcm_end == (world_dcm_start - world_zmp->expr()) * exp(omega * duration) +
748
+ // world_zmp->expr()).configure(ProblemConstraint::Soft, 1);
749
+ problem
750
+ .add_constraint(world_zmp->expr() ==
751
+ (world_dcm_end - world_dcm_start * exp(omega * duration)) / (1 - exp(omega * duration)))
752
+ .configure(ProblemConstraint::Soft, 1);
721
753
 
722
754
  // ZMP constrained to stay in the support polygon
723
- problem.add_constraint(PolygonConstraint::in_polygon_xy(world_zmp->expr(), support.support_polygon(), parameters.zmp_margin)).configure(ProblemConstraint::Hard);
755
+ problem
756
+ .add_constraint(
757
+ PolygonConstraint::in_polygon_xy(world_zmp->expr(), support.support_polygon(), parameters.zmp_margin))
758
+ .configure(ProblemConstraint::Hard);
724
759
 
725
760
  problem.solve();
726
761
  return world_zmp->value;
@@ -4,7 +4,7 @@
4
4
  namespace placo::kinematics
5
5
  {
6
6
  ManipulabilityTask::ManipulabilityTask(model::RobotWrapper::FrameIndex frame_index, Type type, double lambda)
7
- : frame_index(frame_index), type(type), lambda(lambda)
7
+ : frame_index(frame_index), lambda(lambda), type(type)
8
8
  {
9
9
  }
10
10
 
@@ -171,11 +171,6 @@ Expression Integrator::expr_t(double t, int diff)
171
171
  {
172
172
  t -= t_start;
173
173
 
174
- if (t < 0 || t > variable->size() * dt)
175
- {
176
- throw std::runtime_error("expr_t called with a t out of the scope of the integrator");
177
- }
178
-
179
174
  int step = std::max<int>(std::min<int>(variable->size() - 1, t / dt), 0);
180
175
 
181
176
  if (diff == order)
@@ -190,7 +185,7 @@ Expression Integrator::expr_t(double t, int diff)
190
185
  Eigen::MatrixXd Ar = AB.first;
191
186
  Eigen::MatrixXd Br = AB.second;
192
187
 
193
- Expression e = (Ar * expr(step)) + Br * variable->expr(step);
188
+ Expression e = (Ar * expr(step)) + Br * variable->expr(step, 1);
194
189
 
195
190
  if (diff > -1)
196
191
  {
placo-0.8.7/Makefile DELETED
@@ -1,12 +0,0 @@
1
-
2
- # Building Python wheel
3
- all:
4
- @rm -rf dist/*
5
- bash build_wheel.sh
6
- bash tweak_sdist.sh
7
-
8
- upload:
9
- python3 -m twine upload --repository pypi dist/*
10
-
11
- clean:
12
- rm -rf dist
@@ -1,9 +0,0 @@
1
- #!/bin/bash
2
-
3
- export PATH=$(getconf PATH)
4
- export PKG_CONFIG_PATH=$(getconf PKG_CONFIG_PATH)
5
- export LD_LIBRARY_PATH=$(getconf LD_LIBRARY_PATH)
6
- export PYTHONPATH="."
7
- export CMAKE_PREFIX_PATH=$(getconf CMAKE_PREFIX_PATH)
8
-
9
- python -m build --sdist --wheel
@@ -1,22 +0,0 @@
1
- #!/bin/bash
2
-
3
- # Moving to dist/
4
- cd dist/
5
-
6
- # Retrieving package name (e.g: placo-X.Y.Z)
7
- package=`basename *.tar.gz .tar.gz`
8
- echo ${package}
9
-
10
- # Unpacking the wheel
11
- wheel unpack *.whl
12
-
13
- # Retrieving the placo.pyi produced in the wheel and copying it to the root
14
- placo_pyi=`find ${package}/ -name "placo.pyi"`
15
- cp ${placo_pyi} ${package}/
16
-
17
- # Adding it to the tar.gz
18
- gunzip ${package}.tar.gz
19
- tar -rf ${package}.tar ${package}/placo.pyi
20
- gzip ${package}.tar
21
-
22
- rm -rf ${package}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes