placo 0.6.4__tar.gz → 0.7.0__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.
- {placo-0.6.4 → placo-0.7.0}/CMakeLists.txt +5 -5
- placo-0.7.0/PKG-INFO +59 -0
- placo-0.7.0/README.md +39 -0
- placo-0.7.0/bindings/doxystub/README.md +15 -0
- placo-0.7.0/bindings/doxystub/config.py +5 -0
- {placo-0.6.4 → placo-0.7.0/bindings/doxystub}/stubs.py +25 -19
- placo-0.7.0/bindings/doxystub/stubs.sh +5 -0
- {placo-0.6.4 → placo-0.7.0}/bindings/expose-dynamics.cpp +2 -1
- {placo-0.6.4 → placo-0.7.0}/bindings/expose-footsteps.cpp +6 -8
- {placo-0.6.4 → placo-0.7.0}/bindings/expose-kinematics.cpp +1 -1
- {placo-0.6.4 → placo-0.7.0}/bindings/expose-parameters.cpp +11 -5
- {placo-0.6.4 → placo-0.7.0}/bindings/expose-problem.cpp +1 -1
- {placo-0.6.4 → placo-0.7.0}/bindings/expose-robot-wrapper.cpp +1 -1
- {placo-0.6.4 → placo-0.7.0}/bindings/expose-tools.cpp +11 -5
- {placo-0.6.4 → placo-0.7.0}/bindings/expose-utils.hpp +14 -2
- {placo-0.6.4 → placo-0.7.0}/bindings/expose-walk-pattern-generator.cpp +8 -3
- placo-0.7.0/build_wheel.sh +11 -0
- {placo-0.6.4 → placo-0.7.0}/pyproject.toml +6 -8
- {placo-0.6.4 → placo-0.7.0}/python/placo_utils/visualization.py +3 -2
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/footsteps_planner.cpp +19 -16
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/footsteps_planner.h +3 -5
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/footsteps_planner_naive.cpp +2 -2
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/humanoid_parameters.h +3 -1
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/walk_pattern_generator.cpp +88 -35
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/walk_pattern_generator.h +28 -16
- {placo-0.6.4 → placo-0.7.0}/src/placo/model/robot_wrapper.cpp +4 -5
- {placo-0.6.4 → placo-0.7.0}/src/placo/tools/segment.cpp +17 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/tools/segment.h +8 -0
- placo-0.6.4/PKG-INFO +0 -56
- placo-0.6.4/README.md +0 -34
- placo-0.6.4/placo.pyi +0 -7872
- {placo-0.6.4 → placo-0.7.0}/.clang-format +0 -0
- {placo-0.6.4 → placo-0.7.0}/.gitattributes +0 -0
- {placo-0.6.4 → placo-0.7.0}/.gitignore +0 -0
- {placo-0.6.4 → placo-0.7.0}/.readthedocs.yaml +0 -0
- {placo-0.6.4 → placo-0.7.0}/Doxyfile +0 -0
- {placo-0.6.4 → placo-0.7.0}/LICENSE +0 -0
- {placo-0.6.4 → placo-0.7.0}/Makefile +0 -0
- {placo-0.6.4 → placo-0.7.0/bindings/doxystub}/doxygen_parse.py +0 -0
- {placo-0.6.4/bindings → placo-0.7.0/bindings/doxystub}/registry.cpp +0 -0
- {placo-0.6.4/bindings → placo-0.7.0/bindings/doxystub}/registry.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/bindings/expose-eigen.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/bindings/module.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/bindings/module.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/python/.vscode/settings.json +0 -0
- {placo-0.6.4 → placo-0.7.0}/python/Makefile +0 -0
- {placo-0.6.4 → placo-0.7.0}/python/placo_utils/__init__.py +0 -0
- {placo-0.6.4 → placo-0.7.0}/python/placo_utils/tf.py +0 -0
- {placo-0.6.4 → placo-0.7.0}/python/placo_utils/view.py +0 -0
- {placo-0.6.4 → placo-0.7.0}/python/run_tests.sh +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/avoid_self_collisions_constraint.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/avoid_self_collisions_constraint.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/com_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/com_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/constraint.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/constraint.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/contacts.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/contacts.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/dynamics_solver.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/dynamics_solver.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/frame_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/frame_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/gear_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/gear_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/joints_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/joints_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/orientation_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/orientation_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/position_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/position_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/relative_frame_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/relative_frame_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/relative_orientation_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/relative_orientation_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/relative_position_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/relative_position_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/torque_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/dynamics/torque_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/foot_trajectory.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/foot_trajectory.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/footsteps_planner_naive.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/footsteps_planner_repetitive.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/footsteps_planner_repetitive.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/humanoid_parameters.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/humanoid_robot.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/humanoid_robot.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/kick.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/kick.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/lipm.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/lipm.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/swing_foot.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/swing_foot.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/swing_foot_cubic.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/swing_foot_cubic.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/swing_foot_quintic.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/swing_foot_quintic.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/walk_tasks.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/humanoid/walk_tasks.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/avoid_self_collisions_constraint.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/avoid_self_collisions_constraint.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/axis_align_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/axis_align_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/centroidal_momentum_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/centroidal_momentum_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/com_polygon_constraint.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/com_polygon_constraint.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/com_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/com_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/cone_constraint.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/cone_constraint.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/constraint.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/constraint.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/distance_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/distance_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/frame_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/frame_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/gear_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/gear_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/joint_space_half_spaces_constraint.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/joint_space_half_spaces_constraint.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/joints_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/joints_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/kinematics_solver.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/kinematics_solver.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/kinetic_energy_regularization_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/kinetic_energy_regularization_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/manipulability_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/manipulability_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/orientation_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/orientation_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/position_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/position_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/regularization_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/regularization_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/relative_frame_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/relative_frame_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/relative_orientation_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/relative_orientation_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/relative_position_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/relative_position_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/wheel_task.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/kinematics/wheel_task.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/model/robot_wrapper.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/problem/constraint.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/problem/constraint.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/problem/expression.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/problem/expression.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/problem/integrator.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/problem/integrator.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/problem/polygon_constraint.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/problem/polygon_constraint.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/problem/problem.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/problem/problem.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/problem/problem_polynom.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/problem/problem_polynom.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/problem/qp_error.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/problem/qp_error.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/problem/sparsity.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/problem/sparsity.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/problem/variable.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/problem/variable.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/tools/axises_mask.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/tools/axises_mask.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/tools/cubic_spline.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/tools/cubic_spline.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/tools/cubic_spline_3d.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/tools/cubic_spline_3d.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/tools/directions.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/tools/directions.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/tools/polynom.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/tools/polynom.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/tools/prioritized.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/tools/prioritized.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/tools/utils.cpp +0 -0
- {placo-0.6.4 → placo-0.7.0}/src/placo/tools/utils.h +0 -0
- {placo-0.6.4 → placo-0.7.0}/tweak_sdist.sh +0 -0
- {placo-0.6.4 → placo-0.7.0}/wks.yml +0 -0
|
@@ -127,7 +127,7 @@ target_link_libraries(libplaco PUBLIC
|
|
|
127
127
|
${PROTOBUF_LIBRARIES}
|
|
128
128
|
${PROTOBUF_LIBRARIES}
|
|
129
129
|
)
|
|
130
|
-
target_compile_definitions(libplaco PUBLIC
|
|
130
|
+
target_compile_definitions(libplaco PUBLIC)
|
|
131
131
|
|
|
132
132
|
if(TARGET rhoban_utils)
|
|
133
133
|
message("Placo: Rhoban utils is present, enabling it")
|
|
@@ -151,7 +151,7 @@ add_library(placo MODULE
|
|
|
151
151
|
bindings/expose-walk-pattern-generator.cpp
|
|
152
152
|
bindings/expose-dynamics.cpp
|
|
153
153
|
bindings/module.cpp
|
|
154
|
-
bindings/registry.cpp
|
|
154
|
+
bindings/doxystub/registry.cpp
|
|
155
155
|
)
|
|
156
156
|
set_target_properties(placo PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${PYTHON_SITELIB})
|
|
157
157
|
|
|
@@ -159,8 +159,8 @@ target_link_libraries(placo ${Boost_LIBRARIES} ${PYTHON_LIBRARIES} libplaco)
|
|
|
159
159
|
target_include_directories(placo PRIVATE ${PYTHON_INCLUDE_DIRS})
|
|
160
160
|
|
|
161
161
|
add_custom_command(TARGET placo POST_BUILD
|
|
162
|
-
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/stubs.
|
|
163
|
-
|
|
162
|
+
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/bindings/doxystub/stubs.sh "${CMAKE_BINARY_DIR}/${PYTHON_SITELIB}" > "${CMAKE_BINARY_DIR}/${PYTHON_SITELIB}/placo.pyi"
|
|
163
|
+
WORKING DIRECTORY "/"
|
|
164
164
|
COMMENT "Generating stubs..."
|
|
165
165
|
)
|
|
166
166
|
|
|
@@ -175,4 +175,4 @@ set_target_properties(libplaco PROPERTIES INSTALL_RPATH "\$ORIGIN")
|
|
|
175
175
|
install(TARGETS libplaco DESTINATION lib)
|
|
176
176
|
install(TARGETS placo DESTINATION ${PYTHON_SITELIB})
|
|
177
177
|
install(FILES ${CMAKE_BINARY_DIR}/${PYTHON_SITELIB}/placo.pyi DESTINATION ${PYTHON_SITELIB})
|
|
178
|
-
install(DIRECTORY ${CMAKE_BINARY_DIR}/${PYTHON_SITELIB}/placo_utils DESTINATION ${PYTHON_SITELIB})
|
|
178
|
+
install(DIRECTORY ${CMAKE_BINARY_DIR}/${PYTHON_SITELIB}/placo_utils DESTINATION ${PYTHON_SITELIB})
|
placo-0.7.0/PKG-INFO
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: placo
|
|
3
|
+
Version: 0.7.0
|
|
4
|
+
Summary: PlaCo: Rhoban Planning and Control
|
|
5
|
+
Requires-Python: >= 3.9
|
|
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 >= 3
|
|
14
|
+
Requires-Dist: rhoban-cmeel-jsoncpp
|
|
15
|
+
Requires-Dist: meshcat
|
|
16
|
+
Requires-Dist: ischedule
|
|
17
|
+
Provides-Extra: build
|
|
18
|
+
Requires-Dist: pin[build] >= 3 ; extra == "build"
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
|
|
21
|
+
<img width="400" src="https://placo.readthedocs.io/en/latest/_static/placo.png" />
|
|
22
|
+
|
|
23
|
+
## Planning & Control
|
|
24
|
+
|
|
25
|
+
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.
|
|
26
|
+
|
|
27
|
+
### Task-Space Inverse Kinematics
|
|
28
|
+
|
|
29
|
+
[](https://github.com/Rhoban/placo-examples/blob/master/kinematics/videos/quadruped_targets.mp4?raw=true)
|
|
30
|
+
|
|
31
|
+
High-level API to specify tasks for constrained inverse kinematics (IK).
|
|
32
|
+
|
|
33
|
+
- [See documentation](https://placo.readthedocs.io/en/latest/kinematics/getting_started.html)
|
|
34
|
+
- [Examples](https://placo.readthedocs.io/en/latest/kinematics/examples_gallery.html)
|
|
35
|
+
|
|
36
|
+
### Task-Space Inverse Dynamics
|
|
37
|
+
|
|
38
|
+
[](https://github.com/Rhoban/placo-examples/blob/master/dynamics/videos/megabot.mp4?raw=true)
|
|
39
|
+
|
|
40
|
+
High-level API to specify tasks for constrained inverse dynamics (ID).
|
|
41
|
+
|
|
42
|
+
- [See documentation](https://placo.readthedocs.io/en/latest/dynamics/getting_started.html)
|
|
43
|
+
- [Examples](https://placo.readthedocs.io/en/latest/dynamics/examples_gallery.html)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
## Installing
|
|
47
|
+
|
|
48
|
+
PlaCo can be installed from ``pip``
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
pip install placo
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Or [built from sources](https://placo.readthedocs.io/en/latest/basics/installation_source.html)
|
|
55
|
+
|
|
56
|
+
## Resources
|
|
57
|
+
|
|
58
|
+
* [Documentation](https://placo.readthedocs.io/en/latest/)
|
|
59
|
+
* [Examples](https://github.com/rhoban/placo-examples) repository
|
placo-0.7.0/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
|
+
[](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
|
+
[](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
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Generate Doxygen stubs
|
|
2
|
+
|
|
3
|
+
This code allow to generate a `module.pyi` file containing useful auto-completion stubs, based on Doxygen and introspection.
|
|
4
|
+
|
|
5
|
+
## Step1: configure your project
|
|
6
|
+
|
|
7
|
+
In `config.py`, set the name of the module and the path to the source directory (where the `Doxyfile` is)
|
|
8
|
+
|
|
9
|
+
## Step2: expose through registry
|
|
10
|
+
|
|
11
|
+
Include `registry.h` in your Python bindings, and use `class__` instead of `class_`, so that the registered classes will be wrapped in the registry
|
|
12
|
+
|
|
13
|
+
## Step3: call `stubs.py` after compilation
|
|
14
|
+
|
|
15
|
+
Execute the `stubs.py` script after compilation, it will output the `pyi` file.
|
|
@@ -1,27 +1,28 @@
|
|
|
1
|
-
#!/usr/bin/env
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
2
|
import re
|
|
3
3
|
import inspect
|
|
4
4
|
import sys
|
|
5
5
|
import os
|
|
6
6
|
import argparse
|
|
7
|
+
from config import module_name, doxygen_path
|
|
7
8
|
|
|
8
9
|
# Current script directory:
|
|
9
|
-
repo_directory = os.path.dirname(os.path.realpath(__file__))
|
|
10
|
+
repo_directory = os.path.dirname(os.path.realpath(__file__ + "/" + doxygen_path))
|
|
10
11
|
|
|
11
|
-
# If
|
|
12
|
-
# avoid running Doxygen when building
|
|
13
|
-
if os.path.exists(f"{repo_directory}/
|
|
14
|
-
with open(f"{repo_directory}/
|
|
12
|
+
# If .pyi file already exists next to stubs.py, we read it directly. This is a way to
|
|
13
|
+
# avoid running Doxygen when building sdist release.
|
|
14
|
+
if os.path.exists(f"{repo_directory}/{module_name}.pyi"):
|
|
15
|
+
with open(f"{repo_directory}/{module_name}.pyi", "r") as f:
|
|
15
16
|
print(f.read())
|
|
16
17
|
exit(0)
|
|
17
18
|
|
|
18
19
|
# Prepending current directory to PYTHONPATH
|
|
19
20
|
sys.path = ["."] + sys.path
|
|
20
21
|
|
|
21
|
-
import
|
|
22
|
+
exec(f"import {module_name}")
|
|
22
23
|
from doxygen_parse import parse_directory, get_members, get_metadata
|
|
23
24
|
|
|
24
|
-
module
|
|
25
|
+
module = eval(f"{module_name}")
|
|
25
26
|
|
|
26
27
|
# Ensure Doxygen is run
|
|
27
28
|
if not os.path.exists(f"/usr/bin/doxygen"):
|
|
@@ -53,12 +54,13 @@ rewrite_types: dict = {
|
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
# Building registry and reverse registry for class names
|
|
56
|
-
cxx_registry =
|
|
57
|
+
cxx_registry = module.get_classes_registry()
|
|
57
58
|
py_registry = {"root": "root"}
|
|
58
59
|
for entry in cxx_registry:
|
|
59
60
|
rewrite_types[entry] = cxx_registry[entry]
|
|
60
61
|
py_registry[cxx_registry[entry]] = entry
|
|
61
62
|
|
|
63
|
+
|
|
62
64
|
def get_member(class_name: str, member_name: str):
|
|
63
65
|
if class_name in py_registry:
|
|
64
66
|
cxx_name = py_registry[class_name]
|
|
@@ -131,13 +133,17 @@ def print_def_prototype(
|
|
|
131
133
|
|
|
132
134
|
str_definition += f"{prefix}def {method_name}(\n"
|
|
133
135
|
for arg_name, arg_type, defvalue, comment in args:
|
|
136
|
+
extra_comment = ""
|
|
134
137
|
str_definition += f"{prefix} {arg_name}: {arg_type}"
|
|
135
138
|
if defvalue is not None:
|
|
136
139
|
if arg_type in ["str", "float", "int", "bool"]:
|
|
137
140
|
str_definition += f" = {defvalue.capitalize()}"
|
|
141
|
+
else:
|
|
142
|
+
str_definition += f" = None"
|
|
143
|
+
extra_comment = f" (default: {defvalue})"
|
|
138
144
|
str_definition += ","
|
|
139
145
|
if comment is not None:
|
|
140
|
-
str_definition += f" # {comment}"
|
|
146
|
+
str_definition += f" # {comment}{extra_comment}"
|
|
141
147
|
str_definition += "\n"
|
|
142
148
|
str_definition += f"\n{prefix}) -> {return_type}:\n"
|
|
143
149
|
if doc != "":
|
|
@@ -214,18 +220,18 @@ def print_class_method(class_name: str, method_name: str, doc: str, prefix: str
|
|
|
214
220
|
else:
|
|
215
221
|
print_def(method_name, doc, prefix)
|
|
216
222
|
|
|
217
|
-
|
|
223
|
+
print("# Doxygen stubs generation")
|
|
218
224
|
print("import numpy")
|
|
219
225
|
print("import typing")
|
|
220
226
|
|
|
221
|
-
for name, object in inspect.getmembers(
|
|
227
|
+
for name, object in inspect.getmembers(module):
|
|
222
228
|
if isinstance(object, type):
|
|
223
229
|
class_name = object.__name__
|
|
224
|
-
print(f
|
|
230
|
+
print(f'{class_name} = typing.NewType("{class_name}", None)')
|
|
225
231
|
|
|
226
232
|
groups = {}
|
|
227
233
|
|
|
228
|
-
for name, object in inspect.getmembers(
|
|
234
|
+
for name, object in inspect.getmembers(module):
|
|
229
235
|
if isinstance(object, type):
|
|
230
236
|
class_name = object.__name__
|
|
231
237
|
print(f"class {class_name}:")
|
|
@@ -234,10 +240,10 @@ for name, object in inspect.getmembers(placo):
|
|
|
234
240
|
metadata = get_metadata(py_registry[class_name])
|
|
235
241
|
|
|
236
242
|
if metadata is not None:
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
243
|
+
namespace = "::".join(metadata["name"].split("::")[:-1][:2])
|
|
244
|
+
if namespace not in groups:
|
|
245
|
+
groups[namespace] = []
|
|
246
|
+
groups[namespace].append(class_name)
|
|
241
247
|
|
|
242
248
|
if (
|
|
243
249
|
metadata is not None
|
|
@@ -259,4 +265,4 @@ for name, object in inspect.getmembers(placo):
|
|
|
259
265
|
else:
|
|
260
266
|
...
|
|
261
267
|
|
|
262
|
-
print(f"__groups__ = {groups}")
|
|
268
|
+
print(f"__groups__ = {groups}")
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
#include "expose-utils.hpp"
|
|
4
4
|
#include "module.h"
|
|
5
|
-
#include "registry.h"
|
|
5
|
+
#include "doxystub/registry.h"
|
|
6
6
|
#include "placo/humanoid/footsteps_planner.h"
|
|
7
7
|
#include "placo/humanoid/footsteps_planner_naive.h"
|
|
8
8
|
#include "placo/humanoid/footsteps_planner_repetitive.h"
|
|
@@ -21,32 +21,30 @@ 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("raw_frame", &FootstepsPlanner::Footstep::raw_frame)
|
|
27
|
-
.add_property("dx", &FootstepsPlanner::Footstep::dx, &FootstepsPlanner::Footstep::dx)
|
|
28
|
-
.add_property("dy", &FootstepsPlanner::Footstep::dy, &FootstepsPlanner::Footstep::dy)
|
|
29
25
|
.add_property("foot_length", &FootstepsPlanner::Footstep::foot_length, &FootstepsPlanner::Footstep::foot_length)
|
|
30
26
|
.add_property("foot_width", &FootstepsPlanner::Footstep::foot_width, &FootstepsPlanner::Footstep::foot_width)
|
|
27
|
+
.add_property("frame", &FootstepsPlanner::Footstep::frame, &FootstepsPlanner::Footstep::frame)
|
|
31
28
|
.def("support_polygon", &FootstepsPlanner::Footstep::support_polygon)
|
|
32
29
|
.def("overlap", &FootstepsPlanner::Footstep::overlap)
|
|
33
30
|
.def("polygon_contains", &FootstepsPlanner::Footstep::polygon_contains)
|
|
34
|
-
.def("frame", &FootstepsPlanner::Footstep::frame)
|
|
35
31
|
.staticmethod("polygon_contains");
|
|
36
32
|
|
|
37
33
|
class__<FootstepsPlanner::Support>("Support", init<>())
|
|
38
34
|
.def("support_polygon", &FootstepsPlanner::Support::support_polygon)
|
|
39
35
|
.def("frame", &FootstepsPlanner::Support::frame)
|
|
40
36
|
.def("footstep_frame", &FootstepsPlanner::Support::footstep_frame)
|
|
37
|
+
.def("apply_offset", &FootstepsPlanner::Support::apply_offset)
|
|
41
38
|
.def("side", &FootstepsPlanner::Support::side)
|
|
42
39
|
.def("is_both", &FootstepsPlanner::Support::is_both)
|
|
43
40
|
.def(
|
|
44
41
|
"set_start", +[](FootstepsPlanner::Support& support, bool b) { support.start = b; })
|
|
45
42
|
.def(
|
|
46
43
|
"set_end", +[](FootstepsPlanner::Support& support, bool b) { support.end = b; })
|
|
47
|
-
.add_property("footsteps", &FootstepsPlanner::Support::footsteps)
|
|
44
|
+
.add_property("footsteps", &FootstepsPlanner::Support::footsteps, &FootstepsPlanner::Support::footsteps)
|
|
48
45
|
.add_property("t_start", &FootstepsPlanner::Support::t_start, &FootstepsPlanner::Support::t_start)
|
|
49
|
-
.add_property("elapsed_ratio", &FootstepsPlanner::Support::elapsed_ratio,
|
|
46
|
+
.add_property("elapsed_ratio", &FootstepsPlanner::Support::elapsed_ratio,
|
|
47
|
+
&FootstepsPlanner::Support::elapsed_ratio)
|
|
50
48
|
.add_property("time_ratio", &FootstepsPlanner::Support::time_ratio, &FootstepsPlanner::Support::time_ratio)
|
|
51
49
|
.add_property("start", &FootstepsPlanner::Support::start, &FootstepsPlanner::Support::start)
|
|
52
50
|
.add_property("end", &FootstepsPlanner::Support::end, &FootstepsPlanner::Support::end)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
#include "expose-utils.hpp"
|
|
4
4
|
#include "module.h"
|
|
5
|
-
#include "registry.h"
|
|
5
|
+
#include "doxystub/registry.h"
|
|
6
6
|
#include "placo/model/robot_wrapper.h"
|
|
7
7
|
#include "placo/humanoid/humanoid_robot.h"
|
|
8
8
|
#include "placo/humanoid/humanoid_parameters.h"
|
|
@@ -18,10 +18,14 @@ 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
|
-
|
|
23
|
-
.add_property("
|
|
24
|
-
|
|
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)
|
|
25
29
|
.add_property("planned_timesteps", &HumanoidParameters::planned_timesteps, &HumanoidParameters::planned_timesteps)
|
|
26
30
|
.add_property("replan_timesteps", &HumanoidParameters::replan_timesteps, &HumanoidParameters::replan_timesteps)
|
|
27
31
|
.add_property("zmp_margin", &HumanoidParameters::zmp_margin, &HumanoidParameters::zmp_margin)
|
|
@@ -45,6 +49,8 @@ void exposeParameters()
|
|
|
45
49
|
.add_property("walk_max_dtheta", &HumanoidParameters::walk_max_dtheta, &HumanoidParameters::walk_max_dtheta)
|
|
46
50
|
.add_property("walk_dtheta_spacing", &HumanoidParameters::walk_dtheta_spacing,
|
|
47
51
|
&HumanoidParameters::walk_dtheta_spacing)
|
|
52
|
+
.add_property("op_space_polygon", &HumanoidParameters::op_space_polygon, &HumanoidParameters::op_space_polygon)
|
|
53
|
+
.add_property("dcm_offset_polygon", &HumanoidParameters::dcm_offset_polygon, &HumanoidParameters::dcm_offset_polygon)
|
|
48
54
|
.def("dt", &HumanoidParameters::dt)
|
|
49
55
|
.def("double_support_timesteps", &HumanoidParameters::double_support_timesteps)
|
|
50
56
|
.def("startend_double_support_timesteps", &HumanoidParameters::startend_double_support_timesteps)
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#include <Eigen/Dense>
|
|
4
4
|
#include <boost/python.hpp>
|
|
5
5
|
#include "module.h"
|
|
6
|
-
#include "registry.h"
|
|
6
|
+
#include "doxystub/registry.h"
|
|
7
7
|
#include "placo/tools/utils.h"
|
|
8
8
|
#include "placo/tools/cubic_spline.h"
|
|
9
9
|
#include "placo/tools/cubic_spline_3d.h"
|
|
@@ -89,12 +89,17 @@ void exposeTools()
|
|
|
89
89
|
class__<Segment>("Segment", init<Eigen::Vector2d, Eigen::Vector2d>())
|
|
90
90
|
.add_property("start", &Segment::start, &Segment::start)
|
|
91
91
|
.add_property("end", &Segment::end, &Segment::start)
|
|
92
|
-
.def(
|
|
93
|
-
|
|
94
|
-
.def(
|
|
95
|
-
|
|
92
|
+
.def(
|
|
93
|
+
"is_parallel", +[](Segment& s1, const Segment& s2) { return s1.is_parallel(s2); })
|
|
94
|
+
.def(
|
|
95
|
+
"is_point_aligned", +[](Segment& s, const Eigen::Vector2d& point) { return s.is_point_aligned(point); })
|
|
96
|
+
.def(
|
|
97
|
+
"is_collinear", +[](Segment& s1, const Segment& s2) { return s1.is_collinear(s2); })
|
|
98
|
+
.def(
|
|
99
|
+
"is_point_in_segment", +[](Segment& s, const Eigen::Vector2d& point) { return s.is_point_in_segment(point); })
|
|
96
100
|
.def("intersects", &Segment::intersects)
|
|
97
101
|
.def("line_pass_through", &Segment::line_pass_through)
|
|
102
|
+
.def("half_line_pass_through", &Segment::half_line_pass_through)
|
|
98
103
|
.def("lines_intersection", &Segment::lines_intersection);
|
|
99
104
|
|
|
100
105
|
#ifdef HAVE_RHOBAN_UTILS
|
|
@@ -103,6 +108,7 @@ void exposeTools()
|
|
|
103
108
|
// History collection
|
|
104
109
|
class__<HistoryCollection>("HistoryCollection")
|
|
105
110
|
.def("loadReplays", &HistoryCollection::loadReplays, loadReplays_overloads())
|
|
111
|
+
.def("exportToCSV", &HistoryCollection::exportToCSV)
|
|
106
112
|
.def("smallestTimestamp", &HistoryCollection::smallestTimestamp)
|
|
107
113
|
.def("biggestTimestamp", &HistoryCollection::biggestTimestamp)
|
|
108
114
|
.def("startNamedLog", &HistoryCollection::startNamedLog)
|
|
@@ -40,6 +40,15 @@ struct custom_vector_from_seq
|
|
|
40
40
|
}
|
|
41
41
|
};
|
|
42
42
|
|
|
43
|
+
template <typename T>
|
|
44
|
+
bool is_registered()
|
|
45
|
+
{
|
|
46
|
+
boost::python::type_info info = boost::python::type_id<T>();
|
|
47
|
+
const boost::python::converter::registration* reg = boost::python::converter::registry::query(info);
|
|
48
|
+
|
|
49
|
+
return reg == NULL || (*reg).m_to_python == NULL;
|
|
50
|
+
}
|
|
51
|
+
|
|
43
52
|
/**
|
|
44
53
|
* @brief Exposes a given type for std::vector
|
|
45
54
|
* @tparam T type
|
|
@@ -50,9 +59,12 @@ void exposeStdVector(const std::string& class_name)
|
|
|
50
59
|
{
|
|
51
60
|
typedef typename std::vector<T> vector_T;
|
|
52
61
|
|
|
53
|
-
|
|
62
|
+
if (!is_registered<T>())
|
|
63
|
+
{
|
|
64
|
+
class_<vector_T>(class_name.c_str()).def(vector_indexing_suite<vector_T>());
|
|
54
65
|
|
|
55
|
-
|
|
66
|
+
custom_vector_from_seq<T>();
|
|
67
|
+
}
|
|
56
68
|
}
|
|
57
69
|
|
|
58
70
|
template <typename K, typename V>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
#include "expose-utils.hpp"
|
|
4
4
|
#include "module.h"
|
|
5
|
-
#include "registry.h"
|
|
5
|
+
#include "doxystub/registry.h"
|
|
6
6
|
#include "placo/humanoid/walk_pattern_generator.h"
|
|
7
7
|
#include "placo/kinematics/kinematics_solver.h"
|
|
8
8
|
#include "placo/humanoid/footsteps_planner.h"
|
|
@@ -51,7 +51,9 @@ void exposeWalkPatternGenerator()
|
|
|
51
51
|
.def("get_support", &WalkPatternGenerator::Trajectory::get_support)
|
|
52
52
|
.def("get_next_support", &WalkPatternGenerator::Trajectory::get_next_support)
|
|
53
53
|
.def("get_prev_support", &WalkPatternGenerator::Trajectory::get_prev_support)
|
|
54
|
+
.def("get_part_t_end", &WalkPatternGenerator::Trajectory::get_part_t_end)
|
|
54
55
|
.def("get_part_t_start", &WalkPatternGenerator::Trajectory::get_part_t_start)
|
|
56
|
+
.def("get_part_end_dcm", &WalkPatternGenerator::Trajectory::get_part_end_dcm)
|
|
55
57
|
.def("apply_transform", &WalkPatternGenerator::Trajectory::apply_transform)
|
|
56
58
|
.def("print_parts_timings", &WalkPatternGenerator::Trajectory::print_parts_timings);
|
|
57
59
|
|
|
@@ -59,7 +61,9 @@ void exposeWalkPatternGenerator()
|
|
|
59
61
|
.def("plan", &WalkPatternGenerator::plan)
|
|
60
62
|
.def("replan", &WalkPatternGenerator::replan)
|
|
61
63
|
.def("can_replan_supports", &WalkPatternGenerator::can_replan_supports)
|
|
62
|
-
.def("replan_supports", &WalkPatternGenerator::replan_supports)
|
|
64
|
+
.def("replan_supports", &WalkPatternGenerator::replan_supports)
|
|
65
|
+
.def("update_supports", &WalkPatternGenerator::update_supports)
|
|
66
|
+
.def("get_optimal_zmp", &WalkPatternGenerator::get_optimal_zmp);
|
|
63
67
|
|
|
64
68
|
class__<SwingFoot>("SwingFoot", init<>())
|
|
65
69
|
.def("make_trajectory", &SwingFoot::make_trajectory)
|
|
@@ -136,7 +140,8 @@ void exposeWalkPatternGenerator()
|
|
|
136
140
|
.def("dzmp", &LIPM::Trajectory::dzmp)
|
|
137
141
|
.def("dcm", &LIPM::Trajectory::dcm);
|
|
138
142
|
|
|
139
|
-
class__<LIPM>("LIPM",
|
|
143
|
+
class__<LIPM>("LIPM",
|
|
144
|
+
init<problem::Problem&, double, int, double, Eigen::Vector2d, Eigen::Vector2d, Eigen::Vector2d>())
|
|
140
145
|
.def("compute_omega", &LIPM::compute_omega)
|
|
141
146
|
.def("get_trajectory", &LIPM::get_trajectory)
|
|
142
147
|
.def("pos", &LIPM::pos)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
export PYTHONPATH="."
|
|
4
|
+
export PATH=$(getconf PATH)
|
|
5
|
+
export PKG_CONFIG_PATH=$(getconf PKG_CONFIG_PATH)
|
|
6
|
+
export LD_LIBRARY_PATH=$(getconf LD_LIBRARY_PATH)
|
|
7
|
+
export PYTHONPATH=$(getconf PYTHONPATH)
|
|
8
|
+
export CMAKE_PREFIX_PATH=$(getconf CMAKE_PREFIX_PATH)
|
|
9
|
+
|
|
10
|
+
make
|
|
11
|
+
|
|
@@ -3,9 +3,8 @@ build-backend = "cmeel"
|
|
|
3
3
|
requires = [
|
|
4
4
|
"cmeel[build]",
|
|
5
5
|
"eiquadprog >= 1.2.6, < 2",
|
|
6
|
-
"pin[build] >=
|
|
7
|
-
"rhoban-cmeel-jsoncpp"
|
|
8
|
-
"cmeel-urdfdom[build]",
|
|
6
|
+
"pin[build] >= 3",
|
|
7
|
+
"rhoban-cmeel-jsoncpp"
|
|
9
8
|
]
|
|
10
9
|
|
|
11
10
|
[project]
|
|
@@ -13,17 +12,16 @@ authors = [{ email = "team@rhoban.com", name = "Rhoban team" }]
|
|
|
13
12
|
classifiers = []
|
|
14
13
|
dependencies = [
|
|
15
14
|
"eiquadprog >= 1.2.6, < 2",
|
|
16
|
-
"pin >=
|
|
15
|
+
"pin >= 3",
|
|
17
16
|
"rhoban-cmeel-jsoncpp",
|
|
18
17
|
"meshcat",
|
|
19
|
-
"numpy<2",
|
|
20
18
|
"ischedule"
|
|
21
19
|
]
|
|
22
20
|
description = "PlaCo: Rhoban Planning and Control"
|
|
23
21
|
license = "MIT"
|
|
24
22
|
name = "placo"
|
|
25
|
-
requires-python = ">= 3.
|
|
26
|
-
version = "0.
|
|
23
|
+
requires-python = ">= 3.9"
|
|
24
|
+
version = "0.7.0"
|
|
27
25
|
|
|
28
26
|
[project.urls]
|
|
29
27
|
changelog = "https://github.com/rhoban/placo/blob/main/CHANGELOG.md"
|
|
@@ -34,7 +32,7 @@ repository = "https://github.com/rhoban/placo.git"
|
|
|
34
32
|
profile = "black"
|
|
35
33
|
|
|
36
34
|
[tool.ruff]
|
|
37
|
-
target-version = "
|
|
35
|
+
target-version = "py39"
|
|
38
36
|
|
|
39
37
|
[tool.tomlsort]
|
|
40
38
|
all = true
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import meshcat
|
|
2
2
|
import pinocchio as pin
|
|
3
|
+
import pinocchio.visualize as pin_viz
|
|
3
4
|
import numpy as np
|
|
4
5
|
import meshcat.geometry as g
|
|
5
6
|
import meshcat.transformations as tf
|
|
@@ -26,7 +27,7 @@ def get_viewer() -> meshcat.Visualizer:
|
|
|
26
27
|
|
|
27
28
|
def robot_viz(
|
|
28
29
|
robot: placo.RobotWrapper, name: str = "robot"
|
|
29
|
-
) ->
|
|
30
|
+
) -> pin_viz.MeshcatVisualizer:
|
|
30
31
|
"""
|
|
31
32
|
Builds an instance of pinocchio MeshcatVisualizer, which allows to push the model to the meshcat
|
|
32
33
|
visualizer passed as parameter
|
|
@@ -38,7 +39,7 @@ def robot_viz(
|
|
|
38
39
|
global robot_names
|
|
39
40
|
|
|
40
41
|
robot_names[robot] = name
|
|
41
|
-
viz =
|
|
42
|
+
viz = pin_viz.MeshcatVisualizer(
|
|
42
43
|
robot.model, robot.collision_model, robot.visual_model
|
|
43
44
|
)
|
|
44
45
|
viz.initViewer(viewer=get_viewer())
|