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.
- {placo-0.6.3 → placo-0.6.5}/CMakeLists.txt +4 -0
- placo-0.6.5/PKG-INFO +61 -0
- placo-0.6.5/README.md +39 -0
- {placo-0.6.3 → placo-0.6.5}/bindings/expose-footsteps.cpp +9 -8
- {placo-0.6.3 → placo-0.6.5}/bindings/expose-kinematics.cpp +9 -0
- {placo-0.6.3 → placo-0.6.5}/bindings/expose-parameters.cpp +6 -14
- {placo-0.6.3 → placo-0.6.5}/bindings/expose-problem.cpp +8 -1
- {placo-0.6.3 → placo-0.6.5}/bindings/expose-tools.cpp +21 -0
- {placo-0.6.3 → placo-0.6.5}/bindings/expose-walk-pattern-generator.cpp +30 -10
- {placo-0.6.3 → placo-0.6.5}/placo.pyi +553 -226
- {placo-0.6.3 → placo-0.6.5}/pyproject.toml +1 -1
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/footsteps_planner.cpp +51 -54
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/footsteps_planner.h +21 -10
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/footsteps_planner_naive.cpp +0 -90
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/humanoid_parameters.cpp +7 -52
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/humanoid_parameters.h +16 -50
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/humanoid_robot.cpp +2 -2
- placo-0.6.5/src/placo/humanoid/kick.cpp +44 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/lipm.cpp +36 -8
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/lipm.h +27 -12
- placo-0.6.5/src/placo/humanoid/swing_foot_cubic.cpp +56 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/swing_foot_cubic.h +4 -3
- placo-0.6.5/src/placo/humanoid/walk_pattern_generator.cpp +642 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/walk_pattern_generator.h +62 -46
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/walk_tasks.cpp +14 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/walk_tasks.h +11 -0
- placo-0.6.5/src/placo/kinematics/joint_space_half_spaces_constraint.cpp +43 -0
- placo-0.6.5/src/placo/kinematics/joint_space_half_spaces_constraint.h +32 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/kinematics_solver.cpp +6 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/kinematics_solver.h +9 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/problem/integrator.cpp +5 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/problem/integrator.h +1 -1
- {placo-0.6.3 → placo-0.6.5}/src/placo/problem/polygon_constraint.cpp +1 -1
- {placo-0.6.3 → placo-0.6.5}/src/placo/problem/problem.cpp +0 -1
- placo-0.6.5/src/placo/problem/problem_polynom.cpp +30 -0
- placo-0.6.5/src/placo/problem/problem_polynom.h +37 -0
- placo-0.6.5/src/placo/tools/polynom.cpp +41 -0
- placo-0.6.5/src/placo/tools/polynom.h +27 -0
- placo-0.6.5/src/placo/tools/segment.cpp +103 -0
- placo-0.6.5/src/placo/tools/segment.h +80 -0
- {placo-0.6.3 → placo-0.6.5}/stubs.py +12 -7
- placo-0.6.3/PKG-INFO +0 -56
- placo-0.6.3/README.md +0 -34
- placo-0.6.3/src/placo/humanoid/kick.cpp +0 -44
- placo-0.6.3/src/placo/humanoid/swing_foot_cubic.cpp +0 -45
- placo-0.6.3/src/placo/humanoid/walk_pattern_generator.cpp +0 -694
- {placo-0.6.3 → placo-0.6.5}/.clang-format +0 -0
- {placo-0.6.3 → placo-0.6.5}/.gitattributes +0 -0
- {placo-0.6.3 → placo-0.6.5}/.gitignore +0 -0
- {placo-0.6.3 → placo-0.6.5}/.readthedocs.yaml +0 -0
- {placo-0.6.3 → placo-0.6.5}/Doxyfile +0 -0
- {placo-0.6.3 → placo-0.6.5}/LICENSE +0 -0
- {placo-0.6.3 → placo-0.6.5}/Makefile +0 -0
- {placo-0.6.3 → placo-0.6.5}/bindings/expose-dynamics.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/bindings/expose-eigen.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/bindings/expose-robot-wrapper.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/bindings/expose-utils.hpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/bindings/module.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/bindings/module.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/bindings/registry.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/bindings/registry.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/doxygen_parse.py +0 -0
- {placo-0.6.3 → placo-0.6.5}/python/.vscode/settings.json +0 -0
- {placo-0.6.3 → placo-0.6.5}/python/Makefile +0 -0
- {placo-0.6.3 → placo-0.6.5}/python/placo_utils/__init__.py +0 -0
- {placo-0.6.3 → placo-0.6.5}/python/placo_utils/tf.py +0 -0
- {placo-0.6.3 → placo-0.6.5}/python/placo_utils/view.py +0 -0
- {placo-0.6.3 → placo-0.6.5}/python/placo_utils/visualization.py +0 -0
- {placo-0.6.3 → placo-0.6.5}/python/run_tests.sh +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/avoid_self_collisions_constraint.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/avoid_self_collisions_constraint.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/com_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/com_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/constraint.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/constraint.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/contacts.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/contacts.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/dynamics_solver.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/dynamics_solver.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/frame_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/frame_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/gear_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/gear_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/joints_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/joints_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/orientation_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/orientation_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/position_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/position_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/relative_frame_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/relative_frame_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/relative_orientation_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/relative_orientation_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/relative_position_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/relative_position_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/torque_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/dynamics/torque_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/foot_trajectory.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/foot_trajectory.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/footsteps_planner_naive.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/footsteps_planner_repetitive.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/footsteps_planner_repetitive.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/humanoid_robot.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/kick.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/swing_foot.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/swing_foot.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/swing_foot_quintic.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/humanoid/swing_foot_quintic.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/avoid_self_collisions_constraint.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/avoid_self_collisions_constraint.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/axis_align_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/axis_align_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/centroidal_momentum_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/centroidal_momentum_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/com_polygon_constraint.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/com_polygon_constraint.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/com_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/com_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/cone_constraint.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/cone_constraint.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/constraint.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/constraint.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/distance_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/distance_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/frame_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/frame_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/gear_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/gear_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/joints_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/joints_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/kinetic_energy_regularization_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/kinetic_energy_regularization_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/manipulability_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/manipulability_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/orientation_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/orientation_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/position_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/position_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/regularization_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/regularization_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/relative_frame_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/relative_frame_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/relative_orientation_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/relative_orientation_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/relative_position_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/relative_position_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/wheel_task.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/kinematics/wheel_task.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/model/robot_wrapper.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/model/robot_wrapper.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/problem/constraint.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/problem/constraint.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/problem/expression.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/problem/expression.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/problem/polygon_constraint.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/problem/problem.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/problem/qp_error.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/problem/qp_error.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/problem/sparsity.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/problem/sparsity.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/problem/variable.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/problem/variable.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/tools/axises_mask.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/tools/axises_mask.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/tools/cubic_spline.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/tools/cubic_spline.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/tools/cubic_spline_3d.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/tools/cubic_spline_3d.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/tools/directions.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/tools/directions.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/tools/prioritized.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/tools/prioritized.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/tools/utils.cpp +0 -0
- {placo-0.6.3 → placo-0.6.5}/src/placo/tools/utils.h +0 -0
- {placo-0.6.3 → placo-0.6.5}/tweak_sdist.sh +0 -0
- {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
|
+
[](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
|
+
[](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
|
+
[](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
|
|
@@ -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
|
-
|
|
23
|
-
.add_property("
|
|
24
|
-
|
|
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("
|
|
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::
|
|
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("
|
|
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("
|
|
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("
|
|
139
|
-
.add_property("
|
|
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
|
}
|