placo 0.5.9__0-cp310-cp310-manylinux_2_35_x86_64.whl → 0.6.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.
- cmeel.prefix/lib/liblibplaco.so +0 -0
- cmeel.prefix/lib/python3.10/site-packages/placo.pyi +210 -8
- cmeel.prefix/lib/python3.10/site-packages/placo.so +0 -0
- cmeel.prefix/lib/python3.10/site-packages/placo_utils/__pycache__/visualization.cpython-310.pyc +0 -0
- cmeel.prefix/lib/python3.10/site-packages/placo_utils/visualization.py +18 -1
- placo-0.6.0.dist-info/METADATA +57 -0
- {placo-0.5.9.dist-info → placo-0.6.0.dist-info}/RECORD +10 -10
- placo-0.5.9.dist-info/METADATA +0 -26
- {placo-0.5.9.dist-info → placo-0.6.0.dist-info}/WHEEL +0 -0
- {placo-0.5.9.dist-info → placo-0.6.0.dist-info}/license/LICENSE +0 -0
- {placo-0.5.9.dist-info → placo-0.6.0.dist-info}/top_level.txt +0 -0
cmeel.prefix/lib/liblibplaco.so
CHANGED
|
Binary file
|
|
@@ -51,6 +51,7 @@ KinematicsSolver = typing.NewType("KinematicsSolver", None)
|
|
|
51
51
|
KineticEnergyRegularizationTask = typing.NewType("KineticEnergyRegularizationTask", None)
|
|
52
52
|
LIPM = typing.NewType("LIPM", None)
|
|
53
53
|
LIPMTrajectory = typing.NewType("LIPMTrajectory", None)
|
|
54
|
+
LineContact = typing.NewType("LineContact", None)
|
|
54
55
|
ManipulabilityTask = typing.NewType("ManipulabilityTask", None)
|
|
55
56
|
OrientationTask = typing.NewType("OrientationTask", None)
|
|
56
57
|
PointContact = typing.NewType("PointContact", None)
|
|
@@ -635,6 +636,10 @@ class Contact:
|
|
|
635
636
|
"""Weight of moments for optimization (if relevant)
|
|
636
637
|
"""
|
|
637
638
|
|
|
639
|
+
weight_tangentials: float # double
|
|
640
|
+
"""Extra cost for tangential forces.
|
|
641
|
+
"""
|
|
642
|
+
|
|
638
643
|
wrench: numpy.ndarray # Eigen::VectorXd
|
|
639
644
|
"""Wrench populated after the DynamicsSolver::solve call.
|
|
640
645
|
"""
|
|
@@ -688,6 +693,10 @@ class Contact6D:
|
|
|
688
693
|
"""Weight of moments for optimization (if relevant)
|
|
689
694
|
"""
|
|
690
695
|
|
|
696
|
+
weight_tangentials: float # double
|
|
697
|
+
"""Extra cost for tangential forces.
|
|
698
|
+
"""
|
|
699
|
+
|
|
691
700
|
width: float # double
|
|
692
701
|
"""Rectangular contact width along local y-axis.
|
|
693
702
|
"""
|
|
@@ -1271,6 +1280,19 @@ class DynamicsJointsTask:
|
|
|
1271
1280
|
"""Current error vector.
|
|
1272
1281
|
"""
|
|
1273
1282
|
|
|
1283
|
+
def get_joint(
|
|
1284
|
+
self: DynamicsJointsTask,
|
|
1285
|
+
joint: str, # std::string
|
|
1286
|
+
|
|
1287
|
+
) -> float:
|
|
1288
|
+
"""Returns the current target position of a joint.
|
|
1289
|
+
|
|
1290
|
+
|
|
1291
|
+
:param joint: joint name
|
|
1292
|
+
|
|
1293
|
+
:return: current target position"""
|
|
1294
|
+
...
|
|
1295
|
+
|
|
1274
1296
|
kd: float # double
|
|
1275
1297
|
"""D gain for position control (if negative, will be critically damped)
|
|
1276
1298
|
"""
|
|
@@ -1781,6 +1803,19 @@ class DynamicsSolver:
|
|
|
1781
1803
|
:return: joints task"""
|
|
1782
1804
|
...
|
|
1783
1805
|
|
|
1806
|
+
def add_line_contact(
|
|
1807
|
+
self: DynamicsSolver,
|
|
1808
|
+
frame_task: DynamicsFrameTask, # placo::dynamics::FrameTask
|
|
1809
|
+
|
|
1810
|
+
) -> LineContact:
|
|
1811
|
+
"""Adds a fixed line contact.
|
|
1812
|
+
|
|
1813
|
+
|
|
1814
|
+
:param frame_task: associated frame task
|
|
1815
|
+
|
|
1816
|
+
:return: line contact"""
|
|
1817
|
+
...
|
|
1818
|
+
|
|
1784
1819
|
def add_orientation_task(
|
|
1785
1820
|
self: DynamicsSolver,
|
|
1786
1821
|
frame_name: str, # std::string
|
|
@@ -1942,6 +1977,19 @@ class DynamicsSolver:
|
|
|
1942
1977
|
:return: torque task"""
|
|
1943
1978
|
...
|
|
1944
1979
|
|
|
1980
|
+
def add_unilateral_line_contact(
|
|
1981
|
+
self: DynamicsSolver,
|
|
1982
|
+
frame_task: DynamicsFrameTask, # placo::dynamics::FrameTask
|
|
1983
|
+
|
|
1984
|
+
) -> LineContact:
|
|
1985
|
+
"""Adds a unilateral line contact, which is unilateral in the sense of the local body z-axis.
|
|
1986
|
+
|
|
1987
|
+
|
|
1988
|
+
:param frame_task: associated frame task
|
|
1989
|
+
|
|
1990
|
+
:return: unilateral line contact"""
|
|
1991
|
+
...
|
|
1992
|
+
|
|
1945
1993
|
def add_unilateral_point_contact(
|
|
1946
1994
|
self: DynamicsSolver,
|
|
1947
1995
|
position_task: DynamicsPositionTask, # placo::dynamics::PositionTask
|
|
@@ -2367,6 +2415,16 @@ class Expression:
|
|
|
2367
2415
|
:return: expression"""
|
|
2368
2416
|
...
|
|
2369
2417
|
|
|
2418
|
+
def is_constant(
|
|
2419
|
+
self: Expression,
|
|
2420
|
+
|
|
2421
|
+
) -> bool:
|
|
2422
|
+
"""checks if the expression is constant (doesn't depend on decision variables)
|
|
2423
|
+
|
|
2424
|
+
|
|
2425
|
+
:return: true if the expression is constant"""
|
|
2426
|
+
...
|
|
2427
|
+
|
|
2370
2428
|
def is_scalar(
|
|
2371
2429
|
self: Expression,
|
|
2372
2430
|
|
|
@@ -2377,26 +2435,26 @@ class Expression:
|
|
|
2377
2435
|
:return: true if the expression is a scalar"""
|
|
2378
2436
|
...
|
|
2379
2437
|
|
|
2380
|
-
def
|
|
2438
|
+
def left_multiply(
|
|
2381
2439
|
self: Expression,
|
|
2440
|
+
M: numpy.ndarray, # const Eigen::MatrixXd
|
|
2382
2441
|
|
|
2383
2442
|
) -> Expression:
|
|
2384
|
-
"""
|
|
2443
|
+
"""Multiply an expression on the left by a given matrix M.
|
|
2385
2444
|
|
|
2386
2445
|
|
|
2446
|
+
:param M: matrix
|
|
2447
|
+
|
|
2387
2448
|
:return: expression"""
|
|
2388
2449
|
...
|
|
2389
2450
|
|
|
2390
|
-
def
|
|
2451
|
+
def mean(
|
|
2391
2452
|
self: Expression,
|
|
2392
|
-
M: numpy.ndarray, # const Eigen::MatrixXd
|
|
2393
2453
|
|
|
2394
2454
|
) -> Expression:
|
|
2395
|
-
"""
|
|
2455
|
+
"""Reduces a multi-rows expression to the mean of its items.
|
|
2396
2456
|
|
|
2397
2457
|
|
|
2398
|
-
:param M: matrix
|
|
2399
|
-
|
|
2400
2458
|
:return: expression"""
|
|
2401
2459
|
...
|
|
2402
2460
|
|
|
@@ -2493,6 +2551,10 @@ class ExternalWrenchContact:
|
|
|
2493
2551
|
"""Weight of moments for optimization (if relevant)
|
|
2494
2552
|
"""
|
|
2495
2553
|
|
|
2554
|
+
weight_tangentials: float # double
|
|
2555
|
+
"""Extra cost for tangential forces.
|
|
2556
|
+
"""
|
|
2557
|
+
|
|
2496
2558
|
wrench: numpy.ndarray # Eigen::VectorXd
|
|
2497
2559
|
"""Wrench populated after the DynamicsSolver::solve call.
|
|
2498
2560
|
"""
|
|
@@ -3622,6 +3684,15 @@ class HumanoidRobot:
|
|
|
3622
3684
|
:param T_world_frameTarget: transformation matrix"""
|
|
3623
3685
|
...
|
|
3624
3686
|
|
|
3687
|
+
def set_gear_ratio(
|
|
3688
|
+
self: HumanoidRobot,
|
|
3689
|
+
joint_name: str, # const std::string &
|
|
3690
|
+
rotor_gear_ratio: float, # double
|
|
3691
|
+
|
|
3692
|
+
) -> None:
|
|
3693
|
+
"""Updates the rotor gear ratio (used for apparent inertia computation in the dynamics)"""
|
|
3694
|
+
...
|
|
3695
|
+
|
|
3625
3696
|
def set_gravity(
|
|
3626
3697
|
self: HumanoidRobot,
|
|
3627
3698
|
gravity: numpy.ndarray, # Eigen::Vector3d
|
|
@@ -3689,6 +3760,15 @@ class HumanoidRobot:
|
|
|
3689
3760
|
:param value: joint velocity"""
|
|
3690
3761
|
...
|
|
3691
3762
|
|
|
3763
|
+
def set_rotor_inertia(
|
|
3764
|
+
self: HumanoidRobot,
|
|
3765
|
+
joint_name: str, # const std::string &
|
|
3766
|
+
rotor_inertia: float, # double
|
|
3767
|
+
|
|
3768
|
+
) -> None:
|
|
3769
|
+
"""Updates the rotor inertia (used for apparent inertia computation in the dynamics)"""
|
|
3770
|
+
...
|
|
3771
|
+
|
|
3692
3772
|
def set_torque_limit(
|
|
3693
3773
|
self: HumanoidRobot,
|
|
3694
3774
|
name: str, # const std::string &
|
|
@@ -4075,6 +4155,19 @@ class JointsTask:
|
|
|
4075
4155
|
:return: task error norm"""
|
|
4076
4156
|
...
|
|
4077
4157
|
|
|
4158
|
+
def get_joint(
|
|
4159
|
+
self: JointsTask,
|
|
4160
|
+
joint: str, # std::string
|
|
4161
|
+
|
|
4162
|
+
) -> float:
|
|
4163
|
+
"""Returns the target value of a joint.
|
|
4164
|
+
|
|
4165
|
+
|
|
4166
|
+
:param joint: joint
|
|
4167
|
+
|
|
4168
|
+
:return: target value"""
|
|
4169
|
+
...
|
|
4170
|
+
|
|
4078
4171
|
name: str # std::string
|
|
4079
4172
|
"""Object name.
|
|
4080
4173
|
"""
|
|
@@ -4803,6 +4896,77 @@ class LIPMTrajectory:
|
|
|
4803
4896
|
...
|
|
4804
4897
|
|
|
4805
4898
|
|
|
4899
|
+
class LineContact:
|
|
4900
|
+
R_world_surface: numpy.ndarray # Eigen::Matrix3d
|
|
4901
|
+
"""rotation matrix expressing the surface frame in the world frame (for unilateral contact)
|
|
4902
|
+
"""
|
|
4903
|
+
|
|
4904
|
+
def __init__(
|
|
4905
|
+
self: LineContact,
|
|
4906
|
+
frame_task: DynamicsFrameTask, # placo::dynamics::FrameTask
|
|
4907
|
+
unilateral: bool, # bool
|
|
4908
|
+
|
|
4909
|
+
) -> any:
|
|
4910
|
+
"""see DynamicsSolver::add_fixed_planar_contact and DynamicsSolver::add_unilateral_planar_contact"""
|
|
4911
|
+
...
|
|
4912
|
+
|
|
4913
|
+
active: bool # bool
|
|
4914
|
+
"""true if the contact is active (ignored by the solver else, this allow to enable/disable a contact without removing it from the solver)
|
|
4915
|
+
"""
|
|
4916
|
+
|
|
4917
|
+
length: float # double
|
|
4918
|
+
"""Rectangular contact length along local x-axis.
|
|
4919
|
+
"""
|
|
4920
|
+
|
|
4921
|
+
mu: float # double
|
|
4922
|
+
"""Coefficient of friction (if relevant)
|
|
4923
|
+
"""
|
|
4924
|
+
|
|
4925
|
+
def orientation_task(
|
|
4926
|
+
self: LineContact,
|
|
4927
|
+
|
|
4928
|
+
) -> DynamicsOrientationTask:
|
|
4929
|
+
"""Associated orientation task."""
|
|
4930
|
+
...
|
|
4931
|
+
|
|
4932
|
+
def position_task(
|
|
4933
|
+
self: LineContact,
|
|
4934
|
+
|
|
4935
|
+
) -> DynamicsPositionTask:
|
|
4936
|
+
"""Associated position task."""
|
|
4937
|
+
...
|
|
4938
|
+
|
|
4939
|
+
unilateral: bool # bool
|
|
4940
|
+
"""true for unilateral contact with the ground
|
|
4941
|
+
"""
|
|
4942
|
+
|
|
4943
|
+
weight_forces: float # double
|
|
4944
|
+
"""Weight of forces for the optimization (if relevant)
|
|
4945
|
+
"""
|
|
4946
|
+
|
|
4947
|
+
weight_moments: float # double
|
|
4948
|
+
"""Weight of moments for optimization (if relevant)
|
|
4949
|
+
"""
|
|
4950
|
+
|
|
4951
|
+
weight_tangentials: float # double
|
|
4952
|
+
"""Extra cost for tangential forces.
|
|
4953
|
+
"""
|
|
4954
|
+
|
|
4955
|
+
wrench: numpy.ndarray # Eigen::VectorXd
|
|
4956
|
+
"""Wrench populated after the DynamicsSolver::solve call.
|
|
4957
|
+
"""
|
|
4958
|
+
|
|
4959
|
+
def zmp(
|
|
4960
|
+
self: LineContact,
|
|
4961
|
+
|
|
4962
|
+
) -> numpy.ndarray:
|
|
4963
|
+
"""Returns the contact ZMP in the local frame.
|
|
4964
|
+
|
|
4965
|
+
|
|
4966
|
+
:return: zmp"""
|
|
4967
|
+
...
|
|
4968
|
+
|
|
4969
|
+
|
|
4806
4970
|
class ManipulabilityTask:
|
|
4807
4971
|
A: numpy.ndarray # Eigen::MatrixXd
|
|
4808
4972
|
"""Matrix A in the task Ax = b, where x are the joint delta positions.
|
|
@@ -5008,6 +5172,10 @@ class PointContact:
|
|
|
5008
5172
|
"""Weight of moments for optimization (if relevant)
|
|
5009
5173
|
"""
|
|
5010
5174
|
|
|
5175
|
+
weight_tangentials: float # double
|
|
5176
|
+
"""Extra cost for tangential forces.
|
|
5177
|
+
"""
|
|
5178
|
+
|
|
5011
5179
|
wrench: numpy.ndarray # Eigen::VectorXd
|
|
5012
5180
|
"""Wrench populated after the DynamicsSolver::solve call.
|
|
5013
5181
|
"""
|
|
@@ -5252,6 +5420,10 @@ class Problem:
|
|
|
5252
5420
|
"""Number of problem variables that need to be solved.
|
|
5253
5421
|
"""
|
|
5254
5422
|
|
|
5423
|
+
regularization: float # double
|
|
5424
|
+
"""Default internal regularization.
|
|
5425
|
+
"""
|
|
5426
|
+
|
|
5255
5427
|
rewrite_equalities: bool # bool
|
|
5256
5428
|
"""If set to true, a QR factorization will be performed on the equality constraints, and the QP will be called with free variables only.
|
|
5257
5429
|
"""
|
|
@@ -5275,6 +5447,10 @@ class Problem:
|
|
|
5275
5447
|
"""If set to true, some sparsity optimizations will be performed when building the problem Hessian. This optimization is generally not useful for small problems.
|
|
5276
5448
|
"""
|
|
5277
5449
|
|
|
5450
|
+
x: numpy.ndarray # Eigen::VectorXd
|
|
5451
|
+
"""Computed result.
|
|
5452
|
+
"""
|
|
5453
|
+
|
|
5278
5454
|
|
|
5279
5455
|
class ProblemConstraint:
|
|
5280
5456
|
"""Represents a constraint to be enforced by a Problem.
|
|
@@ -5340,6 +5516,10 @@ class PuppetContact:
|
|
|
5340
5516
|
"""Weight of moments for optimization (if relevant)
|
|
5341
5517
|
"""
|
|
5342
5518
|
|
|
5519
|
+
weight_tangentials: float # double
|
|
5520
|
+
"""Extra cost for tangential forces.
|
|
5521
|
+
"""
|
|
5522
|
+
|
|
5343
5523
|
wrench: numpy.ndarray # Eigen::VectorXd
|
|
5344
5524
|
"""Wrench populated after the DynamicsSolver::solve call.
|
|
5345
5525
|
"""
|
|
@@ -6032,6 +6212,15 @@ class RobotWrapper:
|
|
|
6032
6212
|
:param T_world_frameTarget: transformation matrix"""
|
|
6033
6213
|
...
|
|
6034
6214
|
|
|
6215
|
+
def set_gear_ratio(
|
|
6216
|
+
self: RobotWrapper,
|
|
6217
|
+
joint_name: str, # const std::string &
|
|
6218
|
+
rotor_gear_ratio: float, # double
|
|
6219
|
+
|
|
6220
|
+
) -> None:
|
|
6221
|
+
"""Updates the rotor gear ratio (used for apparent inertia computation in the dynamics)"""
|
|
6222
|
+
...
|
|
6223
|
+
|
|
6035
6224
|
def set_gravity(
|
|
6036
6225
|
self: RobotWrapper,
|
|
6037
6226
|
gravity: numpy.ndarray, # Eigen::Vector3d
|
|
@@ -6099,6 +6288,15 @@ class RobotWrapper:
|
|
|
6099
6288
|
:param value: joint velocity"""
|
|
6100
6289
|
...
|
|
6101
6290
|
|
|
6291
|
+
def set_rotor_inertia(
|
|
6292
|
+
self: RobotWrapper,
|
|
6293
|
+
joint_name: str, # const std::string &
|
|
6294
|
+
rotor_inertia: float, # double
|
|
6295
|
+
|
|
6296
|
+
) -> None:
|
|
6297
|
+
"""Updates the rotor inertia (used for apparent inertia computation in the dynamics)"""
|
|
6298
|
+
...
|
|
6299
|
+
|
|
6102
6300
|
def set_torque_limit(
|
|
6103
6301
|
self: RobotWrapper,
|
|
6104
6302
|
name: str, # const std::string &
|
|
@@ -6623,6 +6821,10 @@ class TaskContact:
|
|
|
6623
6821
|
"""Weight of moments for optimization (if relevant)
|
|
6624
6822
|
"""
|
|
6625
6823
|
|
|
6824
|
+
weight_tangentials: float # double
|
|
6825
|
+
"""Extra cost for tangential forces.
|
|
6826
|
+
"""
|
|
6827
|
+
|
|
6626
6828
|
wrench: numpy.ndarray # Eigen::VectorXd
|
|
6627
6829
|
"""Wrench populated after the DynamicsSolver::solve call.
|
|
6628
6830
|
"""
|
|
@@ -7332,4 +7534,4 @@ def wrap_angle(
|
|
|
7332
7534
|
...
|
|
7333
7535
|
|
|
7334
7536
|
|
|
7335
|
-
__groups__ = {'placo::dynamics': ['AvoidSelfCollisionsDynamicsConstraint', 'Contact', 'Contact6D', 'DynamicsCoMTask', 'DynamicsConstraint', 'DynamicsFrameTask', 'DynamicsGearTask', 'DynamicsJointsTask', 'DynamicsOrientationTask', 'DynamicsPositionTask', 'DynamicsRelativeFrameTask', 'DynamicsRelativeOrientationTask', 'DynamicsRelativePositionTask', 'DynamicsSolver', 'DynamicsSolverResult', 'DynamicsTask', 'DynamicsTorqueTask', 'ExternalWrenchContact', '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']}
|
|
7537
|
+
__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']}
|
|
Binary file
|
cmeel.prefix/lib/python3.10/site-packages/placo_utils/__pycache__/visualization.cpython-310.pyc
CHANGED
|
Binary file
|
|
@@ -243,7 +243,7 @@ def contacts_viz(solver: placo.DynamicsSolver, ratio=0.1, radius=0.005):
|
|
|
243
243
|
origin = T_world_frame[:3, 3]
|
|
244
244
|
else:
|
|
245
245
|
origin = T_world_frame[:3, 3] + T_world_frame[:3, :3] @ contact.zmp()
|
|
246
|
-
|
|
246
|
+
|
|
247
247
|
arrow_viz(
|
|
248
248
|
f"contact_{k}",
|
|
249
249
|
origin,
|
|
@@ -251,6 +251,23 @@ def contacts_viz(solver: placo.DynamicsSolver, ratio=0.1, radius=0.005):
|
|
|
251
251
|
color=0x00FFAA,
|
|
252
252
|
radius=radius,
|
|
253
253
|
)
|
|
254
|
+
elif isinstance(contact, placo.LineContact):
|
|
255
|
+
frame_name = frames[contact.position_task().frame_index]
|
|
256
|
+
T_world_frame = robot.get_T_world_frame(frame_name)
|
|
257
|
+
wrench = T_world_frame[:3, :3] @ contact.wrench[:3]
|
|
258
|
+
|
|
259
|
+
if np.linalg.norm(wrench) < 1e-6:
|
|
260
|
+
origin = T_world_frame[:3, 3]
|
|
261
|
+
else:
|
|
262
|
+
origin = T_world_frame[:3, 3] + T_world_frame[:3, :3] @ contact.zmp()
|
|
263
|
+
|
|
264
|
+
arrow_viz(
|
|
265
|
+
f"contact_{k}",
|
|
266
|
+
origin,
|
|
267
|
+
origin + wrench * ratio,
|
|
268
|
+
color=0xFF33AA,
|
|
269
|
+
radius=radius,
|
|
270
|
+
)
|
|
254
271
|
elif isinstance(contact, placo.ExternalWrenchContact):
|
|
255
272
|
frame_name = frames[contact.frame_index]
|
|
256
273
|
T_world_frame = robot.get_T_world_frame(frame_name)
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: placo
|
|
3
|
+
Version: 0.6.0
|
|
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
|
+
[](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
|
+
[](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 +1,15 @@
|
|
|
1
|
-
cmeel.prefix/lib/liblibplaco.so,sha256=
|
|
2
|
-
cmeel.prefix/lib/python3.10/site-packages/placo.pyi,sha256=
|
|
3
|
-
cmeel.prefix/lib/python3.10/site-packages/placo.so,sha256=
|
|
1
|
+
cmeel.prefix/lib/liblibplaco.so,sha256=7BNsWrxXq_APe8CVkc8Bkl8imlqKAG1V93nPEHGPaqU,2616096
|
|
2
|
+
cmeel.prefix/lib/python3.10/site-packages/placo.pyi,sha256=HJCwhAyosdLE5Qx1XzowfYE2mb3STniQ9CmznKEFtKU,157034
|
|
3
|
+
cmeel.prefix/lib/python3.10/site-packages/placo.so,sha256=M4xqzpZPG_SX9CC3Onrw2Ra5unDB62qEMPMoTmaFAsw,7660312
|
|
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
|
|
7
|
-
cmeel.prefix/lib/python3.10/site-packages/placo_utils/visualization.py,sha256=
|
|
7
|
+
cmeel.prefix/lib/python3.10/site-packages/placo_utils/visualization.py,sha256=6ET7YkZBuIWoJg2qVO-rPt3Nj4ZnezyvGAe458G4VGo,8201
|
|
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
|
-
cmeel.prefix/lib/python3.10/site-packages/placo_utils/__pycache__/visualization.cpython-310.pyc,sha256=
|
|
11
|
-
placo-0.
|
|
12
|
-
placo-0.
|
|
13
|
-
placo-0.
|
|
14
|
-
placo-0.
|
|
15
|
-
placo-0.
|
|
10
|
+
cmeel.prefix/lib/python3.10/site-packages/placo_utils/__pycache__/visualization.cpython-310.pyc,sha256=kMdmKY2LZKM4rkKm4j0y-TOMBQ3PeVIpbfB_YJxNz5c,6781
|
|
11
|
+
placo-0.6.0.dist-info/license/LICENSE,sha256=q2bBXvk4Eh7TmP11LoIOIGSUuJbR30JBI6ZZ37g52T4,1061
|
|
12
|
+
placo-0.6.0.dist-info/METADATA,sha256=bIXZzN9vthtBPRlowPrlUKkhCLV_VhPK1XcLJUTG-xA,2569
|
|
13
|
+
placo-0.6.0.dist-info/WHEEL,sha256=y7GzdFHC0qrZwnE2SqFjrXxL9NLtXflO9hVb0PhWwIU,115
|
|
14
|
+
placo-0.6.0.dist-info/top_level.txt,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
|
+
placo-0.6.0.dist-info/RECORD,,
|
placo-0.5.9.dist-info/METADATA
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: placo
|
|
3
|
-
Version: 0.5.9
|
|
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
|
-
# Rhoban Planning and Control (placo)
|
|
25
|
-
|
|
26
|
-
* [Documentation](https://placo.readthedocs.io/en/latest/)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|