placo 0.6.3__0-cp310-cp310-manylinux_2_35_x86_64.whl → 0.6.5__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
@@ -45,6 +45,7 @@ HumanoidRobot = typing.NewType("HumanoidRobot", None)
45
45
  HumanoidRobot_Side = typing.NewType("HumanoidRobot_Side", None)
46
46
  Integrator = typing.NewType("Integrator", None)
47
47
  IntegratorTrajectory = typing.NewType("IntegratorTrajectory", None)
48
+ JointSpaceHalfSpacesConstraint = typing.NewType("JointSpaceHalfSpacesConstraint", None)
48
49
  JointsTask = typing.NewType("JointsTask", None)
49
50
  KinematicsConstraint = typing.NewType("KinematicsConstraint", None)
50
51
  KinematicsSolver = typing.NewType("KinematicsSolver", None)
@@ -56,10 +57,12 @@ ManipulabilityTask = typing.NewType("ManipulabilityTask", None)
56
57
  OrientationTask = typing.NewType("OrientationTask", None)
57
58
  PointContact = typing.NewType("PointContact", None)
58
59
  PolygonConstraint = typing.NewType("PolygonConstraint", None)
60
+ Polynom = typing.NewType("Polynom", None)
59
61
  PositionTask = typing.NewType("PositionTask", None)
60
62
  Prioritized = typing.NewType("Prioritized", None)
61
63
  Problem = typing.NewType("Problem", None)
62
64
  ProblemConstraint = typing.NewType("ProblemConstraint", None)
65
+ ProblemPolynom = typing.NewType("ProblemPolynom", None)
63
66
  PuppetContact = typing.NewType("PuppetContact", None)
64
67
  QPError = typing.NewType("QPError", None)
65
68
  RegularizationTask = typing.NewType("RegularizationTask", None)
@@ -68,6 +71,7 @@ RelativeOrientationTask = typing.NewType("RelativeOrientationTask", None)
68
71
  RelativePositionTask = typing.NewType("RelativePositionTask", None)
69
72
  RobotWrapper = typing.NewType("RobotWrapper", None)
70
73
  RobotWrapper_State = typing.NewType("RobotWrapper_State", None)
74
+ Segment = typing.NewType("Segment", None)
71
75
  Sparsity = typing.NewType("Sparsity", None)
72
76
  SparsityInterval = typing.NewType("SparsityInterval", None)
73
77
  Support = typing.NewType("Support", None)
@@ -81,9 +85,10 @@ SwingFootTrajectory = typing.NewType("SwingFootTrajectory", None)
81
85
  Task = typing.NewType("Task", None)
82
86
  TaskContact = typing.NewType("TaskContact", None)
83
87
  Variable = typing.NewType("Variable", None)
88
+ WPGTrajectory = typing.NewType("WPGTrajectory", None)
89
+ WPGTrajectoryPart = typing.NewType("WPGTrajectoryPart", None)
84
90
  WalkPatternGenerator = typing.NewType("WalkPatternGenerator", None)
85
91
  WalkTasks = typing.NewType("WalkTasks", None)
86
- WalkTrajectory = typing.NewType("WalkTrajectory", None)
87
92
  WheelTask = typing.NewType("WheelTask", None)
88
93
  map_indexing_suite_map_string_double_entry = typing.NewType("map_indexing_suite_map_string_double_entry", None)
89
94
  map_string_double = typing.NewType("map_string_double", None)
@@ -2529,7 +2534,7 @@ class ExternalWrenchContact:
2529
2534
  def __init__(
2530
2535
  self: ExternalWrenchContact,
2531
2536
  frame_index: any, # pinocchio::FrameIndex
2532
- reference: any, # pinocchio::ReferenceFrame
2537
+ reference: any = None, # pinocchio::ReferenceFrame (default: pinocchio::LOCAL_WORLD_ALIGNED)
2533
2538
 
2534
2539
  ) -> any:
2535
2540
  """see DynamicsSolver::add_external_wrench_contact"""
@@ -2636,8 +2641,6 @@ class Footstep:
2636
2641
 
2637
2642
  frame: numpy.ndarray # Eigen::Affine3d
2638
2643
 
2639
- kick: bool # bool
2640
-
2641
2644
  def overlap(
2642
2645
  self: Footstep,
2643
2646
  other: Footstep, # placo::humanoid::FootstepsPlanner::Footstep
@@ -2697,17 +2700,10 @@ class FootstepsPlanner:
2697
2700
  :param parameters: Parameters of the walk"""
2698
2701
  ...
2699
2702
 
2700
- @staticmethod
2701
- def add_first_support(
2702
- supports: list[Support], # std::vector<placo::humanoid::FootstepsPlanner::Support>
2703
- support: Support, # placo::humanoid::FootstepsPlanner::Support
2704
-
2705
- ) -> None:
2706
- ...
2707
-
2708
2703
  @staticmethod
2709
2704
  def make_supports(
2710
2705
  footsteps: list[Footstep], # std::vector<placo::humanoid::FootstepsPlanner::Footstep>
2706
+ t_start: float, # double
2711
2707
  start: bool = True, # bool
2712
2708
  middle: bool = False, # bool
2713
2709
  end: bool = True, # bool
@@ -2745,14 +2741,6 @@ class FootstepsPlannerNaive:
2745
2741
  ) -> any:
2746
2742
  ...
2747
2743
 
2748
- @staticmethod
2749
- def add_first_support(
2750
- supports: list[Support], # std::vector<placo::humanoid::FootstepsPlanner::Support>
2751
- support: Support, # placo::humanoid::FootstepsPlanner::Support
2752
-
2753
- ) -> None:
2754
- ...
2755
-
2756
2744
  def configure(
2757
2745
  self: FootstepsPlannerNaive,
2758
2746
  T_world_left_target: numpy.ndarray, # Eigen::Affine3d
@@ -2770,6 +2758,7 @@ class FootstepsPlannerNaive:
2770
2758
  @staticmethod
2771
2759
  def make_supports(
2772
2760
  footsteps: list[Footstep], # std::vector<placo::humanoid::FootstepsPlanner::Footstep>
2761
+ t_start: float, # double
2773
2762
  start: bool = True, # bool
2774
2763
  middle: bool = False, # bool
2775
2764
  end: bool = True, # bool
@@ -2824,14 +2813,6 @@ class FootstepsPlannerRepetitive:
2824
2813
  ) -> any:
2825
2814
  ...
2826
2815
 
2827
- @staticmethod
2828
- def add_first_support(
2829
- supports: list[Support], # std::vector<placo::humanoid::FootstepsPlanner::Support>
2830
- support: Support, # placo::humanoid::FootstepsPlanner::Support
2831
-
2832
- ) -> None:
2833
- ...
2834
-
2835
2816
  def configure(
2836
2817
  self: FootstepsPlannerRepetitive,
2837
2818
  x: float, # double
@@ -2855,6 +2836,7 @@ class FootstepsPlannerRepetitive:
2855
2836
  @staticmethod
2856
2837
  def make_supports(
2857
2838
  footsteps: list[Footstep], # std::vector<placo::humanoid::FootstepsPlanner::Footstep>
2839
+ t_start: float, # double
2858
2840
  start: bool = True, # bool
2859
2841
  middle: bool = False, # bool
2860
2842
  end: bool = True, # bool
@@ -3064,7 +3046,7 @@ class HumanoidParameters:
3064
3046
  self: HumanoidParameters,
3065
3047
 
3066
3048
  ) -> float:
3067
- """Duratuon [s]of a double support."""
3049
+ """Default duration [s]of a double support."""
3068
3050
  ...
3069
3051
 
3070
3052
  double_support_ratio: float # double
@@ -3075,14 +3057,14 @@ class HumanoidParameters:
3075
3057
  self: HumanoidParameters,
3076
3058
 
3077
3059
  ) -> int:
3078
- """Duration [timesteps] of a double support."""
3060
+ """Default number of timesteps for one double support."""
3079
3061
  ...
3080
3062
 
3081
3063
  def dt(
3082
3064
  self: HumanoidParameters,
3083
3065
 
3084
3066
  ) -> float:
3085
- """dt for planning [s]"""
3067
+ """Timestep duration for planning [s]."""
3086
3068
  ...
3087
3069
 
3088
3070
  def ellipsoid_clip(
@@ -3120,34 +3102,16 @@ class HumanoidParameters:
3120
3102
  """Checks if the walk resulting from those parameters will have double supports."""
3121
3103
  ...
3122
3104
 
3123
- def kick_support_duration(
3124
- self: HumanoidParameters,
3125
-
3126
- ) -> float:
3127
- """Duration [s] of a kick support."""
3128
- ...
3129
-
3130
- kick_support_ratio: float # double
3131
- """Duration ratio between single support and kick support.
3132
- """
3133
-
3134
- def kick_support_timesteps(
3135
- self: HumanoidParameters,
3136
-
3137
- ) -> int:
3138
- """Duration [timesteps]of a kick support."""
3139
- ...
3140
-
3141
3105
  planned_timesteps: int # int
3142
3106
  """Planning horizon for the CoM trajectory.
3143
3107
  """
3144
3108
 
3145
3109
  replan_timesteps: int # int
3146
- """Number of timesteps between each replan. Support phases have to last longer than [replan_frequency * dt] or their duration has to be equal to 0.
3110
+ """Number of timesteps between each replan for the CoM trajectory.
3147
3111
  """
3148
3112
 
3149
3113
  single_support_duration: float # double
3150
- """SSP duration [s].
3114
+ """Single support duration [s].
3151
3115
  """
3152
3116
 
3153
3117
  single_support_timesteps: int # int
@@ -3158,18 +3122,18 @@ class HumanoidParameters:
3158
3122
  self: HumanoidParameters,
3159
3123
 
3160
3124
  ) -> float:
3161
- """Duration [s] of a start/end double support."""
3125
+ """Default duration [s] of a start/end double support."""
3162
3126
  ...
3163
3127
 
3164
3128
  startend_double_support_ratio: float # double
3165
- """Duration ratio between single support and double support.
3129
+ """Duration ratio between single support and start/end double support.
3166
3130
  """
3167
3131
 
3168
3132
  def startend_double_support_timesteps(
3169
3133
  self: HumanoidParameters,
3170
3134
 
3171
3135
  ) -> int:
3172
- """Duration [timesteps]of a start/end double support."""
3136
+ """Default number of timesteps for one start/end double support."""
3173
3137
  ...
3174
3138
 
3175
3139
  walk_com_height: float # double
@@ -4001,7 +3965,7 @@ class Integrator:
4001
3965
  """Builds an expression for the given step and differentiation.
4002
3966
 
4003
3967
 
4004
- :param step: the step
3968
+ :param step: the step, (if -1 the last step will be used)
4005
3969
 
4006
3970
  :param diff: differentiation (if -1, the expression will be a vector of size order with all orders)
4007
3971
 
@@ -4106,6 +4070,50 @@ class IntegratorTrajectory:
4106
4070
  ...
4107
4071
 
4108
4072
 
4073
+ class JointSpaceHalfSpacesConstraint:
4074
+ A: numpy.ndarray # Eigen::MatrixXd
4075
+ """Matrix A in Aq <= b.
4076
+ """
4077
+
4078
+ def __init__(
4079
+ self: JointSpaceHalfSpacesConstraint,
4080
+ A: numpy.ndarray, # const Eigen::MatrixXd
4081
+ b: numpy.ndarray, # Eigen::VectorXd
4082
+
4083
+ ) -> any:
4084
+ """Ensures that, in joint-space we have Aq <= b Note that the floating base terms will be ignored in A. However, A should still be of dimension n_constraints x n_q."""
4085
+ ...
4086
+
4087
+ b: numpy.ndarray # Eigen::VectorXd
4088
+ """Vector b in Aq <= b.
4089
+ """
4090
+
4091
+ def configure(
4092
+ self: JointSpaceHalfSpacesConstraint,
4093
+ name: str, # std::string
4094
+ priority: any, # placo::kinematics::ConeConstraint::Priority
4095
+ weight: float = 1.0, # double
4096
+
4097
+ ) -> None:
4098
+ """Configures the object.
4099
+
4100
+
4101
+ :param name: task name
4102
+
4103
+ :param priority: task priority (hard, soft or scaled)
4104
+
4105
+ :param weight: task weight"""
4106
+ ...
4107
+
4108
+ name: str # std::string
4109
+ """Object name.
4110
+ """
4111
+
4112
+ priority: any # placo::kinematics::ConeConstraint::Priority
4113
+ """Object priority.
4114
+ """
4115
+
4116
+
4109
4117
  class JointsTask:
4110
4118
  A: numpy.ndarray # Eigen::MatrixXd
4111
4119
  """Matrix A in the task Ax = b, where x are the joint delta positions.
@@ -4374,7 +4382,7 @@ class KinematicsSolver:
4374
4382
  def add_frame_task(
4375
4383
  self: KinematicsSolver,
4376
4384
  frame: str, # std::string
4377
- T_world_frame: numpy.ndarray, # Eigen::Affine3d
4385
+ T_world_frame: numpy.ndarray = None, # Eigen::Affine3d (default: Eigen::Affine3d::Identity())
4378
4386
 
4379
4387
  ) -> FrameTask:
4380
4388
  """Adds a frame task, this is equivalent to a position + orientation task, resulting in decoupled tasks for a given frame.
@@ -4399,6 +4407,22 @@ class KinematicsSolver:
4399
4407
  :return: gear task"""
4400
4408
  ...
4401
4409
 
4410
+ def add_joint_space_half_spaces_constraint(
4411
+ self: KinematicsSolver,
4412
+ A: numpy.ndarray, # Eigen::MatrixXd
4413
+ b: numpy.ndarray, # Eigen::VectorXd
4414
+
4415
+ ) -> JointSpaceHalfSpacesConstraint:
4416
+ """Adds a joint-space half-spaces constraint, such that Aq <= b.
4417
+
4418
+
4419
+ :param A: matrix A in Aq <= b
4420
+
4421
+ :param b: vector b in Aq <= b
4422
+
4423
+ :return: the constraint"""
4424
+ ...
4425
+
4402
4426
  def add_joints_task(
4403
4427
  self: KinematicsSolver,
4404
4428
 
@@ -4760,11 +4784,12 @@ class LIPM:
4760
4784
  def __init__(
4761
4785
  self: LIPM,
4762
4786
  problem: Problem, # placo::problem::Problem
4763
- timesteps: int, # int
4764
4787
  dt: float, # double
4788
+ timesteps: int, # int
4789
+ t_start: float, # double
4765
4790
  initial_pos: numpy.ndarray, # Eigen::Vector2d
4766
- initial_vel: numpy.ndarray, # Eigen::Vector2d
4767
- initial_acc: numpy.ndarray, # Eigen::Vector2d
4791
+ initial_vel: numpy.ndarray = None, # Eigen::Vector2d (default: Eigen::Vector2d::Zero())
4792
+ initial_acc: numpy.ndarray = None, # Eigen::Vector2d (default: Eigen::Vector2d::Zero())
4768
4793
 
4769
4794
  ) -> any:
4770
4795
  ...
@@ -4776,6 +4801,17 @@ class LIPM:
4776
4801
  ) -> Expression:
4777
4802
  ...
4778
4803
 
4804
+ @staticmethod
4805
+ def build_LIPM_from_previous(
4806
+ problem: Problem, # placo::problem::Problem
4807
+ dt: float, # double
4808
+ timesteps: int, # int
4809
+ t_start: float, # double
4810
+ previous: LIPM, # placo::humanoid::LIPM
4811
+
4812
+ ) -> LIPM:
4813
+ ...
4814
+
4779
4815
  @staticmethod
4780
4816
  def compute_omega(
4781
4817
  com_height: float, # double
@@ -4792,6 +4828,8 @@ class LIPM:
4792
4828
  ) -> Expression:
4793
4829
  ...
4794
4830
 
4831
+ dt: float # double
4832
+
4795
4833
  def dzmp(
4796
4834
  self: LIPM,
4797
4835
  timestep: int, # int
@@ -4804,6 +4842,7 @@ class LIPM:
4804
4842
  self: LIPM,
4805
4843
 
4806
4844
  ) -> LIPMTrajectory:
4845
+ """Get the LIPM trajectory. Should be used after solving the problem."""
4807
4846
  ...
4808
4847
 
4809
4848
  def jerk(
@@ -4820,6 +4859,12 @@ class LIPM:
4820
4859
  ) -> Expression:
4821
4860
  ...
4822
4861
 
4862
+ t_end: float # double
4863
+
4864
+ t_start: float # double
4865
+
4866
+ timesteps: int # int
4867
+
4823
4868
  def vel(
4824
4869
  self: LIPM,
4825
4870
  timestep: int, # int
@@ -4829,8 +4874,12 @@ class LIPM:
4829
4874
 
4830
4875
  x: Integrator # placo::problem::Integrator
4831
4876
 
4877
+ x_var: Variable # placo::problem::Variable
4878
+
4832
4879
  y: Integrator # placo::problem::Integrator
4833
4880
 
4881
+ y_var: Variable # placo::problem::Variable
4882
+
4834
4883
  def zmp(
4835
4884
  self: LIPM,
4836
4885
  timestep: int, # int
@@ -5215,6 +5264,43 @@ class PolygonConstraint:
5215
5264
  ...
5216
5265
 
5217
5266
 
5267
+ class Polynom:
5268
+ def __init__(
5269
+ self: Polynom,
5270
+ coefficients: numpy.ndarray, # Eigen::VectorXd
5271
+
5272
+ ) -> any:
5273
+ ...
5274
+
5275
+ coefficients: numpy.ndarray # Eigen::VectorXd
5276
+ """coefficients, from highest to lowest
5277
+ """
5278
+
5279
+ @staticmethod
5280
+ def derivative_coefficient(
5281
+ degree: int, # int
5282
+ derivative: int, # int
5283
+
5284
+ ) -> int:
5285
+ ...
5286
+
5287
+ def value(
5288
+ self: Polynom,
5289
+ x: float, # double
5290
+ derivative: int = 0, # int
5291
+
5292
+ ) -> float:
5293
+ """Computes the value of polynom.
5294
+
5295
+
5296
+ :param x: abscissa
5297
+
5298
+ :param derivative: differentiation order (0: p, 1: p', 2: p'' etc.)
5299
+
5300
+ :return: value"""
5301
+ ...
5302
+
5303
+
5218
5304
  class PositionTask:
5219
5305
  A: numpy.ndarray # Eigen::MatrixXd
5220
5306
  """Matrix A in the task Ax = b, where x are the joint delta positions.
@@ -5496,6 +5582,43 @@ class ProblemConstraint:
5496
5582
  """
5497
5583
 
5498
5584
 
5585
+ class ProblemPolynom:
5586
+ """Represents a polynom for which decision variables are problem coefficients.
5587
+ """
5588
+ def __init__(
5589
+ self: ProblemPolynom,
5590
+ variable: Variable, # placo::problem::Variable
5591
+
5592
+ ) -> any:
5593
+ ...
5594
+
5595
+ def expr(
5596
+ self: ProblemPolynom,
5597
+ x: float, # double
5598
+ derivative: int = 0, # int
5599
+
5600
+ ) -> Expression:
5601
+ """Builds a problem expression for the value of the polynom.
5602
+
5603
+
5604
+ :param x: abscissa
5605
+
5606
+ :param derivative: differentiation order (0: p, 1: p', 2: p'' etc.)
5607
+
5608
+ :return: problem expression"""
5609
+ ...
5610
+
5611
+ def get_polynom(
5612
+ self: ProblemPolynom,
5613
+
5614
+ ) -> Polynom:
5615
+ """Obtain resulting polynom (after problem is solved)
5616
+
5617
+
5618
+ :return:"""
5619
+ ...
5620
+
5621
+
5499
5622
  class PuppetContact:
5500
5623
  def __init__(
5501
5624
  self: PuppetContact,
@@ -6425,6 +6548,136 @@ class RobotWrapper_State:
6425
6548
  """
6426
6549
 
6427
6550
 
6551
+ class Segment:
6552
+ def __init__(
6553
+ self: Segment,
6554
+ start: numpy.ndarray, # const Eigen::Vector2d &
6555
+ end: numpy.ndarray, # const Eigen::Vector2d &
6556
+
6557
+ ) -> any:
6558
+ ...
6559
+
6560
+ end: numpy.ndarray # Eigen::Vector2d
6561
+
6562
+ def half_line_pass_through(
6563
+ self: Segment,
6564
+ s: Segment, # placo::tools::Segment
6565
+
6566
+ ) -> bool:
6567
+ """Checks if the half-line starting from the start of this segment and going through its end pass through another segment.
6568
+
6569
+
6570
+ :param s: The other segment.
6571
+
6572
+ :return: True if the intersection is a point of the other segment."""
6573
+ ...
6574
+
6575
+ def intersects(
6576
+ self: Segment,
6577
+ s: Segment, # placo::tools::Segment
6578
+
6579
+ ) -> bool:
6580
+ """Checks if there is an intersection between this segment and another one, i.e. if the intersection of their guiding lines is a point of both segments.
6581
+
6582
+
6583
+ :param s: The other segment.
6584
+
6585
+ :return: True if there is an intersection."""
6586
+ ...
6587
+
6588
+ def is_collinear(
6589
+ self: Segment,
6590
+ s: Segment, # placo::tools::Segment
6591
+ epsilon: float = 1e-6, # double
6592
+
6593
+ ) -> bool:
6594
+ """Checks if this segment is collinear with another one.
6595
+
6596
+
6597
+ :param s: The segment to check collinearity with.
6598
+
6599
+ :param epsilon: To account for floating point errors.
6600
+
6601
+ :return: True if the segments are collinear."""
6602
+ ...
6603
+
6604
+ def is_parallel(
6605
+ self: Segment,
6606
+ s: Segment, # placo::tools::Segment
6607
+ epsilon: float = 1e-6, # double
6608
+
6609
+ ) -> bool:
6610
+ """Checks if this segment is parallel to another one.
6611
+
6612
+
6613
+ :param s: The segment to check parallelism with.
6614
+
6615
+ :param epsilon: To account for floating point errors.
6616
+
6617
+ :return: True if the segments are parallel."""
6618
+ ...
6619
+
6620
+ def is_point_aligned(
6621
+ self: Segment,
6622
+ point: numpy.ndarray, # const Eigen::Vector2d &
6623
+ epsilon: float = 1e-6, # double
6624
+
6625
+ ) -> bool:
6626
+ """Checks if a point is aligned with this segment.
6627
+
6628
+
6629
+ :param point: The point to check alignment with.
6630
+
6631
+ :param epsilon: To account for floating point errors.
6632
+
6633
+ :return: True if the point is aligned with the segment."""
6634
+ ...
6635
+
6636
+ def is_point_in_segment(
6637
+ self: Segment,
6638
+ point: numpy.ndarray, # const Eigen::Vector2d &
6639
+ epsilon: float = 1e-6, # double
6640
+
6641
+ ) -> bool:
6642
+ """Checks if a point is in the segment.
6643
+
6644
+
6645
+ :param point: The point to check.
6646
+
6647
+ :param epsilon: To account for floating point errors.
6648
+
6649
+ :return: True if the point is in the segment."""
6650
+ ...
6651
+
6652
+ def line_pass_through(
6653
+ self: Segment,
6654
+ s: Segment, # placo::tools::Segment
6655
+
6656
+ ) -> bool:
6657
+ """Checks if the guiding line of another segment pass through this segment, i.e. if the intersection between the guiding lines of this segment and another one is a point of this segment.
6658
+
6659
+
6660
+ :param s: The other segment.
6661
+
6662
+ :return: True if the intersection is a point of this segment."""
6663
+ ...
6664
+
6665
+ def lines_intersection(
6666
+ self: Segment,
6667
+ s: Segment, # placo::tools::Segment
6668
+
6669
+ ) -> numpy.ndarray:
6670
+ """Return the intersection between the guiding lines of this segment and another one.
6671
+
6672
+
6673
+ :param s: The other segment.
6674
+
6675
+ :return: The intersection point."""
6676
+ ...
6677
+
6678
+ start: numpy.ndarray # Eigen::Vector2d
6679
+
6680
+
6428
6681
  class Sparsity:
6429
6682
  """Internal helper to check the column sparsity of a matrix.
6430
6683
  """
@@ -6495,11 +6748,21 @@ class Support:
6495
6748
  """A support is a set of footsteps (can be one or two foot on the ground)
6496
6749
  """
6497
6750
  def __init__(
6498
- arg1: object,
6751
+ self: Support,
6752
+ footsteps: list[Footstep], # std::vector<placo::humanoid::FootstepsPlanner::Footstep>
6753
+
6754
+ ) -> any:
6755
+ ...
6756
+
6757
+ def apply_offset(
6758
+ self: Support,
6759
+ offset: numpy.ndarray, # Eigen::Vector2d
6499
6760
 
6500
6761
  ) -> None:
6501
6762
  ...
6502
6763
 
6764
+ elapsed_ratio: float # double
6765
+
6503
6766
  end: bool # bool
6504
6767
 
6505
6768
  def footstep_frame(
@@ -6534,11 +6797,7 @@ class Support:
6534
6797
  """Checks whether this support is a double support."""
6535
6798
  ...
6536
6799
 
6537
- def kick(
6538
- self: Support,
6539
-
6540
- ) -> bool:
6541
- ...
6800
+ replanned: bool # bool
6542
6801
 
6543
6802
  def set_end(
6544
6803
  arg1: Support,
@@ -6569,6 +6828,10 @@ class Support:
6569
6828
  ) -> list[numpy.ndarray]:
6570
6829
  ...
6571
6830
 
6831
+ t_start: float # double
6832
+
6833
+ time_ratio: float # double
6834
+
6572
6835
 
6573
6836
  class Supports:
6574
6837
  def __init__(
@@ -6634,11 +6897,13 @@ class SwingFootCubic:
6634
6897
  @staticmethod
6635
6898
  def make_trajectory(
6636
6899
  t_start: float, # double
6637
- t_end: float, # double
6900
+ virt_duration: float, # double
6638
6901
  height: float, # double
6639
6902
  rise_ratio: float, # double
6640
6903
  start: numpy.ndarray, # Eigen::Vector3d
6641
6904
  target: numpy.ndarray, # Eigen::Vector3d
6905
+ elapsed_ratio: float = 0., # double
6906
+ start_vel: numpy.ndarray = None, # Eigen::Vector3d (default: Eigen::Vector3d::Zero())
6642
6907
 
6643
6908
  ) -> SwingFootCubicTrajectory:
6644
6909
  ...
@@ -6872,193 +7137,63 @@ class Variable:
6872
7137
  """
6873
7138
 
6874
7139
 
6875
- class WalkPatternGenerator:
7140
+ class WPGTrajectory:
6876
7141
  def __init__(
6877
- self: WalkPatternGenerator,
6878
- robot: HumanoidRobot, # placo::humanoid::HumanoidRobot
6879
- parameters: HumanoidParameters, # placo::humanoid::HumanoidParameters
7142
+ arg1: object,
7143
+ arg2: float,
7144
+ arg3: float,
7145
+ arg4: float,
6880
7146
 
6881
- ) -> any:
7147
+ ) -> None:
6882
7148
  ...
6883
7149
 
6884
- def can_replan_supports(
6885
- self: WalkPatternGenerator,
6886
- trajectory: WalkTrajectory, # placo::humanoid::WalkPatternGenerator::Trajectory
6887
- t_replan: float, # double
7150
+ def apply_transform(
7151
+ self: WPGTrajectory,
7152
+ T: numpy.ndarray, # Eigen::Affine3d
6888
7153
 
6889
- ) -> bool:
6890
- """Checks if a trajectory can be replanned for supports."""
7154
+ ) -> None:
7155
+ """Applies a given transformation to the left of all values issued by the trajectory."""
6891
7156
  ...
6892
7157
 
6893
- def plan(
6894
- self: WalkPatternGenerator,
6895
- supports: list[Support], # std::vector<placo::humanoid::FootstepsPlanner::Support>
6896
- initial_com_world: numpy.ndarray, # Eigen::Vector3d
6897
- t_start: float = 0., # double
6898
-
6899
- ) -> WalkTrajectory:
6900
- """Plan a walk trajectory following given footsteps based on the parameters of the WPG.
6901
-
6902
-
6903
- :param supports: Supports generated from the foosteps to follow
6904
-
6905
- :return: Planned trajectory"""
6906
- ...
6907
-
6908
- def replan(
6909
- self: WalkPatternGenerator,
6910
- supports: list[Support], # std::vector<placo::humanoid::FootstepsPlanner::Support>
6911
- old_trajectory: WalkTrajectory, # placo::humanoid::WalkPatternGenerator::Trajectory
6912
- t_replan: float, # double
6913
-
6914
- ) -> WalkTrajectory:
6915
- """Update the walk trajectory to follow given footsteps based on the parameters of the WPG.
6916
-
6917
-
6918
- :param supports: Supports generated from the current foosteps or the new ones to follow. Contain the current support
6919
-
6920
- :param old_trajectory: Current walk trajectory
6921
-
6922
- :param t_replan: The time (in the original trajectory) where the replan happens
6923
-
6924
- :return: True if the trajectory have been replanned, false it hasn't"""
6925
- ...
6926
-
6927
- def replan_supports(
6928
- self: WalkPatternGenerator,
6929
- planner: FootstepsPlanner, # placo::humanoid::FootstepsPlanner
6930
- trajectory: WalkTrajectory, # placo::humanoid::WalkPatternGenerator::Trajectory
6931
- t_replan: float, # double
6932
-
6933
- ) -> list[Support]:
6934
- """Replan the supports for a given trajectory given a footsteps planner."""
6935
- ...
6936
-
6937
-
6938
- class WalkTasks:
6939
- def __init__(
6940
- arg1: object,
6941
-
6942
- ) -> None:
6943
- ...
6944
-
6945
- com_x: float # double
6946
-
6947
- com_y: float # double
6948
-
6949
- def get_tasks_error(
6950
- self: WalkTasks,
6951
-
6952
- ) -> any:
6953
- ...
6954
-
6955
- def initialize_tasks(
6956
- self: WalkTasks,
6957
- solver: KinematicsSolver, # placo::kinematics::KinematicsSolver
6958
- robot: HumanoidRobot, # placo::humanoid::HumanoidRobot
6959
-
6960
- ) -> None:
6961
- ...
6962
-
6963
- left_foot_task: FrameTask # placo::kinematics::FrameTask
6964
-
6965
- def reach_initial_pose(
6966
- self: WalkTasks,
6967
- T_world_left: numpy.ndarray, # Eigen::Affine3d
6968
- feet_spacing: float, # double
6969
- com_height: float, # double
6970
- trunk_pitch: float, # double
6971
-
6972
- ) -> None:
6973
- ...
6974
-
6975
- def remove_tasks(
6976
- self: WalkTasks,
6977
-
6978
- ) -> None:
6979
- ...
6980
-
6981
- right_foot_task: FrameTask # placo::kinematics::FrameTask
6982
-
6983
- scaled: bool # bool
6984
-
6985
- solver: KinematicsSolver # placo::kinematics::KinematicsSolver
6986
-
6987
- trunk_mode: bool # bool
6988
-
6989
- trunk_orientation_task: OrientationTask # placo::kinematics::OrientationTask
6990
-
6991
- def update_tasks(
6992
- self: WalkTasks,
6993
- T_world_left: numpy.ndarray, # Eigen::Affine3d
6994
- T_world_right: numpy.ndarray, # Eigen::Affine3d
6995
- com_world: numpy.ndarray, # Eigen::Vector3d
6996
- R_world_trunk: numpy.ndarray, # Eigen::Matrix3d
6997
-
6998
- ) -> None:
6999
- ...
7000
-
7001
- def update_tasks_from_trajectory(
7002
- arg1: WalkTasks,
7003
- arg2: WalkTrajectory,
7004
- arg3: float,
7005
-
7006
- ) -> None:
7007
- ...
7008
-
7009
-
7010
- class WalkTrajectory:
7011
- def __init__(
7012
- arg1: object,
7013
-
7014
- ) -> None:
7015
- ...
7016
-
7017
- def apply_transform(
7018
- self: WalkTrajectory,
7019
- T: numpy.ndarray, # Eigen::Affine3d
7020
-
7021
- ) -> None:
7022
- """Applies a given transformation to the left of all values issued by the trajectory."""
7023
- ...
7158
+ com_target_z: float # double
7024
7159
 
7025
7160
  def get_R_world_trunk(
7026
- self: WalkTrajectory,
7161
+ self: WPGTrajectory,
7027
7162
  t: float, # double
7028
7163
 
7029
7164
  ) -> numpy.ndarray:
7030
7165
  ...
7031
7166
 
7032
7167
  def get_T_world_left(
7033
- self: WalkTrajectory,
7168
+ self: WPGTrajectory,
7034
7169
  t: float, # double
7035
7170
 
7036
7171
  ) -> numpy.ndarray:
7037
7172
  ...
7038
7173
 
7039
7174
  def get_T_world_right(
7040
- self: WalkTrajectory,
7175
+ self: WPGTrajectory,
7041
7176
  t: float, # double
7042
7177
 
7043
7178
  ) -> numpy.ndarray:
7044
7179
  ...
7045
7180
 
7046
7181
  def get_a_world_CoM(
7047
- self: WalkTrajectory,
7182
+ self: WPGTrajectory,
7048
7183
  t: float, # double
7049
7184
 
7050
7185
  ) -> numpy.ndarray:
7051
7186
  ...
7052
7187
 
7053
7188
  def get_j_world_CoM(
7054
- self: WalkTrajectory,
7189
+ self: WPGTrajectory,
7055
7190
  t: float, # double
7056
7191
 
7057
7192
  ) -> numpy.ndarray:
7058
7193
  ...
7059
7194
 
7060
7195
  def get_next_support(
7061
- self: WalkTrajectory,
7196
+ self: WPGTrajectory,
7062
7197
  t: float, # double
7063
7198
  n: int = 1, # int
7064
7199
 
@@ -7067,14 +7202,14 @@ class WalkTrajectory:
7067
7202
  ...
7068
7203
 
7069
7204
  def get_p_world_CoM(
7070
- self: WalkTrajectory,
7205
+ self: WPGTrajectory,
7071
7206
  t: float, # double
7072
7207
 
7073
7208
  ) -> numpy.ndarray:
7074
7209
  ...
7075
7210
 
7076
7211
  def get_p_world_DCM(
7077
- self: WalkTrajectory,
7212
+ self: WPGTrajectory,
7078
7213
  t: float, # double
7079
7214
  omega: float, # double
7080
7215
 
@@ -7082,7 +7217,7 @@ class WalkTrajectory:
7082
7217
  ...
7083
7218
 
7084
7219
  def get_p_world_ZMP(
7085
- self: WalkTrajectory,
7220
+ self: WPGTrajectory,
7086
7221
  t: float, # double
7087
7222
  omega: float, # double
7088
7223
 
@@ -7090,7 +7225,7 @@ class WalkTrajectory:
7090
7225
  ...
7091
7226
 
7092
7227
  def get_part_t_start(
7093
- self: WalkTrajectory,
7228
+ self: WPGTrajectory,
7094
7229
  t: float, # double
7095
7230
 
7096
7231
  ) -> float:
@@ -7098,7 +7233,7 @@ class WalkTrajectory:
7098
7233
  ...
7099
7234
 
7100
7235
  def get_prev_support(
7101
- self: WalkTrajectory,
7236
+ self: WPGTrajectory,
7102
7237
  t: float, # double
7103
7238
  n: int = 1, # int
7104
7239
 
@@ -7107,7 +7242,7 @@ class WalkTrajectory:
7107
7242
  ...
7108
7243
 
7109
7244
  def get_support(
7110
- self: WalkTrajectory,
7245
+ self: WPGTrajectory,
7111
7246
  t: float, # double
7112
7247
 
7113
7248
  ) -> Support:
@@ -7115,29 +7250,50 @@ class WalkTrajectory:
7115
7250
  ...
7116
7251
 
7117
7252
  def get_supports(
7118
- self: WalkTrajectory,
7253
+ self: WPGTrajectory,
7119
7254
 
7120
7255
  ) -> list[Support]:
7121
7256
  ...
7122
7257
 
7123
7258
  def get_v_world_CoM(
7124
- self: WalkTrajectory,
7259
+ self: WPGTrajectory,
7260
+ t: float, # double
7261
+
7262
+ ) -> numpy.ndarray:
7263
+ ...
7264
+
7265
+ def get_v_world_foot(
7266
+ self: WPGTrajectory,
7267
+ side: any, # placo::humanoid::HumanoidRobot::Side
7268
+ t: float, # double
7269
+
7270
+ ) -> numpy.ndarray:
7271
+ ...
7272
+
7273
+ def get_v_world_right(
7274
+ self: WPGTrajectory,
7125
7275
  t: float, # double
7126
7276
 
7127
7277
  ) -> numpy.ndarray:
7128
7278
  ...
7129
7279
 
7130
- jerk_planner_timesteps: int # int
7280
+ kept_ts: int # int
7281
+
7282
+ def print_parts_timings(
7283
+ self: WPGTrajectory,
7284
+
7285
+ ) -> None:
7286
+ ...
7131
7287
 
7132
7288
  def support_is_both(
7133
- self: WalkTrajectory,
7289
+ self: WPGTrajectory,
7134
7290
  t: float, # double
7135
7291
 
7136
7292
  ) -> bool:
7137
7293
  ...
7138
7294
 
7139
7295
  def support_side(
7140
- self: WalkTrajectory,
7296
+ self: WPGTrajectory,
7141
7297
  t: float, # double
7142
7298
 
7143
7299
  ) -> any:
@@ -7147,6 +7303,177 @@ class WalkTrajectory:
7147
7303
 
7148
7304
  t_start: float # double
7149
7305
 
7306
+ trunk_pitch: float # double
7307
+
7308
+ trunk_roll: float # double
7309
+
7310
+
7311
+ class WPGTrajectoryPart:
7312
+ def __init__(
7313
+ arg1: object,
7314
+ arg2: Support,
7315
+ arg3: float,
7316
+
7317
+ ) -> None:
7318
+ ...
7319
+
7320
+ support: Support # placo::humanoid::FootstepsPlanner::Support
7321
+
7322
+ t_end: float # double
7323
+
7324
+ t_start: float # double
7325
+
7326
+
7327
+ class WalkPatternGenerator:
7328
+ def __init__(
7329
+ self: WalkPatternGenerator,
7330
+ robot: HumanoidRobot, # placo::humanoid::HumanoidRobot
7331
+ parameters: HumanoidParameters, # placo::humanoid::HumanoidParameters
7332
+
7333
+ ) -> any:
7334
+ ...
7335
+
7336
+ def can_replan_supports(
7337
+ self: WalkPatternGenerator,
7338
+ trajectory: WPGTrajectory, # placo::humanoid::WalkPatternGenerator::Trajectory
7339
+ t_replan: float, # double
7340
+
7341
+ ) -> bool:
7342
+ """Checks if a trajectory can be replanned for supports."""
7343
+ ...
7344
+
7345
+ def compute_next_support(
7346
+ self: WalkPatternGenerator,
7347
+ t: float, # double
7348
+ current_support: Support, # placo::humanoid::FootstepsPlanner::Support
7349
+ next_support: Support, # placo::humanoid::FootstepsPlanner::Support
7350
+ world_measured_dcm: numpy.ndarray, # Eigen::Vector2d
7351
+ world_initial_dcm: numpy.ndarray, # Eigen::Vector2d
7352
+
7353
+ ) -> any:
7354
+ """Computes the position and time of the next support ensuring the DCM viability based on the measured DCM.
7355
+
7356
+
7357
+ :param TODO:"""
7358
+ ...
7359
+
7360
+ def plan(
7361
+ self: WalkPatternGenerator,
7362
+ supports: list[Support], # std::vector<placo::humanoid::FootstepsPlanner::Support>
7363
+ initial_com_world: numpy.ndarray, # Eigen::Vector3d
7364
+ t_start: float = 0., # double
7365
+
7366
+ ) -> WPGTrajectory:
7367
+ """Plans a walk trajectory following given footsteps based on the parameters of the WPG.
7368
+
7369
+
7370
+ :param supports: Supports generated from the foosteps to follow
7371
+
7372
+ :return: Planned trajectory"""
7373
+ ...
7374
+
7375
+ def replan(
7376
+ self: WalkPatternGenerator,
7377
+ supports: list[Support], # std::vector<placo::humanoid::FootstepsPlanner::Support>
7378
+ old_trajectory: WPGTrajectory, # placo::humanoid::WalkPatternGenerator::Trajectory
7379
+ t_replan: float, # double
7380
+
7381
+ ) -> WPGTrajectory:
7382
+ """Updates the walk trajectory to follow given footsteps based on the parameters of the WPG.
7383
+
7384
+
7385
+ :param supports: Supports generated from the current foosteps or the new ones to follow. Contain the current support
7386
+
7387
+ :param old_trajectory: Current walk trajectory
7388
+
7389
+ :param t_replan: The time (in the original trajectory) where the replan happens
7390
+
7391
+ :return: Updated trajectory"""
7392
+ ...
7393
+
7394
+ def replan_supports(
7395
+ self: WalkPatternGenerator,
7396
+ planner: FootstepsPlanner, # placo::humanoid::FootstepsPlanner
7397
+ trajectory: WPGTrajectory, # placo::humanoid::WalkPatternGenerator::Trajectory
7398
+ t_replan: float, # double
7399
+ t_last_replan: float, # double
7400
+
7401
+ ) -> list[Support]:
7402
+ """Replans the supports for a given trajectory given a footsteps planner."""
7403
+ ...
7404
+
7405
+
7406
+ class WalkTasks:
7407
+ def __init__(
7408
+ arg1: object,
7409
+
7410
+ ) -> None:
7411
+ ...
7412
+
7413
+ com_x: float # double
7414
+
7415
+ com_y: float # double
7416
+
7417
+ def get_tasks_error(
7418
+ self: WalkTasks,
7419
+
7420
+ ) -> any:
7421
+ ...
7422
+
7423
+ def initialize_tasks(
7424
+ self: WalkTasks,
7425
+ solver: KinematicsSolver, # placo::kinematics::KinematicsSolver
7426
+ robot: HumanoidRobot, # placo::humanoid::HumanoidRobot
7427
+
7428
+ ) -> None:
7429
+ ...
7430
+
7431
+ left_foot_task: FrameTask # placo::kinematics::FrameTask
7432
+
7433
+ def reach_initial_pose(
7434
+ self: WalkTasks,
7435
+ T_world_left: numpy.ndarray, # Eigen::Affine3d
7436
+ feet_spacing: float, # double
7437
+ com_height: float, # double
7438
+ trunk_pitch: float, # double
7439
+
7440
+ ) -> None:
7441
+ ...
7442
+
7443
+ def remove_tasks(
7444
+ self: WalkTasks,
7445
+
7446
+ ) -> None:
7447
+ ...
7448
+
7449
+ right_foot_task: FrameTask # placo::kinematics::FrameTask
7450
+
7451
+ scaled: bool # bool
7452
+
7453
+ solver: KinematicsSolver # placo::kinematics::KinematicsSolver
7454
+
7455
+ trunk_mode: bool # bool
7456
+
7457
+ trunk_orientation_task: OrientationTask # placo::kinematics::OrientationTask
7458
+
7459
+ def update_tasks(
7460
+ self: WalkTasks,
7461
+ T_world_left: numpy.ndarray, # Eigen::Affine3d
7462
+ T_world_right: numpy.ndarray, # Eigen::Affine3d
7463
+ com_world: numpy.ndarray, # Eigen::Vector3d
7464
+ R_world_trunk: numpy.ndarray, # Eigen::Matrix3d
7465
+
7466
+ ) -> None:
7467
+ ...
7468
+
7469
+ def update_tasks_from_trajectory(
7470
+ arg1: WalkTasks,
7471
+ arg2: WPGTrajectory,
7472
+ arg3: float,
7473
+
7474
+ ) -> None:
7475
+ ...
7476
+
7150
7477
 
7151
7478
  class WheelTask:
7152
7479
  A: numpy.ndarray # Eigen::MatrixXd
@@ -7567,4 +7894,4 @@ def wrap_angle(
7567
7894
  ...
7568
7895
 
7569
7896
 
7570
- __groups__ = {'placo::dynamics': ['AvoidSelfCollisionsDynamicsConstraint', 'Contact', 'Contact6D', 'DynamicsCoMTask', 'DynamicsConstraint', 'DynamicsFrameTask', 'DynamicsGearTask', 'DynamicsJointsTask', 'DynamicsOrientationTask', 'DynamicsPositionTask', 'DynamicsRelativeFrameTask', 'DynamicsRelativeOrientationTask', 'DynamicsRelativePositionTask', 'DynamicsSolver', 'DynamicsSolverResult', 'DynamicsTask', 'DynamicsTorqueTask', 'ExternalWrenchContact', 'LineContact', 'PointContact', 'PuppetContact', 'TaskContact'], 'placo::kinematics': ['AvoidSelfCollisionsKinematicsConstraint', 'AxisAlignTask', 'CentroidalMomentumTask', 'CoMPolygonConstraint', 'CoMTask', 'ConeConstraint', 'DistanceTask', 'FrameTask', 'GearTask', 'JointsTask', 'KinematicsConstraint', 'KinematicsSolver', 'KineticEnergyRegularizationTask', 'ManipulabilityTask', 'OrientationTask', 'PositionTask', 'RegularizationTask', 'RelativeFrameTask', 'RelativeOrientationTask', 'RelativePositionTask', 'Task', 'WheelTask'], 'placo::tools': ['AxisesMask', 'CubicSpline', 'CubicSpline3D', 'Prioritized'], 'placo::model': ['Collision', 'Distance', 'RobotWrapper', 'RobotWrapper_State'], 'placo::problem': ['Expression', 'Integrator', 'IntegratorTrajectory', 'PolygonConstraint', 'Problem', 'ProblemConstraint', 'QPError', 'Sparsity', 'SparsityInterval', 'Variable'], 'placo::humanoid': ['Footstep', 'FootstepsPlanner', 'FootstepsPlannerNaive', 'FootstepsPlannerRepetitive', 'HumanoidParameters', 'HumanoidRobot', 'LIPM', 'LIPMTrajectory', 'Support', 'SwingFoot', 'SwingFootCubic', 'SwingFootCubicTrajectory', 'SwingFootQuintic', 'SwingFootQuinticTrajectory', 'SwingFootTrajectory', 'WalkPatternGenerator', 'WalkTasks', 'WalkTrajectory']}
7897
+ __groups__ = {'placo::dynamics': ['AvoidSelfCollisionsDynamicsConstraint', 'Contact', 'Contact6D', 'DynamicsCoMTask', 'DynamicsConstraint', 'DynamicsFrameTask', 'DynamicsGearTask', 'DynamicsJointsTask', 'DynamicsOrientationTask', 'DynamicsPositionTask', 'DynamicsRelativeFrameTask', 'DynamicsRelativeOrientationTask', 'DynamicsRelativePositionTask', 'DynamicsSolver', 'DynamicsSolverResult', 'DynamicsTask', 'DynamicsTorqueTask', 'ExternalWrenchContact', 'LineContact', 'PointContact', 'PuppetContact', 'TaskContact'], 'placo::kinematics': ['AvoidSelfCollisionsKinematicsConstraint', 'AxisAlignTask', 'CentroidalMomentumTask', 'CoMPolygonConstraint', 'CoMTask', 'ConeConstraint', 'DistanceTask', 'FrameTask', 'GearTask', 'JointSpaceHalfSpacesConstraint', 'JointsTask', 'KinematicsConstraint', 'KinematicsSolver', 'KineticEnergyRegularizationTask', 'ManipulabilityTask', 'OrientationTask', 'PositionTask', 'RegularizationTask', 'RelativeFrameTask', 'RelativeOrientationTask', 'RelativePositionTask', 'Task', 'WheelTask'], 'placo::tools': ['AxisesMask', 'CubicSpline', 'CubicSpline3D', 'Polynom', 'Prioritized', 'Segment'], 'placo::model': ['Collision', 'Distance', 'RobotWrapper', 'RobotWrapper_State'], 'placo::problem': ['Expression', 'Integrator', 'IntegratorTrajectory', 'PolygonConstraint', 'Problem', 'ProblemConstraint', 'ProblemPolynom', 'QPError', 'Sparsity', 'SparsityInterval', 'Variable'], 'placo::humanoid': ['Footstep', 'FootstepsPlanner', 'FootstepsPlannerNaive', 'FootstepsPlannerRepetitive', 'HumanoidParameters', 'HumanoidRobot', 'LIPM', 'LIPMTrajectory', 'Support', 'SwingFoot', 'SwingFootCubic', 'SwingFootCubicTrajectory', 'SwingFootQuintic', 'SwingFootQuinticTrajectory', 'SwingFootTrajectory', 'WPGTrajectory', 'WPGTrajectoryPart', 'WalkPatternGenerator', 'WalkTasks']}
@@ -0,0 +1,62 @@
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
+ 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
+ <img width="400" src="https://placo.readthedocs.io/en/latest/_static/placo.png" />
25
+
26
+ ## Planning & Control
27
+
28
+ 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.
29
+
30
+ ### Task-Space Inverse Kinematics
31
+
32
+ [![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)
33
+
34
+ High-level API to specify tasks for constrained inverse kinematics (IK).
35
+
36
+ - [See documentation](https://placo.readthedocs.io/en/latest/kinematics/getting_started.html)
37
+ - [Examples](https://placo.readthedocs.io/en/latest/kinematics/examples_gallery.html)
38
+
39
+ ### Task-Space Inverse Dynamics
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
+ High-level API to specify tasks for constrained inverse dynamics (ID).
44
+
45
+ - [See documentation](https://placo.readthedocs.io/en/latest/dynamics/getting_started.html)
46
+ - [Examples](https://placo.readthedocs.io/en/latest/dynamics/examples_gallery.html)
47
+
48
+
49
+ ## Installing
50
+
51
+ PlaCo can be installed from ``pip``
52
+
53
+ ```
54
+ pip install placo
55
+ ```
56
+
57
+ Or [built from sources](https://placo.readthedocs.io/en/latest/basics/installation_source.html)
58
+
59
+ ## Resources
60
+
61
+ * [Documentation](https://placo.readthedocs.io/en/latest/)
62
+ * [Examples](https://github.com/rhoban/placo-examples) repository
@@ -1,6 +1,6 @@
1
- cmeel.prefix/lib/liblibplaco.so,sha256=dW2MV7F2r0WwQcByZhI1l-uvg0WLdISQStZ4AA_cTAI,2616424
2
- cmeel.prefix/lib/python3.10/site-packages/placo.pyi,sha256=Dv3QaHIsO_eh0FNluw9AFC3Hao09e9gdK0TbYbPHbvk,157676
3
- cmeel.prefix/lib/python3.10/site-packages/placo.so,sha256=VmJRvX6tkxZoqJoHzssmekDUE4_MQD9Xrh4H8dWbhgo,7766704
1
+ cmeel.prefix/lib/liblibplaco.so,sha256=JHPCSivZCpUJilIWFEzM8EC9fp7mWKb5UMiplzI6Y0Q,2619816
2
+ cmeel.prefix/lib/python3.10/site-packages/placo.pyi,sha256=7qqoiIhhkYkGKgIuYE9NV1InLRwFwO3VBMjnUnL2LaE,165405
3
+ cmeel.prefix/lib/python3.10/site-packages/placo.so,sha256=haijm8VCNbRolUpwCWsZuOmxRJxkr-4UjpuSwocy3X4,8201384
4
4
  cmeel.prefix/lib/python3.10/site-packages/placo_utils/__init__.py,sha256=UN-fc5KfBWQ-_qkm0Ajouh-T9tBGm5aUtuzBiH1tRtk,80
5
5
  cmeel.prefix/lib/python3.10/site-packages/placo_utils/tf.py,sha256=fFRXNbeLlXzn5VOqYl7hcSuvOOtTDTiLi_Lpd9_l6wA,36
6
6
  cmeel.prefix/lib/python3.10/site-packages/placo_utils/view.py,sha256=7KiLYGpTKaPJtFHZ6kjERdOzJiPSDUtkIKHbziHpkYk,928
@@ -8,8 +8,8 @@ cmeel.prefix/lib/python3.10/site-packages/placo_utils/visualization.py,sha256=6E
8
8
  cmeel.prefix/lib/python3.10/site-packages/placo_utils/__pycache__/__init__.cpython-310.pyc,sha256=tJrTajdA7hNO9tZkE1oN49rU-61lCNUED-mQXdAvzAs,261
9
9
  cmeel.prefix/lib/python3.10/site-packages/placo_utils/__pycache__/tf.cpython-310.pyc,sha256=APWQ5-zKgbEcMnkv6Hxgj_Q46jpnuOyL9YbSrj6Z5Vw,204
10
10
  cmeel.prefix/lib/python3.10/site-packages/placo_utils/__pycache__/visualization.cpython-310.pyc,sha256=kMdmKY2LZKM4rkKm4j0y-TOMBQ3PeVIpbfB_YJxNz5c,6781
11
- placo-0.6.3.dist-info/license/LICENSE,sha256=q2bBXvk4Eh7TmP11LoIOIGSUuJbR30JBI6ZZ37g52T4,1061
12
- placo-0.6.3.dist-info/METADATA,sha256=nUdBGDAALqcemXjBxMpxSf_Y9VbvknUiwse6wAazGEg,2569
13
- placo-0.6.3.dist-info/WHEEL,sha256=y7GzdFHC0qrZwnE2SqFjrXxL9NLtXflO9hVb0PhWwIU,115
14
- placo-0.6.3.dist-info/top_level.txt,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- placo-0.6.3.dist-info/RECORD,,
11
+ placo-0.6.5.dist-info/licenses/LICENSE,sha256=q2bBXvk4Eh7TmP11LoIOIGSUuJbR30JBI6ZZ37g52T4,1061
12
+ placo-0.6.5.dist-info/METADATA,sha256=lvTtWBMQSRl3ZM85U5-DlJ57HNEiDwpnD7cMrrxBNP4,2622
13
+ placo-0.6.5.dist-info/WHEEL,sha256=lhhHTnYbOJzqsg4pPctu5MqgY8RxNHlH5gszBU8FPYs,115
14
+ placo-0.6.5.dist-info/top_level.txt,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
+ placo-0.6.5.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: cmeel 0.53.3
2
+ Generator: cmeel 0.57.1
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.1
2
- Name: placo
3
- Version: 0.6.3
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.