placo 0.5.6__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 +302 -238
- 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/view.py +37 -0
- cmeel.prefix/lib/python3.10/site-packages/placo_utils/visualization.py +23 -1
- placo-0.6.0.dist-info/METADATA +57 -0
- placo-0.6.0.dist-info/RECORD +15 -0
- placo-0.5.6.dist-info/METADATA +0 -26
- placo-0.5.6.dist-info/RECORD +0 -14
- {placo-0.5.6.dist-info → placo-0.6.0.dist-info}/WHEEL +0 -0
- {placo-0.5.6.dist-info → placo-0.6.0.dist-info}/license/LICENSE +0 -0
- {placo-0.5.6.dist-info → placo-0.6.0.dist-info}/top_level.txt +0 -0
cmeel.prefix/lib/liblibplaco.so
CHANGED
|
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)
|
|
@@ -52,6 +51,7 @@ KinematicsSolver = typing.NewType("KinematicsSolver", None)
|
|
|
52
51
|
KineticEnergyRegularizationTask = typing.NewType("KineticEnergyRegularizationTask", None)
|
|
53
52
|
LIPM = typing.NewType("LIPM", None)
|
|
54
53
|
LIPMTrajectory = typing.NewType("LIPMTrajectory", None)
|
|
54
|
+
LineContact = typing.NewType("LineContact", None)
|
|
55
55
|
ManipulabilityTask = typing.NewType("ManipulabilityTask", None)
|
|
56
56
|
OrientationTask = typing.NewType("OrientationTask", None)
|
|
57
57
|
PointContact = typing.NewType("PointContact", None)
|
|
@@ -63,10 +63,8 @@ ProblemConstraint = typing.NewType("ProblemConstraint", None)
|
|
|
63
63
|
PuppetContact = typing.NewType("PuppetContact", None)
|
|
64
64
|
QPError = typing.NewType("QPError", None)
|
|
65
65
|
RegularizationTask = typing.NewType("RegularizationTask", None)
|
|
66
|
-
Relative6DContact = typing.NewType("Relative6DContact", None)
|
|
67
66
|
RelativeFrameTask = typing.NewType("RelativeFrameTask", None)
|
|
68
67
|
RelativeOrientationTask = typing.NewType("RelativeOrientationTask", None)
|
|
69
|
-
RelativePointContact = typing.NewType("RelativePointContact", None)
|
|
70
68
|
RelativePositionTask = typing.NewType("RelativePositionTask", None)
|
|
71
69
|
RobotWrapper = typing.NewType("RobotWrapper", None)
|
|
72
70
|
RobotWrapper_State = typing.NewType("RobotWrapper_State", None)
|
|
@@ -638,6 +636,10 @@ class Contact:
|
|
|
638
636
|
"""Weight of moments for optimization (if relevant)
|
|
639
637
|
"""
|
|
640
638
|
|
|
639
|
+
weight_tangentials: float # double
|
|
640
|
+
"""Extra cost for tangential forces.
|
|
641
|
+
"""
|
|
642
|
+
|
|
641
643
|
wrench: numpy.ndarray # Eigen::VectorXd
|
|
642
644
|
"""Wrench populated after the DynamicsSolver::solve call.
|
|
643
645
|
"""
|
|
@@ -691,6 +693,10 @@ class Contact6D:
|
|
|
691
693
|
"""Weight of moments for optimization (if relevant)
|
|
692
694
|
"""
|
|
693
695
|
|
|
696
|
+
weight_tangentials: float # double
|
|
697
|
+
"""Extra cost for tangential forces.
|
|
698
|
+
"""
|
|
699
|
+
|
|
694
700
|
width: float # double
|
|
695
701
|
"""Rectangular contact width along local y-axis.
|
|
696
702
|
"""
|
|
@@ -718,6 +724,19 @@ class CubicSpline:
|
|
|
718
724
|
) -> any:
|
|
719
725
|
...
|
|
720
726
|
|
|
727
|
+
def acc(
|
|
728
|
+
self: CubicSpline,
|
|
729
|
+
x: float, # double
|
|
730
|
+
|
|
731
|
+
) -> float:
|
|
732
|
+
"""Retrieve acceleration at a given time.
|
|
733
|
+
|
|
734
|
+
|
|
735
|
+
:param t: time
|
|
736
|
+
|
|
737
|
+
:return: acceleration"""
|
|
738
|
+
...
|
|
739
|
+
|
|
721
740
|
def add_point(
|
|
722
741
|
self: CubicSpline,
|
|
723
742
|
t: float, # double
|
|
@@ -786,6 +805,19 @@ class CubicSpline3D:
|
|
|
786
805
|
) -> None:
|
|
787
806
|
...
|
|
788
807
|
|
|
808
|
+
def acc(
|
|
809
|
+
self: CubicSpline3D,
|
|
810
|
+
t: float, # double
|
|
811
|
+
|
|
812
|
+
) -> numpy.ndarray:
|
|
813
|
+
"""Returns the spline accleeration at time t.
|
|
814
|
+
|
|
815
|
+
|
|
816
|
+
:param t: time
|
|
817
|
+
|
|
818
|
+
:return: acceleration (3D vector)"""
|
|
819
|
+
...
|
|
820
|
+
|
|
789
821
|
def add_point(
|
|
790
822
|
self: CubicSpline3D,
|
|
791
823
|
t: float, # double
|
|
@@ -1002,10 +1034,6 @@ class DynamicsCoMTask:
|
|
|
1002
1034
|
:param weight: task weight"""
|
|
1003
1035
|
...
|
|
1004
1036
|
|
|
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
1037
|
ddtarget_world: numpy.ndarray # Eigen::Vector3d
|
|
1010
1038
|
"""Target acceleration in the world.
|
|
1011
1039
|
"""
|
|
@@ -1023,7 +1051,7 @@ class DynamicsCoMTask:
|
|
|
1023
1051
|
"""
|
|
1024
1052
|
|
|
1025
1053
|
kd: float # double
|
|
1026
|
-
"""D gain for position control
|
|
1054
|
+
"""D gain for position control (if negative, will be critically damped)
|
|
1027
1055
|
"""
|
|
1028
1056
|
|
|
1029
1057
|
kp: float # double
|
|
@@ -1170,10 +1198,6 @@ class DynamicsGearTask:
|
|
|
1170
1198
|
:param weight: task weight"""
|
|
1171
1199
|
...
|
|
1172
1200
|
|
|
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
1201
|
derror: numpy.ndarray # Eigen::MatrixXd
|
|
1178
1202
|
"""Current velocity error vector.
|
|
1179
1203
|
"""
|
|
@@ -1183,7 +1207,7 @@ class DynamicsGearTask:
|
|
|
1183
1207
|
"""
|
|
1184
1208
|
|
|
1185
1209
|
kd: float # double
|
|
1186
|
-
"""D gain for position control
|
|
1210
|
+
"""D gain for position control (if negative, will be critically damped)
|
|
1187
1211
|
"""
|
|
1188
1212
|
|
|
1189
1213
|
kp: float # double
|
|
@@ -1248,10 +1272,6 @@ class DynamicsJointsTask:
|
|
|
1248
1272
|
:param weight: task weight"""
|
|
1249
1273
|
...
|
|
1250
1274
|
|
|
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
1275
|
derror: numpy.ndarray # Eigen::MatrixXd
|
|
1256
1276
|
"""Current velocity error vector.
|
|
1257
1277
|
"""
|
|
@@ -1260,8 +1280,21 @@ class DynamicsJointsTask:
|
|
|
1260
1280
|
"""Current error vector.
|
|
1261
1281
|
"""
|
|
1262
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
|
+
|
|
1263
1296
|
kd: float # double
|
|
1264
|
-
"""D gain for position control
|
|
1297
|
+
"""D gain for position control (if negative, will be critically damped)
|
|
1265
1298
|
"""
|
|
1266
1299
|
|
|
1267
1300
|
kp: float # double
|
|
@@ -1349,10 +1382,6 @@ class DynamicsOrientationTask:
|
|
|
1349
1382
|
:param weight: task weight"""
|
|
1350
1383
|
...
|
|
1351
1384
|
|
|
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
1385
|
derror: numpy.ndarray # Eigen::MatrixXd
|
|
1357
1386
|
"""Current velocity error vector.
|
|
1358
1387
|
"""
|
|
@@ -1366,7 +1395,7 @@ class DynamicsOrientationTask:
|
|
|
1366
1395
|
"""
|
|
1367
1396
|
|
|
1368
1397
|
kd: float # double
|
|
1369
|
-
"""D gain for position control
|
|
1398
|
+
"""D gain for position control (if negative, will be critically damped)
|
|
1370
1399
|
"""
|
|
1371
1400
|
|
|
1372
1401
|
kp: float # double
|
|
@@ -1424,8 +1453,8 @@ class DynamicsPositionTask:
|
|
|
1424
1453
|
:param weight: task weight"""
|
|
1425
1454
|
...
|
|
1426
1455
|
|
|
1427
|
-
|
|
1428
|
-
"""
|
|
1456
|
+
ddtarget_world: numpy.ndarray # Eigen::Vector3d
|
|
1457
|
+
"""Target acceleration in the world.
|
|
1429
1458
|
"""
|
|
1430
1459
|
|
|
1431
1460
|
derror: numpy.ndarray # Eigen::MatrixXd
|
|
@@ -1445,7 +1474,7 @@ class DynamicsPositionTask:
|
|
|
1445
1474
|
"""
|
|
1446
1475
|
|
|
1447
1476
|
kd: float # double
|
|
1448
|
-
"""D gain for position control
|
|
1477
|
+
"""D gain for position control (if negative, will be critically damped)
|
|
1449
1478
|
"""
|
|
1450
1479
|
|
|
1451
1480
|
kp: float # double
|
|
@@ -1469,45 +1498,6 @@ class DynamicsPositionTask:
|
|
|
1469
1498
|
"""
|
|
1470
1499
|
|
|
1471
1500
|
|
|
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
1501
|
class DynamicsRelativeFrameTask:
|
|
1512
1502
|
T_a_b: any
|
|
1513
1503
|
|
|
@@ -1591,10 +1581,6 @@ class DynamicsRelativeOrientationTask:
|
|
|
1591
1581
|
:param weight: task weight"""
|
|
1592
1582
|
...
|
|
1593
1583
|
|
|
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
1584
|
derror: numpy.ndarray # Eigen::MatrixXd
|
|
1599
1585
|
"""Current velocity error vector.
|
|
1600
1586
|
"""
|
|
@@ -1608,7 +1594,7 @@ class DynamicsRelativeOrientationTask:
|
|
|
1608
1594
|
"""
|
|
1609
1595
|
|
|
1610
1596
|
kd: float # double
|
|
1611
|
-
"""D gain for position control
|
|
1597
|
+
"""D gain for position control (if negative, will be critically damped)
|
|
1612
1598
|
"""
|
|
1613
1599
|
|
|
1614
1600
|
kp: float # double
|
|
@@ -1667,12 +1653,8 @@ class DynamicsRelativePositionTask:
|
|
|
1667
1653
|
:param weight: task weight"""
|
|
1668
1654
|
...
|
|
1669
1655
|
|
|
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
1656
|
ddtarget: numpy.ndarray # Eigen::Vector3d
|
|
1675
|
-
"""Target relative
|
|
1657
|
+
"""Target relative acceleration.
|
|
1676
1658
|
"""
|
|
1677
1659
|
|
|
1678
1660
|
derror: numpy.ndarray # Eigen::MatrixXd
|
|
@@ -1688,7 +1670,7 @@ class DynamicsRelativePositionTask:
|
|
|
1688
1670
|
"""
|
|
1689
1671
|
|
|
1690
1672
|
kd: float # double
|
|
1691
|
-
"""D gain for position control
|
|
1673
|
+
"""D gain for position control (if negative, will be critically damped)
|
|
1692
1674
|
"""
|
|
1693
1675
|
|
|
1694
1676
|
kp: float # double
|
|
@@ -1759,6 +1741,7 @@ class DynamicsSolver:
|
|
|
1759
1741
|
def add_external_wrench_contact(
|
|
1760
1742
|
self: DynamicsSolver,
|
|
1761
1743
|
frame_name: str, # std::string
|
|
1744
|
+
reference: str = "world", # std::string
|
|
1762
1745
|
|
|
1763
1746
|
) -> ExternalWrenchContact:
|
|
1764
1747
|
"""Adds an external wrench.
|
|
@@ -1766,6 +1749,8 @@ class DynamicsSolver:
|
|
|
1766
1749
|
|
|
1767
1750
|
:param frame_name: frame
|
|
1768
1751
|
|
|
1752
|
+
:param reference: reference frame (world or local)
|
|
1753
|
+
|
|
1769
1754
|
:return: external wrench contact"""
|
|
1770
1755
|
...
|
|
1771
1756
|
|
|
@@ -1818,6 +1803,19 @@ class DynamicsSolver:
|
|
|
1818
1803
|
:return: joints task"""
|
|
1819
1804
|
...
|
|
1820
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
|
+
|
|
1821
1819
|
def add_orientation_task(
|
|
1822
1820
|
self: DynamicsSolver,
|
|
1823
1821
|
frame_name: str, # std::string
|
|
@@ -1886,35 +1884,6 @@ class DynamicsSolver:
|
|
|
1886
1884
|
:return: puppet contact"""
|
|
1887
1885
|
...
|
|
1888
1886
|
|
|
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
1887
|
def add_relative_frame_task(
|
|
1919
1888
|
self: DynamicsSolver,
|
|
1920
1889
|
frame_a_name: str, # std::string
|
|
@@ -1953,19 +1922,6 @@ class DynamicsSolver:
|
|
|
1953
1922
|
:return: relative orientation task"""
|
|
1954
1923
|
...
|
|
1955
1924
|
|
|
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
1925
|
def add_relative_position_task(
|
|
1970
1926
|
self: DynamicsSolver,
|
|
1971
1927
|
frame_a_name: str, # std::string
|
|
@@ -2021,6 +1977,19 @@ class DynamicsSolver:
|
|
|
2021
1977
|
:return: torque task"""
|
|
2022
1978
|
...
|
|
2023
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
|
+
|
|
2024
1993
|
def add_unilateral_point_contact(
|
|
2025
1994
|
self: DynamicsSolver,
|
|
2026
1995
|
position_task: DynamicsPositionTask, # placo::dynamics::PositionTask
|
|
@@ -2117,10 +2086,6 @@ class DynamicsSolver:
|
|
|
2117
2086
|
"""Instance of the problem.
|
|
2118
2087
|
"""
|
|
2119
2088
|
|
|
2120
|
-
qdd_safe: float # double
|
|
2121
|
-
"""The value of qdd safe.
|
|
2122
|
-
"""
|
|
2123
|
-
|
|
2124
2089
|
def remove_constraint(
|
|
2125
2090
|
self: DynamicsSolver,
|
|
2126
2091
|
constraint: DynamicsConstraint, # placo::dynamics::Constraint
|
|
@@ -2178,6 +2143,34 @@ class DynamicsSolver:
|
|
|
2178
2143
|
:param kp:"""
|
|
2179
2144
|
...
|
|
2180
2145
|
|
|
2146
|
+
def set_qdd_safe(
|
|
2147
|
+
self: DynamicsSolver,
|
|
2148
|
+
joint: str, # std::string
|
|
2149
|
+
qdd: float, # double
|
|
2150
|
+
|
|
2151
|
+
) -> None:
|
|
2152
|
+
"""Sets the "safe" Qdd acceptable for a given joint (used by joint limits)
|
|
2153
|
+
|
|
2154
|
+
|
|
2155
|
+
:param joint:
|
|
2156
|
+
|
|
2157
|
+
:param qdd:"""
|
|
2158
|
+
...
|
|
2159
|
+
|
|
2160
|
+
def set_torque_limit(
|
|
2161
|
+
self: DynamicsSolver,
|
|
2162
|
+
joint: str, # std::string
|
|
2163
|
+
limit: float, # double
|
|
2164
|
+
|
|
2165
|
+
) -> None:
|
|
2166
|
+
"""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.
|
|
2167
|
+
|
|
2168
|
+
|
|
2169
|
+
:param joint:
|
|
2170
|
+
|
|
2171
|
+
:param limit:"""
|
|
2172
|
+
...
|
|
2173
|
+
|
|
2181
2174
|
def solve(
|
|
2182
2175
|
self: DynamicsSolver,
|
|
2183
2176
|
integrate: bool = False, # bool
|
|
@@ -2186,7 +2179,7 @@ class DynamicsSolver:
|
|
|
2186
2179
|
...
|
|
2187
2180
|
|
|
2188
2181
|
torque_cost: float # double
|
|
2189
|
-
"""Cost for torque regularization
|
|
2182
|
+
"""Cost for torque regularization (1e-3 by default)
|
|
2190
2183
|
"""
|
|
2191
2184
|
|
|
2192
2185
|
|
|
@@ -2244,10 +2237,6 @@ class DynamicsTask:
|
|
|
2244
2237
|
:param weight: task weight"""
|
|
2245
2238
|
...
|
|
2246
2239
|
|
|
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
2240
|
derror: numpy.ndarray # Eigen::MatrixXd
|
|
2252
2241
|
"""Current velocity error vector.
|
|
2253
2242
|
"""
|
|
@@ -2257,7 +2246,7 @@ class DynamicsTask:
|
|
|
2257
2246
|
"""
|
|
2258
2247
|
|
|
2259
2248
|
kd: float # double
|
|
2260
|
-
"""D gain for position control
|
|
2249
|
+
"""D gain for position control (if negative, will be critically damped)
|
|
2261
2250
|
"""
|
|
2262
2251
|
|
|
2263
2252
|
kp: float # double
|
|
@@ -2305,10 +2294,6 @@ class DynamicsTorqueTask:
|
|
|
2305
2294
|
:param weight: task weight"""
|
|
2306
2295
|
...
|
|
2307
2296
|
|
|
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
2297
|
derror: numpy.ndarray # Eigen::MatrixXd
|
|
2313
2298
|
"""Current velocity error vector.
|
|
2314
2299
|
"""
|
|
@@ -2318,7 +2303,7 @@ class DynamicsTorqueTask:
|
|
|
2318
2303
|
"""
|
|
2319
2304
|
|
|
2320
2305
|
kd: float # double
|
|
2321
|
-
"""D gain for position control
|
|
2306
|
+
"""D gain for position control (if negative, will be critically damped)
|
|
2322
2307
|
"""
|
|
2323
2308
|
|
|
2324
2309
|
kp: float # double
|
|
@@ -2430,6 +2415,16 @@ class Expression:
|
|
|
2430
2415
|
:return: expression"""
|
|
2431
2416
|
...
|
|
2432
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
|
+
|
|
2433
2428
|
def is_scalar(
|
|
2434
2429
|
self: Expression,
|
|
2435
2430
|
|
|
@@ -2440,26 +2435,26 @@ class Expression:
|
|
|
2440
2435
|
:return: true if the expression is a scalar"""
|
|
2441
2436
|
...
|
|
2442
2437
|
|
|
2443
|
-
def
|
|
2438
|
+
def left_multiply(
|
|
2444
2439
|
self: Expression,
|
|
2440
|
+
M: numpy.ndarray, # const Eigen::MatrixXd
|
|
2445
2441
|
|
|
2446
2442
|
) -> Expression:
|
|
2447
|
-
"""
|
|
2443
|
+
"""Multiply an expression on the left by a given matrix M.
|
|
2448
2444
|
|
|
2449
2445
|
|
|
2446
|
+
:param M: matrix
|
|
2447
|
+
|
|
2450
2448
|
:return: expression"""
|
|
2451
2449
|
...
|
|
2452
2450
|
|
|
2453
|
-
def
|
|
2451
|
+
def mean(
|
|
2454
2452
|
self: Expression,
|
|
2455
|
-
M: numpy.ndarray, # const Eigen::MatrixXd
|
|
2456
2453
|
|
|
2457
2454
|
) -> Expression:
|
|
2458
|
-
"""
|
|
2455
|
+
"""Reduces a multi-rows expression to the mean of its items.
|
|
2459
2456
|
|
|
2460
2457
|
|
|
2461
|
-
:param M: matrix
|
|
2462
|
-
|
|
2463
2458
|
:return: expression"""
|
|
2464
2459
|
...
|
|
2465
2460
|
|
|
@@ -2530,6 +2525,7 @@ class ExternalWrenchContact:
|
|
|
2530
2525
|
def __init__(
|
|
2531
2526
|
self: ExternalWrenchContact,
|
|
2532
2527
|
frame_index: any, # pinocchio::FrameIndex
|
|
2528
|
+
reference: any, # pinocchio::ReferenceFrame
|
|
2533
2529
|
|
|
2534
2530
|
) -> any:
|
|
2535
2531
|
"""see DynamicsSolver::add_external_wrench_contact"""
|
|
@@ -2555,6 +2551,10 @@ class ExternalWrenchContact:
|
|
|
2555
2551
|
"""Weight of moments for optimization (if relevant)
|
|
2556
2552
|
"""
|
|
2557
2553
|
|
|
2554
|
+
weight_tangentials: float # double
|
|
2555
|
+
"""Extra cost for tangential forces.
|
|
2556
|
+
"""
|
|
2557
|
+
|
|
2558
2558
|
wrench: numpy.ndarray # Eigen::VectorXd
|
|
2559
2559
|
"""Wrench populated after the DynamicsSolver::solve call.
|
|
2560
2560
|
"""
|
|
@@ -3227,6 +3227,14 @@ class HumanoidRobot:
|
|
|
3227
3227
|
) -> any:
|
|
3228
3228
|
...
|
|
3229
3229
|
|
|
3230
|
+
def add_q_noise(
|
|
3231
|
+
self: HumanoidRobot,
|
|
3232
|
+
noise: float, # double
|
|
3233
|
+
|
|
3234
|
+
) -> None:
|
|
3235
|
+
"""Adds some noise to the configuration."""
|
|
3236
|
+
...
|
|
3237
|
+
|
|
3230
3238
|
def centroidal_map(
|
|
3231
3239
|
self: HumanoidRobot,
|
|
3232
3240
|
|
|
@@ -3676,6 +3684,15 @@ class HumanoidRobot:
|
|
|
3676
3684
|
:param T_world_frameTarget: transformation matrix"""
|
|
3677
3685
|
...
|
|
3678
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
|
+
|
|
3679
3696
|
def set_gravity(
|
|
3680
3697
|
self: HumanoidRobot,
|
|
3681
3698
|
gravity: numpy.ndarray, # Eigen::Vector3d
|
|
@@ -3743,6 +3760,15 @@ class HumanoidRobot:
|
|
|
3743
3760
|
:param value: joint velocity"""
|
|
3744
3761
|
...
|
|
3745
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
|
+
|
|
3746
3772
|
def set_torque_limit(
|
|
3747
3773
|
self: HumanoidRobot,
|
|
3748
3774
|
name: str, # const std::string &
|
|
@@ -4129,6 +4155,19 @@ class JointsTask:
|
|
|
4129
4155
|
:return: task error norm"""
|
|
4130
4156
|
...
|
|
4131
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
|
+
|
|
4132
4171
|
name: str # std::string
|
|
4133
4172
|
"""Object name.
|
|
4134
4173
|
"""
|
|
@@ -4428,17 +4467,6 @@ class KinematicsSolver:
|
|
|
4428
4467
|
:return: position task"""
|
|
4429
4468
|
...
|
|
4430
4469
|
|
|
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
4470
|
def add_regularization_task(
|
|
4443
4471
|
self: KinematicsSolver,
|
|
4444
4472
|
magnitude: float = 1e-6, # double
|
|
@@ -4868,6 +4896,77 @@ class LIPMTrajectory:
|
|
|
4868
4896
|
...
|
|
4869
4897
|
|
|
4870
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
|
+
|
|
4871
4970
|
class ManipulabilityTask:
|
|
4872
4971
|
A: numpy.ndarray # Eigen::MatrixXd
|
|
4873
4972
|
"""Matrix A in the task Ax = b, where x are the joint delta positions.
|
|
@@ -5033,6 +5132,10 @@ class OrientationTask:
|
|
|
5033
5132
|
|
|
5034
5133
|
|
|
5035
5134
|
class PointContact:
|
|
5135
|
+
R_world_surface: numpy.ndarray # Eigen::Matrix3d
|
|
5136
|
+
"""rotation matrix expressing the surface frame in the world frame (for unilateral contact)
|
|
5137
|
+
"""
|
|
5138
|
+
|
|
5036
5139
|
def __init__(
|
|
5037
5140
|
self: PointContact,
|
|
5038
5141
|
position_task: DynamicsPositionTask, # placo::dynamics::PositionTask
|
|
@@ -5069,6 +5172,10 @@ class PointContact:
|
|
|
5069
5172
|
"""Weight of moments for optimization (if relevant)
|
|
5070
5173
|
"""
|
|
5071
5174
|
|
|
5175
|
+
weight_tangentials: float # double
|
|
5176
|
+
"""Extra cost for tangential forces.
|
|
5177
|
+
"""
|
|
5178
|
+
|
|
5072
5179
|
wrench: numpy.ndarray # Eigen::VectorXd
|
|
5073
5180
|
"""Wrench populated after the DynamicsSolver::solve call.
|
|
5074
5181
|
"""
|
|
@@ -5313,6 +5420,10 @@ class Problem:
|
|
|
5313
5420
|
"""Number of problem variables that need to be solved.
|
|
5314
5421
|
"""
|
|
5315
5422
|
|
|
5423
|
+
regularization: float # double
|
|
5424
|
+
"""Default internal regularization.
|
|
5425
|
+
"""
|
|
5426
|
+
|
|
5316
5427
|
rewrite_equalities: bool # bool
|
|
5317
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.
|
|
5318
5429
|
"""
|
|
@@ -5336,6 +5447,10 @@ class Problem:
|
|
|
5336
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.
|
|
5337
5448
|
"""
|
|
5338
5449
|
|
|
5450
|
+
x: numpy.ndarray # Eigen::VectorXd
|
|
5451
|
+
"""Computed result.
|
|
5452
|
+
"""
|
|
5453
|
+
|
|
5339
5454
|
|
|
5340
5455
|
class ProblemConstraint:
|
|
5341
5456
|
"""Represents a constraint to be enforced by a Problem.
|
|
@@ -5401,6 +5516,10 @@ class PuppetContact:
|
|
|
5401
5516
|
"""Weight of moments for optimization (if relevant)
|
|
5402
5517
|
"""
|
|
5403
5518
|
|
|
5519
|
+
weight_tangentials: float # double
|
|
5520
|
+
"""Extra cost for tangential forces.
|
|
5521
|
+
"""
|
|
5522
|
+
|
|
5404
5523
|
wrench: numpy.ndarray # Eigen::VectorXd
|
|
5405
5524
|
"""Wrench populated after the DynamicsSolver::solve call.
|
|
5406
5525
|
"""
|
|
@@ -5491,36 +5610,6 @@ class RegularizationTask:
|
|
|
5491
5610
|
...
|
|
5492
5611
|
|
|
5493
5612
|
|
|
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
5613
|
class RelativeFrameTask:
|
|
5525
5614
|
T_a_b: any
|
|
5526
5615
|
|
|
@@ -5656,36 +5745,6 @@ class RelativeOrientationTask:
|
|
|
5656
5745
|
...
|
|
5657
5746
|
|
|
5658
5747
|
|
|
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
5748
|
class RelativePositionTask:
|
|
5690
5749
|
A: numpy.ndarray # Eigen::MatrixXd
|
|
5691
5750
|
"""Matrix A in the task Ax = b, where x are the joint delta positions.
|
|
@@ -5794,6 +5853,14 @@ class RobotWrapper:
|
|
|
5794
5853
|
:param urdf_content: if it is not empty, it will be used as the URDF content instead of loading it from the file"""
|
|
5795
5854
|
...
|
|
5796
5855
|
|
|
5856
|
+
def add_q_noise(
|
|
5857
|
+
self: RobotWrapper,
|
|
5858
|
+
noise: float, # double
|
|
5859
|
+
|
|
5860
|
+
) -> None:
|
|
5861
|
+
"""Adds some noise to the configuration."""
|
|
5862
|
+
...
|
|
5863
|
+
|
|
5797
5864
|
def centroidal_map(
|
|
5798
5865
|
self: RobotWrapper,
|
|
5799
5866
|
|
|
@@ -6145,6 +6212,15 @@ class RobotWrapper:
|
|
|
6145
6212
|
:param T_world_frameTarget: transformation matrix"""
|
|
6146
6213
|
...
|
|
6147
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
|
+
|
|
6148
6224
|
def set_gravity(
|
|
6149
6225
|
self: RobotWrapper,
|
|
6150
6226
|
gravity: numpy.ndarray, # Eigen::Vector3d
|
|
@@ -6212,6 +6288,15 @@ class RobotWrapper:
|
|
|
6212
6288
|
:param value: joint velocity"""
|
|
6213
6289
|
...
|
|
6214
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
|
+
|
|
6215
6300
|
def set_torque_limit(
|
|
6216
6301
|
self: RobotWrapper,
|
|
6217
6302
|
name: str, # const std::string &
|
|
@@ -6736,6 +6821,10 @@ class TaskContact:
|
|
|
6736
6821
|
"""Weight of moments for optimization (if relevant)
|
|
6737
6822
|
"""
|
|
6738
6823
|
|
|
6824
|
+
weight_tangentials: float # double
|
|
6825
|
+
"""Extra cost for tangential forces.
|
|
6826
|
+
"""
|
|
6827
|
+
|
|
6739
6828
|
wrench: numpy.ndarray # Eigen::VectorXd
|
|
6740
6829
|
"""Wrench populated after the DynamicsSolver::solve call.
|
|
6741
6830
|
"""
|
|
@@ -7169,12 +7258,6 @@ def frame_yaw(
|
|
|
7169
7258
|
...
|
|
7170
7259
|
|
|
7171
7260
|
|
|
7172
|
-
def getNumpyType(
|
|
7173
|
-
|
|
7174
|
-
) -> any:
|
|
7175
|
-
...
|
|
7176
|
-
|
|
7177
|
-
|
|
7178
7261
|
def get_classes_registry(
|
|
7179
7262
|
|
|
7180
7263
|
) -> any:
|
|
@@ -7233,7 +7316,7 @@ def optimal_transformation(
|
|
|
7233
7316
|
points_in_B: numpy.ndarray, # Eigen::MatrixXd
|
|
7234
7317
|
|
|
7235
7318
|
) -> numpy.ndarray:
|
|
7236
|
-
"""Finds the optimal transformation T_a_b that minimizes the sum of squared distances between the (same) points in A and
|
|
7319
|
+
"""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
7320
|
...
|
|
7238
7321
|
|
|
7239
7322
|
|
|
@@ -7260,13 +7343,6 @@ def seed(
|
|
|
7260
7343
|
...
|
|
7261
7344
|
|
|
7262
7345
|
|
|
7263
|
-
def setNumpyType(
|
|
7264
|
-
numpy_type: object,
|
|
7265
|
-
|
|
7266
|
-
) -> None:
|
|
7267
|
-
...
|
|
7268
|
-
|
|
7269
|
-
|
|
7270
7346
|
def sharedMemory(
|
|
7271
7347
|
value: bool,
|
|
7272
7348
|
|
|
@@ -7274,18 +7350,6 @@ def sharedMemory(
|
|
|
7274
7350
|
...
|
|
7275
7351
|
|
|
7276
7352
|
|
|
7277
|
-
def switchToNumpyArray(
|
|
7278
|
-
|
|
7279
|
-
) -> any:
|
|
7280
|
-
...
|
|
7281
|
-
|
|
7282
|
-
|
|
7283
|
-
def switchToNumpyMatrix(
|
|
7284
|
-
|
|
7285
|
-
) -> any:
|
|
7286
|
-
...
|
|
7287
|
-
|
|
7288
|
-
|
|
7289
7353
|
class vector_Collision:
|
|
7290
7354
|
def __init__(
|
|
7291
7355
|
arg1: object,
|
|
@@ -7470,4 +7534,4 @@ def wrap_angle(
|
|
|
7470
7534
|
...
|
|
7471
7535
|
|
|
7472
7536
|
|
|
7473
|
-
__groups__ = {'placo::dynamics': ['AvoidSelfCollisionsDynamicsConstraint', 'Contact', 'Contact6D', 'DynamicsCoMTask', 'DynamicsConstraint', 'DynamicsFrameTask', 'DynamicsGearTask', 'DynamicsJointsTask', 'DynamicsOrientationTask', 'DynamicsPositionTask', '
|
|
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
|
|
@@ -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
|
-
|
|
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,
|
|
@@ -246,6 +251,23 @@ def contacts_viz(solver: placo.DynamicsSolver, ratio=0.1, radius=0.005):
|
|
|
246
251
|
color=0x00FFAA,
|
|
247
252
|
radius=radius,
|
|
248
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
|
+
)
|
|
249
271
|
elif isinstance(contact, placo.ExternalWrenchContact):
|
|
250
272
|
frame_name = frames[contact.frame_index]
|
|
251
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.
|
|
@@ -0,0 +1,15 @@
|
|
|
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
|
+
cmeel.prefix/lib/python3.10/site-packages/placo_utils/__init__.py,sha256=UN-fc5KfBWQ-_qkm0Ajouh-T9tBGm5aUtuzBiH1tRtk,80
|
|
5
|
+
cmeel.prefix/lib/python3.10/site-packages/placo_utils/tf.py,sha256=fFRXNbeLlXzn5VOqYl7hcSuvOOtTDTiLi_Lpd9_l6wA,36
|
|
6
|
+
cmeel.prefix/lib/python3.10/site-packages/placo_utils/view.py,sha256=7KiLYGpTKaPJtFHZ6kjERdOzJiPSDUtkIKHbziHpkYk,928
|
|
7
|
+
cmeel.prefix/lib/python3.10/site-packages/placo_utils/visualization.py,sha256=6ET7YkZBuIWoJg2qVO-rPt3Nj4ZnezyvGAe458G4VGo,8201
|
|
8
|
+
cmeel.prefix/lib/python3.10/site-packages/placo_utils/__pycache__/__init__.cpython-310.pyc,sha256=tJrTajdA7hNO9tZkE1oN49rU-61lCNUED-mQXdAvzAs,261
|
|
9
|
+
cmeel.prefix/lib/python3.10/site-packages/placo_utils/__pycache__/tf.cpython-310.pyc,sha256=APWQ5-zKgbEcMnkv6Hxgj_Q46jpnuOyL9YbSrj6Z5Vw,204
|
|
10
|
+
cmeel.prefix/lib/python3.10/site-packages/placo_utils/__pycache__/visualization.cpython-310.pyc,sha256=kMdmKY2LZKM4rkKm4j0y-TOMBQ3PeVIpbfB_YJxNz5c,6781
|
|
11
|
+
placo-0.6.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.6.dist-info/METADATA
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: placo
|
|
3
|
-
Version: 0.5.6
|
|
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/)
|
placo-0.5.6.dist-info/RECORD
DELETED
|
@@ -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
|
|
File without changes
|
|
File without changes
|