placo 0.5.6__0-cp310-cp310-manylinux_2_35_x86_64.whl → 0.5.9__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
@@ -22,7 +22,6 @@ DynamicsGearTask = typing.NewType("DynamicsGearTask", None)
22
22
  DynamicsJointsTask = typing.NewType("DynamicsJointsTask", None)
23
23
  DynamicsOrientationTask = typing.NewType("DynamicsOrientationTask", None)
24
24
  DynamicsPositionTask = typing.NewType("DynamicsPositionTask", None)
25
- DynamicsReactionRatioConstraint = typing.NewType("DynamicsReactionRatioConstraint", None)
26
25
  DynamicsRelativeFrameTask = typing.NewType("DynamicsRelativeFrameTask", None)
27
26
  DynamicsRelativeOrientationTask = typing.NewType("DynamicsRelativeOrientationTask", None)
28
27
  DynamicsRelativePositionTask = typing.NewType("DynamicsRelativePositionTask", None)
@@ -63,10 +62,8 @@ ProblemConstraint = typing.NewType("ProblemConstraint", None)
63
62
  PuppetContact = typing.NewType("PuppetContact", None)
64
63
  QPError = typing.NewType("QPError", None)
65
64
  RegularizationTask = typing.NewType("RegularizationTask", None)
66
- Relative6DContact = typing.NewType("Relative6DContact", None)
67
65
  RelativeFrameTask = typing.NewType("RelativeFrameTask", None)
68
66
  RelativeOrientationTask = typing.NewType("RelativeOrientationTask", None)
69
- RelativePointContact = typing.NewType("RelativePointContact", None)
70
67
  RelativePositionTask = typing.NewType("RelativePositionTask", None)
71
68
  RobotWrapper = typing.NewType("RobotWrapper", None)
72
69
  RobotWrapper_State = typing.NewType("RobotWrapper_State", None)
@@ -718,6 +715,19 @@ class CubicSpline:
718
715
  ) -> any:
719
716
  ...
720
717
 
718
+ def acc(
719
+ self: CubicSpline,
720
+ x: float, # double
721
+
722
+ ) -> float:
723
+ """Retrieve acceleration at a given time.
724
+
725
+
726
+ :param t: time
727
+
728
+ :return: acceleration"""
729
+ ...
730
+
721
731
  def add_point(
722
732
  self: CubicSpline,
723
733
  t: float, # double
@@ -786,6 +796,19 @@ class CubicSpline3D:
786
796
  ) -> None:
787
797
  ...
788
798
 
799
+ def acc(
800
+ self: CubicSpline3D,
801
+ t: float, # double
802
+
803
+ ) -> numpy.ndarray:
804
+ """Returns the spline accleeration at time t.
805
+
806
+
807
+ :param t: time
808
+
809
+ :return: acceleration (3D vector)"""
810
+ ...
811
+
789
812
  def add_point(
790
813
  self: CubicSpline3D,
791
814
  t: float, # double
@@ -1002,10 +1025,6 @@ class DynamicsCoMTask:
1002
1025
  :param weight: task weight"""
1003
1026
  ...
1004
1027
 
1005
- critically_damped: bool # bool
1006
- """If this is true, kd will be computed from kp to have a critically damped system.
1007
- """
1008
-
1009
1028
  ddtarget_world: numpy.ndarray # Eigen::Vector3d
1010
1029
  """Target acceleration in the world.
1011
1030
  """
@@ -1023,7 +1042,7 @@ class DynamicsCoMTask:
1023
1042
  """
1024
1043
 
1025
1044
  kd: float # double
1026
- """D gain for position control.
1045
+ """D gain for position control (if negative, will be critically damped)
1027
1046
  """
1028
1047
 
1029
1048
  kp: float # double
@@ -1170,10 +1189,6 @@ class DynamicsGearTask:
1170
1189
  :param weight: task weight"""
1171
1190
  ...
1172
1191
 
1173
- critically_damped: bool # bool
1174
- """If this is true, kd will be computed from kp to have a critically damped system.
1175
- """
1176
-
1177
1192
  derror: numpy.ndarray # Eigen::MatrixXd
1178
1193
  """Current velocity error vector.
1179
1194
  """
@@ -1183,7 +1198,7 @@ class DynamicsGearTask:
1183
1198
  """
1184
1199
 
1185
1200
  kd: float # double
1186
- """D gain for position control.
1201
+ """D gain for position control (if negative, will be critically damped)
1187
1202
  """
1188
1203
 
1189
1204
  kp: float # double
@@ -1248,10 +1263,6 @@ class DynamicsJointsTask:
1248
1263
  :param weight: task weight"""
1249
1264
  ...
1250
1265
 
1251
- critically_damped: bool # bool
1252
- """If this is true, kd will be computed from kp to have a critically damped system.
1253
- """
1254
-
1255
1266
  derror: numpy.ndarray # Eigen::MatrixXd
1256
1267
  """Current velocity error vector.
1257
1268
  """
@@ -1261,7 +1272,7 @@ class DynamicsJointsTask:
1261
1272
  """
1262
1273
 
1263
1274
  kd: float # double
1264
- """D gain for position control.
1275
+ """D gain for position control (if negative, will be critically damped)
1265
1276
  """
1266
1277
 
1267
1278
  kp: float # double
@@ -1349,10 +1360,6 @@ class DynamicsOrientationTask:
1349
1360
  :param weight: task weight"""
1350
1361
  ...
1351
1362
 
1352
- critically_damped: bool # bool
1353
- """If this is true, kd will be computed from kp to have a critically damped system.
1354
- """
1355
-
1356
1363
  derror: numpy.ndarray # Eigen::MatrixXd
1357
1364
  """Current velocity error vector.
1358
1365
  """
@@ -1366,7 +1373,7 @@ class DynamicsOrientationTask:
1366
1373
  """
1367
1374
 
1368
1375
  kd: float # double
1369
- """D gain for position control.
1376
+ """D gain for position control (if negative, will be critically damped)
1370
1377
  """
1371
1378
 
1372
1379
  kp: float # double
@@ -1424,8 +1431,8 @@ class DynamicsPositionTask:
1424
1431
  :param weight: task weight"""
1425
1432
  ...
1426
1433
 
1427
- critically_damped: bool # bool
1428
- """If this is true, kd will be computed from kp to have a critically damped system.
1434
+ ddtarget_world: numpy.ndarray # Eigen::Vector3d
1435
+ """Target acceleration in the world.
1429
1436
  """
1430
1437
 
1431
1438
  derror: numpy.ndarray # Eigen::MatrixXd
@@ -1445,7 +1452,7 @@ class DynamicsPositionTask:
1445
1452
  """
1446
1453
 
1447
1454
  kd: float # double
1448
- """D gain for position control.
1455
+ """D gain for position control (if negative, will be critically damped)
1449
1456
  """
1450
1457
 
1451
1458
  kp: float # double
@@ -1469,45 +1476,6 @@ class DynamicsPositionTask:
1469
1476
  """
1470
1477
 
1471
1478
 
1472
- class DynamicsReactionRatioConstraint:
1473
- def __init__(
1474
- arg1: object,
1475
- arg2: Contact,
1476
- arg3: float,
1477
-
1478
- ) -> None:
1479
- ...
1480
-
1481
- def configure(
1482
- self: DynamicsReactionRatioConstraint,
1483
- name: str, # std::string
1484
- priority: any, # placo::kinematics::ConeConstraint::Priority
1485
- weight: float = 1.0, # double
1486
-
1487
- ) -> None:
1488
- """Configures the object.
1489
-
1490
-
1491
- :param name: task name
1492
-
1493
- :param priority: task priority (hard, soft or scaled)
1494
-
1495
- :param weight: task weight"""
1496
- ...
1497
-
1498
- name: str # std::string
1499
- """Object name.
1500
- """
1501
-
1502
- priority: any # placo::kinematics::ConeConstraint::Priority
1503
- """Object priority.
1504
- """
1505
-
1506
- reaction_ratio: float # double
1507
- """Reaction ratio to be enforced.
1508
- """
1509
-
1510
-
1511
1479
  class DynamicsRelativeFrameTask:
1512
1480
  T_a_b: any
1513
1481
 
@@ -1591,10 +1559,6 @@ class DynamicsRelativeOrientationTask:
1591
1559
  :param weight: task weight"""
1592
1560
  ...
1593
1561
 
1594
- critically_damped: bool # bool
1595
- """If this is true, kd will be computed from kp to have a critically damped system.
1596
- """
1597
-
1598
1562
  derror: numpy.ndarray # Eigen::MatrixXd
1599
1563
  """Current velocity error vector.
1600
1564
  """
@@ -1608,7 +1572,7 @@ class DynamicsRelativeOrientationTask:
1608
1572
  """
1609
1573
 
1610
1574
  kd: float # double
1611
- """D gain for position control.
1575
+ """D gain for position control (if negative, will be critically damped)
1612
1576
  """
1613
1577
 
1614
1578
  kp: float # double
@@ -1667,12 +1631,8 @@ class DynamicsRelativePositionTask:
1667
1631
  :param weight: task weight"""
1668
1632
  ...
1669
1633
 
1670
- critically_damped: bool # bool
1671
- """If this is true, kd will be computed from kp to have a critically damped system.
1672
- """
1673
-
1674
1634
  ddtarget: numpy.ndarray # Eigen::Vector3d
1675
- """Target relative velocity.
1635
+ """Target relative acceleration.
1676
1636
  """
1677
1637
 
1678
1638
  derror: numpy.ndarray # Eigen::MatrixXd
@@ -1688,7 +1648,7 @@ class DynamicsRelativePositionTask:
1688
1648
  """
1689
1649
 
1690
1650
  kd: float # double
1691
- """D gain for position control.
1651
+ """D gain for position control (if negative, will be critically damped)
1692
1652
  """
1693
1653
 
1694
1654
  kp: float # double
@@ -1759,6 +1719,7 @@ class DynamicsSolver:
1759
1719
  def add_external_wrench_contact(
1760
1720
  self: DynamicsSolver,
1761
1721
  frame_name: str, # std::string
1722
+ reference: str = "world", # std::string
1762
1723
 
1763
1724
  ) -> ExternalWrenchContact:
1764
1725
  """Adds an external wrench.
@@ -1766,6 +1727,8 @@ class DynamicsSolver:
1766
1727
 
1767
1728
  :param frame_name: frame
1768
1729
 
1730
+ :param reference: reference frame (world or local)
1731
+
1769
1732
  :return: external wrench contact"""
1770
1733
  ...
1771
1734
 
@@ -1886,35 +1849,6 @@ class DynamicsSolver:
1886
1849
  :return: puppet contact"""
1887
1850
  ...
1888
1851
 
1889
- def add_reaction_ratio_constraint(
1890
- self: DynamicsSolver,
1891
- contact: Contact, # placo::dynamics::Contact
1892
- reaction_ratio: float, # double
1893
-
1894
- ) -> DynamicsReactionRatioConstraint:
1895
- """Adds a constraint enforce reaction ratio.
1896
-
1897
-
1898
- :param contact: contact
1899
-
1900
- :param reaction_ratio: reaction ratio to enforce
1901
-
1902
- :return: reaction ratio constraint"""
1903
- ...
1904
-
1905
- def add_relative_fixed_contact(
1906
- self: DynamicsSolver,
1907
- frame_task: DynamicsRelativeFrameTask, # placo::dynamics::RelativeFrameTask
1908
-
1909
- ) -> Relative6DContact:
1910
- """Adds a relative fixed contact, can be used for fixed closed loops.
1911
-
1912
-
1913
- :param frame_task: the associated relative frame task
1914
-
1915
- :return: relative fixed contact"""
1916
- ...
1917
-
1918
1852
  def add_relative_frame_task(
1919
1853
  self: DynamicsSolver,
1920
1854
  frame_a_name: str, # std::string
@@ -1953,19 +1887,6 @@ class DynamicsSolver:
1953
1887
  :return: relative orientation task"""
1954
1888
  ...
1955
1889
 
1956
- def add_relative_point_contact(
1957
- self: DynamicsSolver,
1958
- position_task: DynamicsRelativePositionTask, # placo::dynamics::RelativePositionTask
1959
-
1960
- ) -> RelativePointContact:
1961
- """Adds a relative point contact, which can be typically used for internal forces like loop-closing.
1962
-
1963
-
1964
- :param position_task: associated relative position task
1965
-
1966
- :return: relative point contact"""
1967
- ...
1968
-
1969
1890
  def add_relative_position_task(
1970
1891
  self: DynamicsSolver,
1971
1892
  frame_a_name: str, # std::string
@@ -2117,10 +2038,6 @@ class DynamicsSolver:
2117
2038
  """Instance of the problem.
2118
2039
  """
2119
2040
 
2120
- qdd_safe: float # double
2121
- """The value of qdd safe.
2122
- """
2123
-
2124
2041
  def remove_constraint(
2125
2042
  self: DynamicsSolver,
2126
2043
  constraint: DynamicsConstraint, # placo::dynamics::Constraint
@@ -2178,6 +2095,34 @@ class DynamicsSolver:
2178
2095
  :param kp:"""
2179
2096
  ...
2180
2097
 
2098
+ def set_qdd_safe(
2099
+ self: DynamicsSolver,
2100
+ joint: str, # std::string
2101
+ qdd: float, # double
2102
+
2103
+ ) -> None:
2104
+ """Sets the "safe" Qdd acceptable for a given joint (used by joint limits)
2105
+
2106
+
2107
+ :param joint:
2108
+
2109
+ :param qdd:"""
2110
+ ...
2111
+
2112
+ def set_torque_limit(
2113
+ self: DynamicsSolver,
2114
+ joint: str, # std::string
2115
+ limit: float, # double
2116
+
2117
+ ) -> None:
2118
+ """Sets the allowed torque limit by the solver for a given joint. This will not affect the robot's model effort limit. When computing the velocity vs torque limit, the robot's model effort will still be used. You can see this limit as a continuous limit allowable for the robot, while the robot's model limit is the maximum possible torque.
2119
+
2120
+
2121
+ :param joint:
2122
+
2123
+ :param limit:"""
2124
+ ...
2125
+
2181
2126
  def solve(
2182
2127
  self: DynamicsSolver,
2183
2128
  integrate: bool = False, # bool
@@ -2186,7 +2131,7 @@ class DynamicsSolver:
2186
2131
  ...
2187
2132
 
2188
2133
  torque_cost: float # double
2189
- """Cost for torque regularization.
2134
+ """Cost for torque regularization (1e-3 by default)
2190
2135
  """
2191
2136
 
2192
2137
 
@@ -2244,10 +2189,6 @@ class DynamicsTask:
2244
2189
  :param weight: task weight"""
2245
2190
  ...
2246
2191
 
2247
- critically_damped: bool # bool
2248
- """If this is true, kd will be computed from kp to have a critically damped system.
2249
- """
2250
-
2251
2192
  derror: numpy.ndarray # Eigen::MatrixXd
2252
2193
  """Current velocity error vector.
2253
2194
  """
@@ -2257,7 +2198,7 @@ class DynamicsTask:
2257
2198
  """
2258
2199
 
2259
2200
  kd: float # double
2260
- """D gain for position control.
2201
+ """D gain for position control (if negative, will be critically damped)
2261
2202
  """
2262
2203
 
2263
2204
  kp: float # double
@@ -2305,10 +2246,6 @@ class DynamicsTorqueTask:
2305
2246
  :param weight: task weight"""
2306
2247
  ...
2307
2248
 
2308
- critically_damped: bool # bool
2309
- """If this is true, kd will be computed from kp to have a critically damped system.
2310
- """
2311
-
2312
2249
  derror: numpy.ndarray # Eigen::MatrixXd
2313
2250
  """Current velocity error vector.
2314
2251
  """
@@ -2318,7 +2255,7 @@ class DynamicsTorqueTask:
2318
2255
  """
2319
2256
 
2320
2257
  kd: float # double
2321
- """D gain for position control.
2258
+ """D gain for position control (if negative, will be critically damped)
2322
2259
  """
2323
2260
 
2324
2261
  kp: float # double
@@ -2530,6 +2467,7 @@ class ExternalWrenchContact:
2530
2467
  def __init__(
2531
2468
  self: ExternalWrenchContact,
2532
2469
  frame_index: any, # pinocchio::FrameIndex
2470
+ reference: any, # pinocchio::ReferenceFrame
2533
2471
 
2534
2472
  ) -> any:
2535
2473
  """see DynamicsSolver::add_external_wrench_contact"""
@@ -3227,6 +3165,14 @@ class HumanoidRobot:
3227
3165
  ) -> any:
3228
3166
  ...
3229
3167
 
3168
+ def add_q_noise(
3169
+ self: HumanoidRobot,
3170
+ noise: float, # double
3171
+
3172
+ ) -> None:
3173
+ """Adds some noise to the configuration."""
3174
+ ...
3175
+
3230
3176
  def centroidal_map(
3231
3177
  self: HumanoidRobot,
3232
3178
 
@@ -4428,17 +4374,6 @@ class KinematicsSolver:
4428
4374
  :return: position task"""
4429
4375
  ...
4430
4376
 
4431
- def add_q_noise(
4432
- self: KinematicsSolver,
4433
- noise: float = 1e-5, # double
4434
-
4435
- ) -> None:
4436
- """Adds some noise on the configuration of the robot (q)
4437
-
4438
-
4439
- :param noise: noise level, expressed in ratio of the joint limits"""
4440
- ...
4441
-
4442
4377
  def add_regularization_task(
4443
4378
  self: KinematicsSolver,
4444
4379
  magnitude: float = 1e-6, # double
@@ -5033,6 +4968,10 @@ class OrientationTask:
5033
4968
 
5034
4969
 
5035
4970
  class PointContact:
4971
+ R_world_surface: numpy.ndarray # Eigen::Matrix3d
4972
+ """rotation matrix expressing the surface frame in the world frame (for unilateral contact)
4973
+ """
4974
+
5036
4975
  def __init__(
5037
4976
  self: PointContact,
5038
4977
  position_task: DynamicsPositionTask, # placo::dynamics::PositionTask
@@ -5491,36 +5430,6 @@ class RegularizationTask:
5491
5430
  ...
5492
5431
 
5493
5432
 
5494
- class Relative6DContact:
5495
- def __init__(
5496
- self: Relative6DContact,
5497
- frame_task: DynamicsRelativeFrameTask, # placo::dynamics::RelativeFrameTask
5498
-
5499
- ) -> any:
5500
- """see DynamicsSolver::add_relative_fixed_contact"""
5501
- ...
5502
-
5503
- active: bool # bool
5504
- """true if the contact is active (ignored by the solver else, this allow to enable/disable a contact without removing it from the solver)
5505
- """
5506
-
5507
- mu: float # double
5508
- """Coefficient of friction (if relevant)
5509
- """
5510
-
5511
- weight_forces: float # double
5512
- """Weight of forces for the optimization (if relevant)
5513
- """
5514
-
5515
- weight_moments: float # double
5516
- """Weight of moments for optimization (if relevant)
5517
- """
5518
-
5519
- wrench: numpy.ndarray # Eigen::VectorXd
5520
- """Wrench populated after the DynamicsSolver::solve call.
5521
- """
5522
-
5523
-
5524
5433
  class RelativeFrameTask:
5525
5434
  T_a_b: any
5526
5435
 
@@ -5656,36 +5565,6 @@ class RelativeOrientationTask:
5656
5565
  ...
5657
5566
 
5658
5567
 
5659
- class RelativePointContact:
5660
- def __init__(
5661
- self: RelativePointContact,
5662
- position_task: DynamicsRelativePositionTask, # placo::dynamics::RelativePositionTask
5663
-
5664
- ) -> any:
5665
- """see DynamicsSolver::add_relative_point_contact"""
5666
- ...
5667
-
5668
- active: bool # bool
5669
- """true if the contact is active (ignored by the solver else, this allow to enable/disable a contact without removing it from the solver)
5670
- """
5671
-
5672
- mu: float # double
5673
- """Coefficient of friction (if relevant)
5674
- """
5675
-
5676
- weight_forces: float # double
5677
- """Weight of forces for the optimization (if relevant)
5678
- """
5679
-
5680
- weight_moments: float # double
5681
- """Weight of moments for optimization (if relevant)
5682
- """
5683
-
5684
- wrench: numpy.ndarray # Eigen::VectorXd
5685
- """Wrench populated after the DynamicsSolver::solve call.
5686
- """
5687
-
5688
-
5689
5568
  class RelativePositionTask:
5690
5569
  A: numpy.ndarray # Eigen::MatrixXd
5691
5570
  """Matrix A in the task Ax = b, where x are the joint delta positions.
@@ -5794,6 +5673,14 @@ class RobotWrapper:
5794
5673
  :param urdf_content: if it is not empty, it will be used as the URDF content instead of loading it from the file"""
5795
5674
  ...
5796
5675
 
5676
+ def add_q_noise(
5677
+ self: RobotWrapper,
5678
+ noise: float, # double
5679
+
5680
+ ) -> None:
5681
+ """Adds some noise to the configuration."""
5682
+ ...
5683
+
5797
5684
  def centroidal_map(
5798
5685
  self: RobotWrapper,
5799
5686
 
@@ -7169,12 +7056,6 @@ def frame_yaw(
7169
7056
  ...
7170
7057
 
7171
7058
 
7172
- def getNumpyType(
7173
-
7174
- ) -> any:
7175
- ...
7176
-
7177
-
7178
7059
  def get_classes_registry(
7179
7060
 
7180
7061
  ) -> any:
@@ -7233,7 +7114,7 @@ def optimal_transformation(
7233
7114
  points_in_B: numpy.ndarray, # Eigen::MatrixXd
7234
7115
 
7235
7116
  ) -> numpy.ndarray:
7236
- """Finds the optimal transformation T_a_b that minimizes the sum of squared distances between the (same) points in A and T_a_b * points in B Points are stacked in lines (columns are x, y and z) in the matrices."""
7117
+ """Finds the optimal transformation T_a_b that minimizes the sum of squared distances between the (same) points with coordinates expressed in A and B. Points are stacked in lines (columns are x, y and z) in the matrices."""
7237
7118
  ...
7238
7119
 
7239
7120
 
@@ -7260,13 +7141,6 @@ def seed(
7260
7141
  ...
7261
7142
 
7262
7143
 
7263
- def setNumpyType(
7264
- numpy_type: object,
7265
-
7266
- ) -> None:
7267
- ...
7268
-
7269
-
7270
7144
  def sharedMemory(
7271
7145
  value: bool,
7272
7146
 
@@ -7274,18 +7148,6 @@ def sharedMemory(
7274
7148
  ...
7275
7149
 
7276
7150
 
7277
- def switchToNumpyArray(
7278
-
7279
- ) -> any:
7280
- ...
7281
-
7282
-
7283
- def switchToNumpyMatrix(
7284
-
7285
- ) -> any:
7286
- ...
7287
-
7288
-
7289
7151
  class vector_Collision:
7290
7152
  def __init__(
7291
7153
  arg1: object,
@@ -7470,4 +7332,4 @@ def wrap_angle(
7470
7332
  ...
7471
7333
 
7472
7334
 
7473
- __groups__ = {'placo::dynamics': ['AvoidSelfCollisionsDynamicsConstraint', 'Contact', 'Contact6D', 'DynamicsCoMTask', 'DynamicsConstraint', 'DynamicsFrameTask', 'DynamicsGearTask', 'DynamicsJointsTask', 'DynamicsOrientationTask', 'DynamicsPositionTask', 'DynamicsReactionRatioConstraint', 'DynamicsRelativeFrameTask', 'DynamicsRelativeOrientationTask', 'DynamicsRelativePositionTask', 'DynamicsSolver', 'DynamicsSolverResult', 'DynamicsTask', 'DynamicsTorqueTask', 'ExternalWrenchContact', 'PointContact', 'PuppetContact', 'Relative6DContact', 'RelativePointContact', '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']}
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']}
@@ -0,0 +1,37 @@
1
+ import argparse
2
+ import placo
3
+ import time
4
+ from placo_utils.visualization import *
5
+
6
+ arg_parser = argparse.ArgumentParser()
7
+ arg_parser.add_argument("path", help="Path to the URDF")
8
+ arg_parser.add_argument("--frames", help="Frame to display", nargs="+")
9
+ arg_parser.add_argument("--animate", help="Animate the robot", action="store_true")
10
+ args = arg_parser.parse_args()
11
+
12
+ robot = placo.RobotWrapper(args.path, placo.Flags.ignore_collisions)
13
+ robot.update_kinematics()
14
+
15
+ print("Joint names:")
16
+ print(list(robot.joint_names()))
17
+
18
+ print("Frame names:")
19
+ print(list(robot.frame_names()))
20
+
21
+ viz = robot_viz(robot)
22
+ t = 0
23
+
24
+ while True:
25
+ viz.display(robot.state.q)
26
+
27
+ if args.frames:
28
+ for frame in args.frames:
29
+ robot_frame_viz(robot, frame)
30
+
31
+ if args.animate:
32
+ for joint in robot.joint_names():
33
+ robot.set_joint(joint, np.sin(t))
34
+ robot.update_kinematics()
35
+
36
+ t += 0.01
37
+ time.sleep(0.01)
@@ -238,7 +238,12 @@ def contacts_viz(solver: placo.DynamicsSolver, ratio=0.1, radius=0.005):
238
238
  frame_name = frames[contact.position_task().frame_index]
239
239
  T_world_frame = robot.get_T_world_frame(frame_name)
240
240
  wrench = T_world_frame[:3, :3] @ contact.wrench[:3]
241
- origin = T_world_frame[:3, 3] + T_world_frame[:3, :3] @ contact.zmp()
241
+
242
+ if np.linalg.norm(wrench) < 1e-6:
243
+ origin = T_world_frame[:3, 3]
244
+ else:
245
+ origin = T_world_frame[:3, 3] + T_world_frame[:3, :3] @ contact.zmp()
246
+
242
247
  arrow_viz(
243
248
  f"contact_{k}",
244
249
  origin,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: placo
3
- Version: 0.5.6
3
+ Version: 0.5.9
4
4
  Summary: PlaCo: Rhoban Planning and Control
5
5
  Requires-Python: >= 3.8
6
6
  License-Expression: MIT
@@ -0,0 +1,15 @@
1
+ cmeel.prefix/lib/liblibplaco.so,sha256=WWlXmXnUsCLqaf6U3l-sshqLSDTUQhif2YLhVzArT6M,2610192
2
+ cmeel.prefix/lib/python3.10/site-packages/placo.pyi,sha256=P04z_rb8U1RALIkaH-Woy9o_-hRWMXi63T4udnIAcKk,152347
3
+ cmeel.prefix/lib/python3.10/site-packages/placo.so,sha256=bTI_xH7yermgFU59QPhKHV4B18XVib9wa4pTgW3ifDw,7502000
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=1qoD-9wa7t-A3gCI54UJcKJfEQs9wmgeHe29J__H4Ao,7568
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=cRGElId-CuT5RIhbvnUArQV34lmiSNbpF0FbpvgAqis,6543
11
+ placo-0.5.9.dist-info/license/LICENSE,sha256=q2bBXvk4Eh7TmP11LoIOIGSUuJbR30JBI6ZZ37g52T4,1061
12
+ placo-0.5.9.dist-info/METADATA,sha256=DBZEU9k-p_sKts--vczx6MGjuV1DpmxFHGo0O7-CRiE,875
13
+ placo-0.5.9.dist-info/WHEEL,sha256=y7GzdFHC0qrZwnE2SqFjrXxL9NLtXflO9hVb0PhWwIU,115
14
+ placo-0.5.9.dist-info/top_level.txt,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
+ placo-0.5.9.dist-info/RECORD,,
@@ -1,14 +0,0 @@
1
- cmeel.prefix/lib/liblibplaco.so,sha256=fzs8u8zYuPud3Rxb0XtDoxebFfbmp-LVKWgk8WMzA14,2625456
2
- cmeel.prefix/lib/python3.10/site-packages/placo.pyi,sha256=O4XUe9BdLlLOwYqP8E8UHR5dX6RUYBHX3npfRdHir9A,155599
3
- cmeel.prefix/lib/python3.10/site-packages/placo.so,sha256=OWgoySsIDEx0L4KC1M5fHYRH9inaBcDKBDQGSyV_0-M,7598744
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/visualization.py,sha256=EOXNjYKiOSE2F4vbEXoFJ4UBbGBUvC5v4ANjYL3IUVo,7440
7
- cmeel.prefix/lib/python3.10/site-packages/placo_utils/__pycache__/__init__.cpython-310.pyc,sha256=tJrTajdA7hNO9tZkE1oN49rU-61lCNUED-mQXdAvzAs,261
8
- cmeel.prefix/lib/python3.10/site-packages/placo_utils/__pycache__/tf.cpython-310.pyc,sha256=APWQ5-zKgbEcMnkv6Hxgj_Q46jpnuOyL9YbSrj6Z5Vw,204
9
- cmeel.prefix/lib/python3.10/site-packages/placo_utils/__pycache__/visualization.cpython-310.pyc,sha256=csu-iQsBSz2cD40662EShITueJ9_KY5jhSLqDlItRew,6485
10
- placo-0.5.6.dist-info/license/LICENSE,sha256=q2bBXvk4Eh7TmP11LoIOIGSUuJbR30JBI6ZZ37g52T4,1061
11
- placo-0.5.6.dist-info/METADATA,sha256=mals_hZHHdNB65FpfsA0WysvcpcChih7nmDj7IidE64,875
12
- placo-0.5.6.dist-info/WHEEL,sha256=y7GzdFHC0qrZwnE2SqFjrXxL9NLtXflO9hVb0PhWwIU,115
13
- placo-0.5.6.dist-info/top_level.txt,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- placo-0.5.6.dist-info/RECORD,,
File without changes