placo 0.6.4__0-cp310-cp310-manylinux_2_35_x86_64.whl → 0.7.0__0-cp310-cp310-manylinux_2_35_x86_64.whl

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.

Binary file
@@ -1,3 +1,4 @@
1
+ # Doxygen stubs generation
1
2
  import numpy
2
3
  import typing
3
4
  AvoidSelfCollisionsDynamicsConstraint = typing.NewType("AvoidSelfCollisionsDynamicsConstraint", None)
@@ -90,16 +91,13 @@ WPGTrajectoryPart = typing.NewType("WPGTrajectoryPart", None)
90
91
  WalkPatternGenerator = typing.NewType("WalkPatternGenerator", None)
91
92
  WalkTasks = typing.NewType("WalkTasks", None)
92
93
  WheelTask = typing.NewType("WheelTask", None)
94
+ boost_type_index = typing.NewType("boost_type_index", None)
93
95
  map_indexing_suite_map_string_double_entry = typing.NewType("map_indexing_suite_map_string_double_entry", None)
94
96
  map_string_double = typing.NewType("map_string_double", None)
97
+ std_type_index = typing.NewType("std_type_index", None)
95
98
  vector_Collision = typing.NewType("vector_Collision", None)
96
99
  vector_Distance = typing.NewType("vector_Distance", None)
97
100
  vector_MatrixXd = typing.NewType("vector_MatrixXd", None)
98
- vector_Vector2d = typing.NewType("vector_Vector2d", None)
99
- vector_Vector3d = typing.NewType("vector_Vector3d", None)
100
- vector_double = typing.NewType("vector_double", None)
101
- vector_int = typing.NewType("vector_int", None)
102
- vector_string = typing.NewType("vector_string", None)
103
101
  class AvoidSelfCollisionsDynamicsConstraint:
104
102
  def __init__(
105
103
  arg1: object,
@@ -2534,7 +2532,7 @@ class ExternalWrenchContact:
2534
2532
  def __init__(
2535
2533
  self: ExternalWrenchContact,
2536
2534
  frame_index: any, # pinocchio::FrameIndex
2537
- reference: any, # pinocchio::ReferenceFrame
2535
+ reference: any = None, # pinocchio::ReferenceFrame (default: pinocchio::LOCAL_WORLD_ALIGNED)
2538
2536
 
2539
2537
  ) -> any:
2540
2538
  """see DynamicsSolver::add_external_wrench_contact"""
@@ -2635,19 +2633,11 @@ class Footstep:
2635
2633
  ) -> any:
2636
2634
  ...
2637
2635
 
2638
- dx: float # double
2639
-
2640
- dy: float # double
2641
-
2642
2636
  foot_length: float # double
2643
2637
 
2644
2638
  foot_width: float # double
2645
2639
 
2646
- def frame(
2647
- self: Footstep,
2648
-
2649
- ) -> numpy.ndarray:
2650
- ...
2640
+ frame: numpy.ndarray # Eigen::Affine3d
2651
2641
 
2652
2642
  def overlap(
2653
2643
  self: Footstep,
@@ -2665,8 +2655,6 @@ class Footstep:
2665
2655
  ) -> bool:
2666
2656
  ...
2667
2657
 
2668
- raw_frame: numpy.ndarray # Eigen::Affine3d
2669
-
2670
2658
  side: any # placo::humanoid::HumanoidRobot::Side
2671
2659
 
2672
2660
  def support_polygon(
@@ -3052,6 +3040,8 @@ class HumanoidParameters:
3052
3040
  ) -> None:
3053
3041
  ...
3054
3042
 
3043
+ dcm_offset_polygon: list[numpy.ndarray] # std::vector< Eigen::Vector2d >
3044
+
3055
3045
  def double_support_duration(
3056
3046
  self: HumanoidParameters,
3057
3047
 
@@ -3112,6 +3102,8 @@ class HumanoidParameters:
3112
3102
  """Checks if the walk resulting from those parameters will have double supports."""
3113
3103
  ...
3114
3104
 
3105
+ op_space_polygon: list[numpy.ndarray] # std::vector< Eigen::Vector2d >
3106
+
3115
3107
  planned_timesteps: int # int
3116
3108
  """Planning horizon for the CoM trajectory.
3117
3109
  """
@@ -4392,7 +4384,7 @@ class KinematicsSolver:
4392
4384
  def add_frame_task(
4393
4385
  self: KinematicsSolver,
4394
4386
  frame: str, # std::string
4395
- T_world_frame: numpy.ndarray, # Eigen::Affine3d
4387
+ T_world_frame: numpy.ndarray = None, # Eigen::Affine3d (default: Eigen::Affine3d::Identity())
4396
4388
 
4397
4389
  ) -> FrameTask:
4398
4390
  """Adds a frame task, this is equivalent to a position + orientation task, resulting in decoupled tasks for a given frame.
@@ -4798,8 +4790,8 @@ class LIPM:
4798
4790
  timesteps: int, # int
4799
4791
  t_start: float, # double
4800
4792
  initial_pos: numpy.ndarray, # Eigen::Vector2d
4801
- initial_vel: numpy.ndarray, # Eigen::Vector2d
4802
- initial_acc: numpy.ndarray, # Eigen::Vector2d
4793
+ initial_vel: numpy.ndarray = None, # Eigen::Vector2d (default: Eigen::Vector2d::Zero())
4794
+ initial_acc: numpy.ndarray = None, # Eigen::Vector2d (default: Eigen::Vector2d::Zero())
4803
4795
 
4804
4796
  ) -> any:
4805
4797
  ...
@@ -6569,6 +6561,19 @@ class Segment:
6569
6561
 
6570
6562
  end: numpy.ndarray # Eigen::Vector2d
6571
6563
 
6564
+ def half_line_pass_through(
6565
+ self: Segment,
6566
+ s: Segment, # placo::tools::Segment
6567
+
6568
+ ) -> bool:
6569
+ """Checks if the half-line starting from the start of this segment and going through its end pass through another segment.
6570
+
6571
+
6572
+ :param s: The other segment.
6573
+
6574
+ :return: True if the intersection is a point of the other segment."""
6575
+ ...
6576
+
6572
6577
  def intersects(
6573
6578
  self: Segment,
6574
6579
  s: Segment, # placo::tools::Segment
@@ -6751,6 +6756,13 @@ class Support:
6751
6756
  ) -> any:
6752
6757
  ...
6753
6758
 
6759
+ def apply_offset(
6760
+ self: Support,
6761
+ offset: numpy.ndarray, # Eigen::Vector2d
6762
+
6763
+ ) -> None:
6764
+ ...
6765
+
6754
6766
  elapsed_ratio: float # double
6755
6767
 
6756
6768
  end: bool # bool
@@ -6893,7 +6905,7 @@ class SwingFootCubic:
6893
6905
  start: numpy.ndarray, # Eigen::Vector3d
6894
6906
  target: numpy.ndarray, # Eigen::Vector3d
6895
6907
  elapsed_ratio: float = 0., # double
6896
- start_vel: numpy.ndarray, # Eigen::Vector3d
6908
+ start_vel: numpy.ndarray = None, # Eigen::Vector3d (default: Eigen::Vector3d::Zero())
6897
6909
 
6898
6910
  ) -> SwingFootCubicTrajectory:
6899
6911
  ...
@@ -7214,12 +7226,29 @@ class WPGTrajectory:
7214
7226
  ) -> numpy.ndarray:
7215
7227
  ...
7216
7228
 
7229
+ def get_part_end_dcm(
7230
+ self: WPGTrajectory,
7231
+ t: float, # double
7232
+ omega: float, # double
7233
+
7234
+ ) -> numpy.ndarray:
7235
+ """Returns the DCM at the end of the trajectory part corresponding to the given time."""
7236
+ ...
7237
+
7238
+ def get_part_t_end(
7239
+ self: WPGTrajectory,
7240
+ t: float, # double
7241
+
7242
+ ) -> float:
7243
+ """Returns the end time of the trajectory part corresponding to the given time."""
7244
+ ...
7245
+
7217
7246
  def get_part_t_start(
7218
7247
  self: WPGTrajectory,
7219
7248
  t: float, # double
7220
7249
 
7221
7250
  ) -> float:
7222
- """Returns the trajectory time start for the support corresponding to the given time."""
7251
+ """Returns the start time of the trajectory part corresponding to the given time."""
7223
7252
  ...
7224
7253
 
7225
7254
  def get_prev_support(
@@ -7332,6 +7361,26 @@ class WalkPatternGenerator:
7332
7361
  """Checks if a trajectory can be replanned for supports."""
7333
7362
  ...
7334
7363
 
7364
+ def get_optimal_zmp(
7365
+ self: WalkPatternGenerator,
7366
+ world_dcm_start: numpy.ndarray, # Eigen::Vector2d
7367
+ world_dcm_end: numpy.ndarray, # Eigen::Vector2d
7368
+ duration: float, # double
7369
+ support: Support, # placo::humanoid::FootstepsPlanner::Support
7370
+
7371
+ ) -> numpy.ndarray:
7372
+ """Computes the best ZMP in the support polygon to move de DCM from world_dcm_start to world_dcm_end in duration.
7373
+
7374
+
7375
+ :param world_dcm_start: The initial DCM position in world frame
7376
+
7377
+ :param world_dcm_end: The desired final DCM position in world frame
7378
+
7379
+ :param duration: The duration
7380
+
7381
+ :param support: The support"""
7382
+ ...
7383
+
7335
7384
  def plan(
7336
7385
  self: WalkPatternGenerator,
7337
7386
  supports: list[Support], # std::vector<placo::humanoid::FootstepsPlanner::Support>
@@ -7377,6 +7426,26 @@ class WalkPatternGenerator:
7377
7426
  """Replans the supports for a given trajectory given a footsteps planner."""
7378
7427
  ...
7379
7428
 
7429
+ def update_supports(
7430
+ self: WalkPatternGenerator,
7431
+ t: float, # double
7432
+ supports: list[Support], # std::vector<placo::humanoid::FootstepsPlanner::Support>
7433
+ world_measured_dcm: numpy.ndarray, # Eigen::Vector2d
7434
+ world_end_dcm: numpy.ndarray, # Eigen::Vector2d
7435
+
7436
+ ) -> list[Support]:
7437
+ """Updates the supports to ensure DCM viability by adjusting the duration and the target of the current swing trajectory.
7438
+
7439
+
7440
+ :param t: The current time
7441
+
7442
+ :param supports: The planned supports
7443
+
7444
+ :param world_measured_dcm: The measured DCM in world frame
7445
+
7446
+ :param world_end_dcm: The desired DCM at the end of the current support phase"""
7447
+ ...
7448
+
7380
7449
 
7381
7450
  class WalkTasks:
7382
7451
  def __init__(
@@ -7538,6 +7607,31 @@ class WheelTask:
7538
7607
  ...
7539
7608
 
7540
7609
 
7610
+ class boost_type_index:
7611
+ def __init__(
7612
+
7613
+ ) -> any:
7614
+ ...
7615
+
7616
+ def hash_code(
7617
+ self: boost_type_index,
7618
+
7619
+ ) -> int:
7620
+ ...
7621
+
7622
+ def name(
7623
+ self: boost_type_index,
7624
+
7625
+ ) -> str:
7626
+ ...
7627
+
7628
+ def pretty_name(
7629
+ self: boost_type_index,
7630
+
7631
+ ) -> str:
7632
+ ...
7633
+
7634
+
7541
7635
  def directions_2d(
7542
7636
  n: int, # int
7543
7637
 
@@ -7685,117 +7779,32 @@ def sharedMemory(
7685
7779
  ...
7686
7780
 
7687
7781
 
7688
- class vector_Collision:
7689
- def __init__(
7690
- arg1: object,
7691
-
7692
- ) -> None:
7693
- ...
7694
-
7695
- def append(
7696
- arg1: vector_Collision,
7697
- arg2: object,
7698
-
7699
- ) -> None:
7700
- ...
7701
-
7702
- def extend(
7703
- arg1: vector_Collision,
7704
- arg2: object,
7705
-
7706
- ) -> None:
7707
- ...
7708
-
7709
-
7710
- class vector_Distance:
7711
- def __init__(
7712
- arg1: object,
7713
-
7714
- ) -> None:
7715
- ...
7716
-
7717
- def append(
7718
- arg1: vector_Distance,
7719
- arg2: object,
7720
-
7721
- ) -> None:
7722
- ...
7723
-
7724
- def extend(
7725
- arg1: vector_Distance,
7726
- arg2: object,
7727
-
7728
- ) -> None:
7729
- ...
7730
-
7731
-
7732
- class vector_MatrixXd:
7782
+ class std_type_index:
7733
7783
  def __init__(
7734
- arg1: object,
7735
7784
 
7736
- ) -> None:
7737
- ...
7738
-
7739
- def append(
7740
- arg1: vector_MatrixXd,
7741
- arg2: object,
7742
-
7743
- ) -> None:
7744
- ...
7745
-
7746
- def extend(
7747
- arg1: vector_MatrixXd,
7748
- arg2: object,
7749
-
7750
- ) -> None:
7751
- ...
7752
-
7753
-
7754
- class vector_Vector2d:
7755
- def __init__(
7756
- arg1: object,
7757
-
7758
- ) -> None:
7759
- ...
7760
-
7761
- def append(
7762
- arg1: vector_Vector2d,
7763
- arg2: object,
7764
-
7765
- ) -> None:
7766
- ...
7767
-
7768
- def extend(
7769
- arg1: vector_Vector2d,
7770
- arg2: object,
7771
-
7772
- ) -> None:
7785
+ ) -> any:
7773
7786
  ...
7774
7787
 
7788
+ def hash_code(
7789
+ self: std_type_index,
7775
7790
 
7776
- class vector_Vector3d:
7777
- def __init__(
7778
- arg1: object,
7779
-
7780
- ) -> None:
7791
+ ) -> int:
7781
7792
  ...
7782
7793
 
7783
- def append(
7784
- arg1: vector_Vector3d,
7785
- arg2: object,
7794
+ def name(
7795
+ self: std_type_index,
7786
7796
 
7787
- ) -> None:
7797
+ ) -> str:
7788
7798
  ...
7789
7799
 
7790
- def extend(
7791
- arg1: vector_Vector3d,
7792
- arg2: object,
7800
+ def pretty_name(
7801
+ self: std_type_index,
7793
7802
 
7794
- ) -> None:
7803
+ ) -> str:
7795
7804
  ...
7796
7805
 
7797
7806
 
7798
- class vector_double:
7807
+ class vector_Collision:
7799
7808
  def __init__(
7800
7809
  arg1: object,
7801
7810
 
@@ -7803,21 +7812,21 @@ class vector_double:
7803
7812
  ...
7804
7813
 
7805
7814
  def append(
7806
- arg1: vector_double,
7815
+ arg1: vector_Collision,
7807
7816
  arg2: object,
7808
7817
 
7809
7818
  ) -> None:
7810
7819
  ...
7811
7820
 
7812
7821
  def extend(
7813
- arg1: vector_double,
7822
+ arg1: vector_Collision,
7814
7823
  arg2: object,
7815
7824
 
7816
7825
  ) -> None:
7817
7826
  ...
7818
7827
 
7819
7828
 
7820
- class vector_int:
7829
+ class vector_Distance:
7821
7830
  def __init__(
7822
7831
  arg1: object,
7823
7832
 
@@ -7825,21 +7834,21 @@ class vector_int:
7825
7834
  ...
7826
7835
 
7827
7836
  def append(
7828
- arg1: vector_int,
7837
+ arg1: vector_Distance,
7829
7838
  arg2: object,
7830
7839
 
7831
7840
  ) -> None:
7832
7841
  ...
7833
7842
 
7834
7843
  def extend(
7835
- arg1: vector_int,
7844
+ arg1: vector_Distance,
7836
7845
  arg2: object,
7837
7846
 
7838
7847
  ) -> None:
7839
7848
  ...
7840
7849
 
7841
7850
 
7842
- class vector_string:
7851
+ class vector_MatrixXd:
7843
7852
  def __init__(
7844
7853
  arg1: object,
7845
7854
 
@@ -7847,14 +7856,14 @@ class vector_string:
7847
7856
  ...
7848
7857
 
7849
7858
  def append(
7850
- arg1: vector_string,
7859
+ arg1: vector_MatrixXd,
7851
7860
  arg2: object,
7852
7861
 
7853
7862
  ) -> None:
7854
7863
  ...
7855
7864
 
7856
7865
  def extend(
7857
- arg1: vector_string,
7866
+ arg1: vector_MatrixXd,
7858
7867
  arg2: object,
7859
7868
 
7860
7869
  ) -> None:
@@ -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
- ) -> pin.visualize.MeshcatVisualizer:
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 = pin.visualize.MeshcatVisualizer(
42
+ viz = pin_viz.MeshcatVisualizer(
42
43
  robot.model, robot.collision_model, robot.visual_model
43
44
  )
44
45
  viz.initViewer(viewer=get_viewer())
@@ -0,0 +1,60 @@
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
+ License-File: LICENSE
8
+ Author-email: Rhoban team <team@rhoban.com>
9
+ Project-URL: Changelog, https://github.com/rhoban/placo/blob/main/CHANGELOG.md
10
+ Home-page: https://placo.readthedocs.io/en/latest/
11
+ Project-URL: Repository, https://github.com/rhoban/placo.git
12
+ Requires-Dist: cmeel
13
+ Requires-Dist: eiquadprog >= 1.2.6, < 2
14
+ Requires-Dist: pin >= 3
15
+ Requires-Dist: rhoban-cmeel-jsoncpp
16
+ Requires-Dist: meshcat
17
+ Requires-Dist: ischedule
18
+ Provides-Extra: build
19
+ Requires-Dist: pin[build] >= 3 ; extra == "build"
20
+ Description-Content-Type: text/markdown
21
+
22
+ <img width="400" src="https://placo.readthedocs.io/en/latest/_static/placo.png" />
23
+
24
+ ## Planning & Control
25
+
26
+ 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.
27
+
28
+ ### Task-Space Inverse Kinematics
29
+
30
+ [![Quadruoped demo](https://github.com/Rhoban/placo-examples/blob/master/kinematics/videos/quadruped_targets.gif?raw=true)](https://github.com/Rhoban/placo-examples/blob/master/kinematics/videos/quadruped_targets.mp4?raw=true)
31
+
32
+ High-level API to specify tasks for constrained inverse kinematics (IK).
33
+
34
+ - [See documentation](https://placo.readthedocs.io/en/latest/kinematics/getting_started.html)
35
+ - [Examples](https://placo.readthedocs.io/en/latest/kinematics/examples_gallery.html)
36
+
37
+ ### Task-Space Inverse Dynamics
38
+
39
+ [![Megabot demo](https://github.com/Rhoban/placo-examples/blob/master/dynamics/videos/megabot.gif?raw=true)](https://github.com/Rhoban/placo-examples/blob/master/dynamics/videos/megabot.mp4?raw=true)
40
+
41
+ High-level API to specify tasks for constrained inverse dynamics (ID).
42
+
43
+ - [See documentation](https://placo.readthedocs.io/en/latest/dynamics/getting_started.html)
44
+ - [Examples](https://placo.readthedocs.io/en/latest/dynamics/examples_gallery.html)
45
+
46
+
47
+ ## Installing
48
+
49
+ PlaCo can be installed from ``pip``
50
+
51
+ ```
52
+ pip install placo
53
+ ```
54
+
55
+ Or [built from sources](https://placo.readthedocs.io/en/latest/basics/installation_source.html)
56
+
57
+ ## Resources
58
+
59
+ * [Documentation](https://placo.readthedocs.io/en/latest/)
60
+ * [Examples](https://github.com/rhoban/placo-examples) repository
@@ -0,0 +1,12 @@
1
+ cmeel.prefix/lib/liblibplaco.so,sha256=Kss_9m8cwF-CMHjGAQ59M-yaND6P3rGL6Yazls7KpXk,2025088
2
+ cmeel.prefix/lib/python3.10/site-packages/placo.pyi,sha256=mnQkavsOZxq78ZBNN0f5our9wQ2OPefGq3hagObh_nI,165939
3
+ cmeel.prefix/lib/python3.10/site-packages/placo.so,sha256=DnhhsNkIQ5DO1zRV06V7kh2E3WjyWtMmBVYMLEdeSys,8266104
4
+ cmeel.prefix/lib/python3.10/site-packages/placo_utils/__init__.py,sha256=UN-fc5KfBWQ-_qkm0Ajouh-T9tBGm5aUtuzBiH1tRtk,80
5
+ cmeel.prefix/lib/python3.10/site-packages/placo_utils/tf.py,sha256=fFRXNbeLlXzn5VOqYl7hcSuvOOtTDTiLi_Lpd9_l6wA,36
6
+ cmeel.prefix/lib/python3.10/site-packages/placo_utils/view.py,sha256=7KiLYGpTKaPJtFHZ6kjERdOzJiPSDUtkIKHbziHpkYk,928
7
+ cmeel.prefix/lib/python3.10/site-packages/placo_utils/visualization.py,sha256=8exPggKw-njoJ9YDKgxFdpYoqiscNqnfvdsAC30iJCk,8227
8
+ placo-0.7.0.dist-info/licenses/LICENSE,sha256=q2bBXvk4Eh7TmP11LoIOIGSUuJbR30JBI6ZZ37g52T4,1061
9
+ placo-0.7.0.dist-info/METADATA,sha256=ubfE-qcTspVcod08RxCqL1R_Qyd3AtCKI40yVd0jQRg,2525
10
+ placo-0.7.0.dist-info/WHEEL,sha256=CGpSWoBURgVtaMPvLWXBsECBIFvGPsCx-wd2AU5rQ8c,115
11
+ placo-0.7.0.dist-info/top_level.txt,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ placo-0.7.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: cmeel 0.57.1
2
+ Generator: cmeel 0.57.3
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp310-cp310-manylinux_2_35_x86_64
5
5
  Build: 0
@@ -1,57 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: placo
3
- Version: 0.6.4
4
- Summary: PlaCo: Rhoban Planning and Control
5
- Requires-Python: >= 3.8
6
- License-Expression: MIT
7
- License-File: LICENSE
8
- Author-email: Rhoban team <team@rhoban.com>
9
- Project-URL: Changelog, https://github.com/rhoban/placo/blob/main/CHANGELOG.md
10
- Home-page: https://placo.readthedocs.io/en/latest/
11
- Project-URL: Repository, https://github.com/rhoban/placo.git
12
- Requires-Dist: cmeel
13
- Requires-Dist: eiquadprog >= 1.2.6, < 2
14
- Requires-Dist: pin >= 2.6.18, < 3
15
- Requires-Dist: rhoban-cmeel-jsoncpp
16
- Requires-Dist: meshcat
17
- Requires-Dist: numpy<2
18
- Requires-Dist: ischedule
19
- Provides-Extra: build
20
- Requires-Dist: pin[build] >= 2.6.18, < 3 ; extra == "build"
21
- Requires-Dist: cmeel-urdfdom[build] ; extra == "build"
22
- Description-Content-Type: text/markdown
23
-
24
- # PlaCo
25
-
26
- PlaCo is Rhoban's planning and control library.
27
- Its main features are:
28
-
29
- * Task-space Inverse Kinematics with constraints,
30
- * Task-space Inverse Dynamics with constraints,
31
- * QP problem formulation,
32
- * Built on the top of [pinocchio](https://github.com/stack-of-tasks/pinocchio)
33
- * Written in C++ with Python bindings
34
-
35
- [![Megabot demo](https://github.com/Rhoban/placo-examples/blob/master/kinematics/videos/quadruped_targets.gif?raw=true)](https://github.com/Rhoban/placo-examples/blob/master/kinematics/videos/quadruped_targets.mp4?raw=true)
36
-
37
- *Inverse Kinematics Example: a quadruped robot hitting targets with a leg while keeping its three legs on the ground*
38
-
39
- [source code (quadruped_targets.py)](https://github.com/Rhoban/placo-examples/blob/master/kinematics/quadruped_targets.py) / [more kinematics examples](https://placo.readthedocs.io/en/latest/kinematics/examples_gallery.html)
40
-
41
- [![Megabot demo](https://github.com/Rhoban/placo-examples/blob/master/dynamics/videos/megabot.gif?raw=true)](https://github.com/Rhoban/placo-examples/blob/master/dynamics/videos/megabot.mp4?raw=true)
42
-
43
- *Inverse Dynamics Example: a quadruped with many loop closure joints*
44
-
45
- [source code (megabot.py)](https://github.com/Rhoban/placo-examples/blob/master/dynamics/megabot.py) / [more dynamics examples](https://placo.readthedocs.io/en/latest/dynamics/examples_gallery.html)
46
-
47
- ## Installing
48
-
49
- PlaCo is available from [pip](https://placo.readthedocs.io/en/latest/basics/installation_pip.html),
50
- or can be [built from sources](https://placo.readthedocs.io/en/latest/basics/installation_source.html).
51
-
52
- ## Documentation
53
-
54
- Here is the [official documentation](https://placo.readthedocs.io/en/latest/)
55
-
56
- You can also find many examples in the [placo-examples](https://github.com/rhoban/placo-examples)
57
- repository.
@@ -1,15 +0,0 @@
1
- cmeel.prefix/lib/liblibplaco.so,sha256=ExDBSBAkcmvcamAK9RhVt0_h9RFfX8PC65hr8rDh_aU,2619744
2
- cmeel.prefix/lib/python3.10/site-packages/placo.pyi,sha256=Re4nQC6mrMjDOgdVzIpy3JZF-UdVRRkHGPM9pcEyo24,164323
3
- cmeel.prefix/lib/python3.10/site-packages/placo.so,sha256=NdgBCpd2AWzqMmP1qSPwpjRCE6gcKr69DjJJTeWLre8,8192072
4
- cmeel.prefix/lib/python3.10/site-packages/placo_utils/__init__.py,sha256=UN-fc5KfBWQ-_qkm0Ajouh-T9tBGm5aUtuzBiH1tRtk,80
5
- cmeel.prefix/lib/python3.10/site-packages/placo_utils/tf.py,sha256=fFRXNbeLlXzn5VOqYl7hcSuvOOtTDTiLi_Lpd9_l6wA,36
6
- cmeel.prefix/lib/python3.10/site-packages/placo_utils/view.py,sha256=7KiLYGpTKaPJtFHZ6kjERdOzJiPSDUtkIKHbziHpkYk,928
7
- cmeel.prefix/lib/python3.10/site-packages/placo_utils/visualization.py,sha256=6ET7YkZBuIWoJg2qVO-rPt3Nj4ZnezyvGAe458G4VGo,8201
8
- cmeel.prefix/lib/python3.10/site-packages/placo_utils/__pycache__/__init__.cpython-310.pyc,sha256=tJrTajdA7hNO9tZkE1oN49rU-61lCNUED-mQXdAvzAs,261
9
- cmeel.prefix/lib/python3.10/site-packages/placo_utils/__pycache__/tf.cpython-310.pyc,sha256=APWQ5-zKgbEcMnkv6Hxgj_Q46jpnuOyL9YbSrj6Z5Vw,204
10
- cmeel.prefix/lib/python3.10/site-packages/placo_utils/__pycache__/visualization.cpython-310.pyc,sha256=kMdmKY2LZKM4rkKm4j0y-TOMBQ3PeVIpbfB_YJxNz5c,6781
11
- placo-0.6.4.dist-info/licenses/LICENSE,sha256=q2bBXvk4Eh7TmP11LoIOIGSUuJbR30JBI6ZZ37g52T4,1061
12
- placo-0.6.4.dist-info/METADATA,sha256=cPKmAjHW_OMFoFUT2xpaGIP-CLPOx7eA9na4JNTMkFw,2569
13
- placo-0.6.4.dist-info/WHEEL,sha256=lhhHTnYbOJzqsg4pPctu5MqgY8RxNHlH5gszBU8FPYs,115
14
- placo-0.6.4.dist-info/top_level.txt,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- placo-0.6.4.dist-info/RECORD,,