franky-control 1.0.0__cp313-cp313t-manylinux_2_34_x86_64.whl → 1.0.1__cp313-cp313t-manylinux_2_34_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.
- franky/_franky.cpython-313t-x86_64-linux-gnu.so +0 -0
- franky/_franky.pyi +153 -153
- franky/robot.py +2 -2
- {franky_control-1.0.0.dist-info → franky_control-1.0.1.dist-info}/METADATA +66 -40
- {franky_control-1.0.0.dist-info → franky_control-1.0.1.dist-info}/RECORD +11 -11
- franky_control.libs/libfranka-fb54b5c1.so.0.15.0 +0 -0
- franky_control.libs/{libpinocchio_default-eb97a09e.so.3.4.0 → libpinocchio_default-14a4da3b.so.3.4.0} +0 -0
- franky_control.libs/{libpinocchio_parsers-9f152785.so.3.4.0 → libpinocchio_parsers-9083fe76.so.3.4.0} +0 -0
- {franky_control-1.0.0.dist-info → franky_control-1.0.1.dist-info}/WHEEL +0 -0
- {franky_control-1.0.0.dist-info → franky_control-1.0.1.dist-info}/licenses/LICENSE +0 -0
- {franky_control-1.0.0.dist-info → franky_control-1.0.1.dist-info}/top_level.txt +0 -0
Binary file
|
franky/_franky.pyi
CHANGED
@@ -5,7 +5,7 @@ from __future__ import annotations
|
|
5
5
|
import numpy
|
6
6
|
import pybind11_stubgen.typing_ext
|
7
7
|
import typing
|
8
|
-
__all__ = ['Affine', 'BaseCartesianPoseMotion', 'BaseCartesianVelocityMotion', 'BaseJointPositionMotion', 'BaseJointVelocityMotion', 'BaseTorqueMotion', 'BoolFuture', 'CartesianImpedanceMotion', 'CartesianMotion', 'CartesianPose', 'CartesianPoseReaction', 'CartesianState', 'CartesianStopMotion', 'CartesianVelocities', 'CartesianVelocityMotion', 'CartesianVelocityReaction', 'CartesianVelocityStopMotion', 'CartesianVelocityWaypoint', 'CartesianVelocityWaypointMotion', 'CartesianWaypoint', 'CartesianWaypointMotion', 'CommandException', 'Condition', 'ControlException', 'ControlSignalType', 'ControllerMode', 'DoubleDynamicsLimit', 'Duration', 'ElbowState', 'Errors', 'Exception', 'ExponentialImpedanceMotion', 'FlipDirection', 'Frame', 'Gripper', 'GripperException', 'GripperState', 'ImpedanceMotion', 'IncompatibleVersionException', 'InvalidMotionTypeException', 'InvalidOperationException', 'JointMotion', 'JointPositionReaction', 'JointPositions', 'JointState', 'JointStopMotion', 'JointVelocities', 'JointVelocityMotion', 'JointVelocityReaction', 'JointVelocityStopMotion', 'JointVelocityWaypoint', 'JointVelocityWaypointMotion', 'JointWaypoint', 'JointWaypointMotion', 'Measure', 'Model', 'ModelException', 'NetworkException', 'ProtocolException', 'ReactionRecursionException', 'RealtimeConfig', 'RealtimeException', 'ReferenceType', 'RelativeDynamicsFactor', '
|
8
|
+
__all__ = ['Affine', 'BaseCartesianPoseMotion', 'BaseCartesianVelocityMotion', 'BaseJointPositionMotion', 'BaseJointVelocityMotion', 'BaseTorqueMotion', 'BoolFuture', 'CartesianImpedanceMotion', 'CartesianMotion', 'CartesianPose', 'CartesianPoseReaction', 'CartesianState', 'CartesianStopMotion', 'CartesianVelocities', 'CartesianVelocityMotion', 'CartesianVelocityReaction', 'CartesianVelocityStopMotion', 'CartesianVelocityWaypoint', 'CartesianVelocityWaypointMotion', 'CartesianWaypoint', 'CartesianWaypointMotion', 'CommandException', 'Condition', 'ControlException', 'ControlSignalType', 'ControllerMode', 'DoubleDynamicsLimit', 'Duration', 'ElbowState', 'Errors', 'Exception', 'ExponentialImpedanceMotion', 'FlipDirection', 'Frame', 'Gripper', 'GripperException', 'GripperState', 'ImpedanceMotion', 'IncompatibleVersionException', 'InvalidMotionTypeException', 'InvalidOperationException', 'JointMotion', 'JointPositionReaction', 'JointPositions', 'JointState', 'JointStopMotion', 'JointVelocities', 'JointVelocityMotion', 'JointVelocityReaction', 'JointVelocityStopMotion', 'JointVelocityWaypoint', 'JointVelocityWaypointMotion', 'JointWaypoint', 'JointWaypointMotion', 'Measure', 'Model', 'ModelException', 'NetworkException', 'ProtocolException', 'ReactionRecursionException', 'RealtimeConfig', 'RealtimeException', 'ReferenceType', 'RelativeDynamicsFactor', 'RobotMode', 'RobotPose', 'RobotState', 'RobotVelocity', 'TorqueReaction', 'Torques', 'Twist', 'TwistAcceleration', 'VectorDynamicsLimit']
|
9
9
|
class Affine:
|
10
10
|
@staticmethod
|
11
11
|
def _pybind11_conduit_v1_(*args, **kwargs):
|
@@ -1188,158 +1188,6 @@ class RelativeDynamicsFactor:
|
|
1188
1188
|
@property
|
1189
1189
|
def velocity(self) -> float:
|
1190
1190
|
...
|
1191
|
-
class RobotInternal:
|
1192
|
-
control_rate: typing.ClassVar[float] = 0.001
|
1193
|
-
degrees_of_freedom: typing.ClassVar[int] = 7
|
1194
|
-
relative_dynamics_factor: RelativeDynamicsFactor
|
1195
|
-
@staticmethod
|
1196
|
-
def _pybind11_conduit_v1_(*args, **kwargs):
|
1197
|
-
...
|
1198
|
-
def __init__(self, fci_hostname: str, relative_dynamics_factor: RelativeDynamicsFactor | float = 1.0, default_torque_threshold: float = 20.0, default_force_threshold: float = 30.0, controller_mode: ControllerMode = ..., realtime_config: RealtimeConfig = ..., kalman_q_process_var: float = 0.0001, kalman_dq_process_var: float = 0.001, kalman_ddq_process_var: float = 0.1, kalman_control_process_var: float = 1.0, kalman_q_obs_var: float = 0.01, kalman_dq_obs_var: float = 0.1, kalman_q_d_obs_var: float = 0.0001, kalman_dq_d_obs_var: float = 0.0001, kalman_ddq_d_obs_var: float = 0.0001, kalman_control_adaptation_rate: float = 0.1) -> None:
|
1199
|
-
...
|
1200
|
-
def join_motion(self, timeout: float | None = None) -> bool:
|
1201
|
-
...
|
1202
|
-
@typing.overload
|
1203
|
-
def move(self, motion: BaseCartesianPoseMotion, asynchronous: bool = False) -> None:
|
1204
|
-
...
|
1205
|
-
@typing.overload
|
1206
|
-
def move(self, motion: BaseCartesianVelocityMotion, asynchronous: bool = False) -> None:
|
1207
|
-
...
|
1208
|
-
@typing.overload
|
1209
|
-
def move(self, motion: BaseJointPositionMotion, asynchronous: bool = False) -> None:
|
1210
|
-
...
|
1211
|
-
@typing.overload
|
1212
|
-
def move(self, motion: BaseJointVelocityMotion, asynchronous: bool = False) -> None:
|
1213
|
-
...
|
1214
|
-
@typing.overload
|
1215
|
-
def move(self, motion: BaseTorqueMotion, asynchronous: bool = False) -> None:
|
1216
|
-
...
|
1217
|
-
def poll_motion(self) -> bool:
|
1218
|
-
...
|
1219
|
-
def recover_from_errors(self) -> bool:
|
1220
|
-
...
|
1221
|
-
def set_cartesian_impedance(self, K_x: typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(6)]) -> None:
|
1222
|
-
...
|
1223
|
-
@typing.overload
|
1224
|
-
def set_collision_behavior(self, torque_thresholds: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(7)] | numpy.ndarray[numpy.float64[7, 1]], force_thresholds: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(6)] | numpy.ndarray[numpy.float64[6, 1]]) -> None:
|
1225
|
-
...
|
1226
|
-
@typing.overload
|
1227
|
-
def set_collision_behavior(self, lower_torque_threshold: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(7)] | numpy.ndarray[numpy.float64[7, 1]], upper_torque_threshold: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(7)] | numpy.ndarray[numpy.float64[7, 1]], lower_force_threshold: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(6)] | numpy.ndarray[numpy.float64[6, 1]], upper_force_threshold: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(6)] | numpy.ndarray[numpy.float64[6, 1]]) -> None:
|
1228
|
-
...
|
1229
|
-
@typing.overload
|
1230
|
-
def set_collision_behavior(self, lower_torque_threshold_acceleration: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(7)] | numpy.ndarray[numpy.float64[7, 1]], upper_torque_threshold_acceleration: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(7)] | numpy.ndarray[numpy.float64[7, 1]], lower_torque_threshold_nominal: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(7)] | numpy.ndarray[numpy.float64[7, 1]], upper_torque_threshold_nominal: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(7)] | numpy.ndarray[numpy.float64[7, 1]], lower_force_threshold_acceleration: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(6)] | numpy.ndarray[numpy.float64[6, 1]], upper_force_threshold_acceleration: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(6)] | numpy.ndarray[numpy.float64[6, 1]], lower_force_threshold_nominal: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(6)] | numpy.ndarray[numpy.float64[6, 1]], upper_force_threshold_nominal: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(6)] | numpy.ndarray[numpy.float64[6, 1]]) -> None:
|
1231
|
-
...
|
1232
|
-
def set_ee(self, NE_T_EE: typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(16)]) -> None:
|
1233
|
-
...
|
1234
|
-
def set_guiding_mode(self, guiding_mode: typing.Annotated[list[bool], pybind11_stubgen.typing_ext.FixedSize(6)], elbow: bool) -> None:
|
1235
|
-
...
|
1236
|
-
def set_joint_impedance(self, K_theta: typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(7)]) -> None:
|
1237
|
-
...
|
1238
|
-
def set_k(self, EE_T_K: typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(16)]) -> None:
|
1239
|
-
...
|
1240
|
-
def set_load(self, load_mass: float, F_x_Cload: typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(3)], load_inertia: typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(9)]) -> None:
|
1241
|
-
...
|
1242
|
-
def stop(self) -> None:
|
1243
|
-
...
|
1244
|
-
@property
|
1245
|
-
def current_cartesian_state(self) -> CartesianState:
|
1246
|
-
...
|
1247
|
-
@property
|
1248
|
-
def current_cartesian_velocity(self) -> RobotVelocity:
|
1249
|
-
...
|
1250
|
-
@property
|
1251
|
-
def current_control_signal_type(self) -> ControlSignalType | None:
|
1252
|
-
...
|
1253
|
-
@property
|
1254
|
-
def current_joint_positions(self) -> numpy.ndarray[numpy.float64[7, 1]]:
|
1255
|
-
...
|
1256
|
-
@property
|
1257
|
-
def current_joint_state(self) -> JointState:
|
1258
|
-
...
|
1259
|
-
@property
|
1260
|
-
def current_joint_velocities(self) -> numpy.ndarray[numpy.float64[7, 1]]:
|
1261
|
-
...
|
1262
|
-
@property
|
1263
|
-
def current_pose(self) -> RobotPose:
|
1264
|
-
...
|
1265
|
-
@property
|
1266
|
-
def elbow_acceleration_limit(self) -> DoubleDynamicsLimit:
|
1267
|
-
"""
|
1268
|
-
[rad/s²]
|
1269
|
-
"""
|
1270
|
-
@property
|
1271
|
-
def elbow_jerk_limit(self) -> DoubleDynamicsLimit:
|
1272
|
-
"""
|
1273
|
-
[rad/s³]
|
1274
|
-
"""
|
1275
|
-
@property
|
1276
|
-
def elbow_velocity_limit(self) -> DoubleDynamicsLimit:
|
1277
|
-
"""
|
1278
|
-
[rad/s]
|
1279
|
-
"""
|
1280
|
-
@property
|
1281
|
-
def fci_hostname(self) -> str:
|
1282
|
-
...
|
1283
|
-
@property
|
1284
|
-
def has_errors(self) -> bool:
|
1285
|
-
...
|
1286
|
-
@property
|
1287
|
-
def is_in_control(self) -> bool:
|
1288
|
-
...
|
1289
|
-
@property
|
1290
|
-
def joint_acceleration_limit(self) -> VectorDynamicsLimit:
|
1291
|
-
"""
|
1292
|
-
[rad/s²]
|
1293
|
-
"""
|
1294
|
-
@property
|
1295
|
-
def joint_jerk_limit(self) -> VectorDynamicsLimit:
|
1296
|
-
"""
|
1297
|
-
[rad/s^3]
|
1298
|
-
"""
|
1299
|
-
@property
|
1300
|
-
def joint_velocity_limit(self) -> VectorDynamicsLimit:
|
1301
|
-
"""
|
1302
|
-
[rad/s]
|
1303
|
-
"""
|
1304
|
-
@property
|
1305
|
-
def model(self) -> Model:
|
1306
|
-
...
|
1307
|
-
@property
|
1308
|
-
def model_urdf(self) -> str:
|
1309
|
-
...
|
1310
|
-
@property
|
1311
|
-
def rotation_acceleration_limit(self) -> DoubleDynamicsLimit:
|
1312
|
-
"""
|
1313
|
-
[rad/s²]
|
1314
|
-
"""
|
1315
|
-
@property
|
1316
|
-
def rotation_jerk_limit(self) -> DoubleDynamicsLimit:
|
1317
|
-
"""
|
1318
|
-
[rad/s³]
|
1319
|
-
"""
|
1320
|
-
@property
|
1321
|
-
def rotation_velocity_limit(self) -> DoubleDynamicsLimit:
|
1322
|
-
"""
|
1323
|
-
[rad/s]
|
1324
|
-
"""
|
1325
|
-
@property
|
1326
|
-
def state(self) -> RobotState:
|
1327
|
-
...
|
1328
|
-
@property
|
1329
|
-
def translation_acceleration_limit(self) -> DoubleDynamicsLimit:
|
1330
|
-
"""
|
1331
|
-
[m/s²]
|
1332
|
-
"""
|
1333
|
-
@property
|
1334
|
-
def translation_jerk_limit(self) -> DoubleDynamicsLimit:
|
1335
|
-
"""
|
1336
|
-
[m/s³]
|
1337
|
-
"""
|
1338
|
-
@property
|
1339
|
-
def translation_velocity_limit(self) -> DoubleDynamicsLimit:
|
1340
|
-
"""
|
1341
|
-
[m/s]
|
1342
|
-
"""
|
1343
1191
|
class RobotMode:
|
1344
1192
|
"""
|
1345
1193
|
Members:
|
@@ -1734,3 +1582,155 @@ class VectorDynamicsLimit:
|
|
1734
1582
|
@property
|
1735
1583
|
def max(self) -> numpy.ndarray[numpy.float64[7, 1]]:
|
1736
1584
|
...
|
1585
|
+
class _RobotInternal:
|
1586
|
+
control_rate: typing.ClassVar[float] = 0.001
|
1587
|
+
degrees_of_freedom: typing.ClassVar[int] = 7
|
1588
|
+
relative_dynamics_factor: RelativeDynamicsFactor
|
1589
|
+
@staticmethod
|
1590
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
1591
|
+
...
|
1592
|
+
def __init__(self, fci_hostname: str, relative_dynamics_factor: RelativeDynamicsFactor | float = 1.0, default_torque_threshold: float = 20.0, default_force_threshold: float = 30.0, controller_mode: ControllerMode = ..., realtime_config: RealtimeConfig = ..., kalman_q_process_var: float = 0.0001, kalman_dq_process_var: float = 0.001, kalman_ddq_process_var: float = 0.1, kalman_control_process_var: float = 1.0, kalman_q_obs_var: float = 0.01, kalman_dq_obs_var: float = 0.1, kalman_q_d_obs_var: float = 0.0001, kalman_dq_d_obs_var: float = 0.0001, kalman_ddq_d_obs_var: float = 0.0001, kalman_control_adaptation_rate: float = 0.1) -> None:
|
1593
|
+
...
|
1594
|
+
def join_motion(self, timeout: float | None = None) -> bool:
|
1595
|
+
...
|
1596
|
+
@typing.overload
|
1597
|
+
def move(self, motion: BaseCartesianPoseMotion, asynchronous: bool = False) -> None:
|
1598
|
+
...
|
1599
|
+
@typing.overload
|
1600
|
+
def move(self, motion: BaseCartesianVelocityMotion, asynchronous: bool = False) -> None:
|
1601
|
+
...
|
1602
|
+
@typing.overload
|
1603
|
+
def move(self, motion: BaseJointPositionMotion, asynchronous: bool = False) -> None:
|
1604
|
+
...
|
1605
|
+
@typing.overload
|
1606
|
+
def move(self, motion: BaseJointVelocityMotion, asynchronous: bool = False) -> None:
|
1607
|
+
...
|
1608
|
+
@typing.overload
|
1609
|
+
def move(self, motion: BaseTorqueMotion, asynchronous: bool = False) -> None:
|
1610
|
+
...
|
1611
|
+
def poll_motion(self) -> bool:
|
1612
|
+
...
|
1613
|
+
def recover_from_errors(self) -> bool:
|
1614
|
+
...
|
1615
|
+
def set_cartesian_impedance(self, K_x: typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(6)]) -> None:
|
1616
|
+
...
|
1617
|
+
@typing.overload
|
1618
|
+
def set_collision_behavior(self, torque_thresholds: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(7)] | numpy.ndarray[numpy.float64[7, 1]], force_thresholds: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(6)] | numpy.ndarray[numpy.float64[6, 1]]) -> None:
|
1619
|
+
...
|
1620
|
+
@typing.overload
|
1621
|
+
def set_collision_behavior(self, lower_torque_threshold: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(7)] | numpy.ndarray[numpy.float64[7, 1]], upper_torque_threshold: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(7)] | numpy.ndarray[numpy.float64[7, 1]], lower_force_threshold: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(6)] | numpy.ndarray[numpy.float64[6, 1]], upper_force_threshold: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(6)] | numpy.ndarray[numpy.float64[6, 1]]) -> None:
|
1622
|
+
...
|
1623
|
+
@typing.overload
|
1624
|
+
def set_collision_behavior(self, lower_torque_threshold_acceleration: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(7)] | numpy.ndarray[numpy.float64[7, 1]], upper_torque_threshold_acceleration: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(7)] | numpy.ndarray[numpy.float64[7, 1]], lower_torque_threshold_nominal: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(7)] | numpy.ndarray[numpy.float64[7, 1]], upper_torque_threshold_nominal: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(7)] | numpy.ndarray[numpy.float64[7, 1]], lower_force_threshold_acceleration: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(6)] | numpy.ndarray[numpy.float64[6, 1]], upper_force_threshold_acceleration: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(6)] | numpy.ndarray[numpy.float64[6, 1]], lower_force_threshold_nominal: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(6)] | numpy.ndarray[numpy.float64[6, 1]], upper_force_threshold_nominal: float | typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(6)] | numpy.ndarray[numpy.float64[6, 1]]) -> None:
|
1625
|
+
...
|
1626
|
+
def set_ee(self, NE_T_EE: typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(16)]) -> None:
|
1627
|
+
...
|
1628
|
+
def set_guiding_mode(self, guiding_mode: typing.Annotated[list[bool], pybind11_stubgen.typing_ext.FixedSize(6)], elbow: bool) -> None:
|
1629
|
+
...
|
1630
|
+
def set_joint_impedance(self, K_theta: typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(7)]) -> None:
|
1631
|
+
...
|
1632
|
+
def set_k(self, EE_T_K: typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(16)]) -> None:
|
1633
|
+
...
|
1634
|
+
def set_load(self, load_mass: float, F_x_Cload: typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(3)], load_inertia: typing.Annotated[list[float], pybind11_stubgen.typing_ext.FixedSize(9)]) -> None:
|
1635
|
+
...
|
1636
|
+
def stop(self) -> None:
|
1637
|
+
...
|
1638
|
+
@property
|
1639
|
+
def current_cartesian_state(self) -> CartesianState:
|
1640
|
+
...
|
1641
|
+
@property
|
1642
|
+
def current_cartesian_velocity(self) -> RobotVelocity:
|
1643
|
+
...
|
1644
|
+
@property
|
1645
|
+
def current_control_signal_type(self) -> ControlSignalType | None:
|
1646
|
+
...
|
1647
|
+
@property
|
1648
|
+
def current_joint_positions(self) -> numpy.ndarray[numpy.float64[7, 1]]:
|
1649
|
+
...
|
1650
|
+
@property
|
1651
|
+
def current_joint_state(self) -> JointState:
|
1652
|
+
...
|
1653
|
+
@property
|
1654
|
+
def current_joint_velocities(self) -> numpy.ndarray[numpy.float64[7, 1]]:
|
1655
|
+
...
|
1656
|
+
@property
|
1657
|
+
def current_pose(self) -> RobotPose:
|
1658
|
+
...
|
1659
|
+
@property
|
1660
|
+
def elbow_acceleration_limit(self) -> DoubleDynamicsLimit:
|
1661
|
+
"""
|
1662
|
+
[rad/s²]
|
1663
|
+
"""
|
1664
|
+
@property
|
1665
|
+
def elbow_jerk_limit(self) -> DoubleDynamicsLimit:
|
1666
|
+
"""
|
1667
|
+
[rad/s³]
|
1668
|
+
"""
|
1669
|
+
@property
|
1670
|
+
def elbow_velocity_limit(self) -> DoubleDynamicsLimit:
|
1671
|
+
"""
|
1672
|
+
[rad/s]
|
1673
|
+
"""
|
1674
|
+
@property
|
1675
|
+
def fci_hostname(self) -> str:
|
1676
|
+
...
|
1677
|
+
@property
|
1678
|
+
def has_errors(self) -> bool:
|
1679
|
+
...
|
1680
|
+
@property
|
1681
|
+
def is_in_control(self) -> bool:
|
1682
|
+
...
|
1683
|
+
@property
|
1684
|
+
def joint_acceleration_limit(self) -> VectorDynamicsLimit:
|
1685
|
+
"""
|
1686
|
+
[rad/s²]
|
1687
|
+
"""
|
1688
|
+
@property
|
1689
|
+
def joint_jerk_limit(self) -> VectorDynamicsLimit:
|
1690
|
+
"""
|
1691
|
+
[rad/s^3]
|
1692
|
+
"""
|
1693
|
+
@property
|
1694
|
+
def joint_velocity_limit(self) -> VectorDynamicsLimit:
|
1695
|
+
"""
|
1696
|
+
[rad/s]
|
1697
|
+
"""
|
1698
|
+
@property
|
1699
|
+
def model(self) -> Model:
|
1700
|
+
...
|
1701
|
+
@property
|
1702
|
+
def model_urdf(self) -> str:
|
1703
|
+
...
|
1704
|
+
@property
|
1705
|
+
def rotation_acceleration_limit(self) -> DoubleDynamicsLimit:
|
1706
|
+
"""
|
1707
|
+
[rad/s²]
|
1708
|
+
"""
|
1709
|
+
@property
|
1710
|
+
def rotation_jerk_limit(self) -> DoubleDynamicsLimit:
|
1711
|
+
"""
|
1712
|
+
[rad/s³]
|
1713
|
+
"""
|
1714
|
+
@property
|
1715
|
+
def rotation_velocity_limit(self) -> DoubleDynamicsLimit:
|
1716
|
+
"""
|
1717
|
+
[rad/s]
|
1718
|
+
"""
|
1719
|
+
@property
|
1720
|
+
def state(self) -> RobotState:
|
1721
|
+
...
|
1722
|
+
@property
|
1723
|
+
def translation_acceleration_limit(self) -> DoubleDynamicsLimit:
|
1724
|
+
"""
|
1725
|
+
[m/s²]
|
1726
|
+
"""
|
1727
|
+
@property
|
1728
|
+
def translation_jerk_limit(self) -> DoubleDynamicsLimit:
|
1729
|
+
"""
|
1730
|
+
[m/s³]
|
1731
|
+
"""
|
1732
|
+
@property
|
1733
|
+
def translation_velocity_limit(self) -> DoubleDynamicsLimit:
|
1734
|
+
"""
|
1735
|
+
[m/s]
|
1736
|
+
"""
|
franky/robot.py
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
from ._franky import
|
1
|
+
from ._franky import _RobotInternal
|
2
2
|
|
3
3
|
from .robot_web_session import RobotWebSession
|
4
4
|
|
5
5
|
|
6
|
-
class Robot(
|
6
|
+
class Robot(_RobotInternal):
|
7
7
|
def create_web_session(self, username: str, password: str):
|
8
8
|
return RobotWebSession(self, username, password)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: franky-control
|
3
|
-
Version: 1.0.
|
3
|
+
Version: 1.0.1
|
4
4
|
Summary: High-level control library for Franka robots.
|
5
5
|
Home-page: https://github.com/TimSchneider42/franky
|
6
6
|
Author: Tim Schneider
|
@@ -58,16 +58,16 @@ Dynamic: summary
|
|
58
58
|
|
59
59
|
Franky is a high-level control library for Franka robots offering Python and C++ support.
|
60
60
|
By providing a high-level control interface, Franky eliminates the need for strict real-time programming at 1 kHz,
|
61
|
-
making control from non-real
|
61
|
+
making control from non-real-time environments, such as Python programs, feasible.
|
62
62
|
Instead of relying on low-level control commands, Franky expects high-level position or velocity targets and
|
63
|
-
uses [Ruckig](https://github.com/pantor/ruckig) to plan time-optimal trajectories in real
|
63
|
+
uses [Ruckig](https://github.com/pantor/ruckig) to plan time-optimal trajectories in real-time.
|
64
64
|
|
65
65
|
Although Python does not provide real-time guarantees, Franky strives to maintain as much real-time control as possible.
|
66
66
|
Motions can be preempted at any moment, prompting Franky to re-plan trajectories on the fly.
|
67
|
-
To handle unforeseen situations—such as unexpected contact with the environment—Franky includes a reaction system that
|
68
|
-
allows to
|
69
|
-
Furthermore, most non-real
|
70
|
-
Gripper control
|
67
|
+
To handle unforeseen situations—such as unexpected contact with the environment — Franky includes a reaction system that
|
68
|
+
allows to update motion commands dynamically.
|
69
|
+
Furthermore, most non-real-time functionality of [libfranka](https://frankaemika.github.io/docs/libfranka.html), such as
|
70
|
+
Gripper control is made directly available in Python.
|
71
71
|
|
72
72
|
Check out the [tutorial](#-tutorial) and the [examples](https://github.com/TimSchneider42/franky/tree/master/examples)
|
73
73
|
for an introduction.
|
@@ -79,41 +79,67 @@ at [https://timschneider42.github.io/franky/](https://timschneider42.github.io/f
|
|
79
79
|
- **Control your Franka robot directly from Python in just a few lines!**
|
80
80
|
No more endless hours setting up ROS, juggling packages, or untangling dependencies. Just `pip install` — no ROS at all.
|
81
81
|
|
82
|
-
- **[Four control modes](
|
83
|
-
- [Cartesian position](#cartesian-position-control)
|
84
|
-
- [Cartesian velocity](#cartesian-velocity-control)
|
85
|
-
- [Joint position](#joint-position-control)
|
86
|
-
- [Joint velocity](#joint-velocity-control)
|
87
|
-
|
82
|
+
- **[Four control modes](#motion-types)**: [Cartesian position](#cartesian-position-control), [Cartesian velocity](#cartesian-velocity-control), [Joint position](#joint-position-control), [Joint velocity](#joint-velocity-control)
|
88
83
|
Franky uses [Ruckig](https://github.com/pantor/ruckig) to generate smooth, time-optimal trajectories while respecting velocity, acceleration, and jerk limits.
|
89
84
|
|
90
|
-
- **[Real-time control from Python and C++](
|
91
|
-
Need to change the target while the robot’s moving? No problem. Franky re-plans trajectories on the fly
|
85
|
+
- **[Real-time control from Python and C++](#real-time-motions)**
|
86
|
+
Need to change the target while the robot’s moving? No problem. Franky re-plans trajectories on the fly so that you can preempt motions anytime.
|
92
87
|
|
93
|
-
- **[Reactive behavior](#-real-time-reactions)
|
94
|
-
Robots don’t always go according to plan. Franky lets you define reactions to unexpected events—like contact with the environment — so you can change course in real
|
88
|
+
- **[Reactive behavior](#-real-time-reactions)**
|
89
|
+
Robots don’t always go according to plan. Franky lets you define reactions to unexpected events—like contact with the environment — so you can change course in real-time.
|
95
90
|
|
96
|
-
- **[Motion and reaction callbacks](#motion-callbacks)
|
91
|
+
- **[Motion and reaction callbacks](#motion-callbacks)**
|
97
92
|
Want to monitor what’s happening under the hood? Add callbacks to your motions and reactions. They won’t block the control thread and are super handy for debugging or logging.
|
98
93
|
|
99
|
-
- **Things are moving too fast? [Tune the robot's dynamics to your needs](#-robot)
|
94
|
+
- **Things are moving too fast? [Tune the robot's dynamics to your needs](#-robot)**
|
100
95
|
Adjust max velocity, acceleration, and jerk to match your setup or task. Fine control for smooth, safe operation.
|
101
96
|
|
102
|
-
- **Full Python access to the libfranka API
|
103
|
-
Want to tweak impedance, read the robot state, set force thresholds, or mess with the Jacobian? Go for it. If libfranka supports it, chances are Franky does too.
|
97
|
+
- **Full Python access to the libfranka API**
|
98
|
+
Want to tweak impedance, read the robot state, set force thresholds, or mess with the Jacobian? Go for it. If libfranka supports it, chances are Franky does, too.
|
104
99
|
|
100
|
+
## 📖 Python Quickstart Guide
|
105
101
|
|
106
|
-
|
102
|
+
Real-time kernel already installed and real-time permissions granted? Just install Franky via
|
107
103
|
|
108
|
-
|
104
|
+
```bash
|
105
|
+
pip install franky-control
|
106
|
+
```
|
107
|
+
|
108
|
+
otherwise, follow the [setup instructions](#setup) first.
|
109
|
+
|
110
|
+
Now we are already ready to go!
|
111
|
+
Unlock the brakes in the web interface, activate FCI, and start coding:
|
112
|
+
```python
|
113
|
+
from franky import *
|
114
|
+
|
115
|
+
robot = Robot("172.16.0.2") # Replace this with your robot's IP
|
116
|
+
|
117
|
+
# Let's start slow (this lets the robot use a maximum of 5% of its velocity, acceleration, and jerk limits)
|
118
|
+
robot.relative_dynamics_factor = 0.05
|
119
|
+
|
120
|
+
# Move the robot 20cm along the relative X-axis of its end-effector
|
121
|
+
motion = CartesianMotion(Affine([0.2, 0.0, 0.0]), ReferenceType.Relative)
|
122
|
+
robot.move(motion)
|
123
|
+
```
|
124
|
+
|
125
|
+
If you are seeing server version mismatch errors, such as
|
126
|
+
```
|
127
|
+
franky.IncompatibleVersionException: libfranka: Incompatible library version (server version: 5, library version: 9)
|
128
|
+
```
|
129
|
+
then your Franka robot is either not on the most recent firmware version or you are using the older Franka Panda model.
|
130
|
+
In any case, it's no big deal; just check [here](https://frankaemika.github.io/docs/compatibility.html) which libfranka version you need and follow our [instructions](installing-frankly) to install the appropriate Franky wheels.
|
131
|
+
|
132
|
+
## <a id="setup" /> ⚙️ Setup
|
133
|
+
|
134
|
+
To install Franky, you have to follow three steps:
|
109
135
|
|
110
136
|
1. Ensure that you are using a realtime kernel
|
111
137
|
2. Ensure that the executing user has permission to run real-time applications
|
112
|
-
3. Install
|
138
|
+
3. Install Franky via pip or build it from source
|
113
139
|
|
114
140
|
### Installing a real-time kernel
|
115
141
|
|
116
|
-
In order for
|
142
|
+
In order for Franky to function properly, it requires the underlying OS to use a realtime kernel.
|
117
143
|
Otherwise, you might see `communication_constrains_violation` errors.
|
118
144
|
|
119
145
|
To check whether your system is currently using a real-time kernel, type `uname -a`.
|
@@ -133,7 +159,7 @@ or, if you are using Ubuntu, it can be [enabled through Ubuntu Pro](https://ubun
|
|
133
159
|
|
134
160
|
### Allowing the executing user to run real-time applications
|
135
161
|
|
136
|
-
First, create a group `realtime` and add your user (or whoever is running
|
162
|
+
First, create a group `realtime` and add your user (or whoever is running Franky) to this group:
|
137
163
|
|
138
164
|
```bash
|
139
165
|
sudo addgroup realtime
|
@@ -162,9 +188,9 @@ $ groups
|
|
162
188
|
|
163
189
|
If realtime is not listed in your groups, try rebooting.
|
164
190
|
|
165
|
-
### Installing
|
191
|
+
### Installing Franky
|
166
192
|
|
167
|
-
To start using
|
193
|
+
To start using Franky with Python and libfranka *0.15.0*, just install it via
|
168
194
|
|
169
195
|
```bash
|
170
196
|
pip install franky-control
|
@@ -185,10 +211,10 @@ pip install --no-index --find-links=./dist franky-control
|
|
185
211
|
Franky is based on [libfranka](https://github.com/frankaemika/libfranka), [Eigen](https://eigen.tuxfamily.org) for
|
186
212
|
transformation calculations and [pybind11](https://github.com/pybind/pybind11) for the Python bindings.
|
187
213
|
As the Franka is sensitive to acceleration discontinuities, it requires jerk-constrained motion generation, for which
|
188
|
-
|
214
|
+
Franky uses the [Ruckig](https://ruckig.com) community version for Online Trajectory Generation (OTG).
|
189
215
|
|
190
216
|
After installing the dependencies (the exact versions can be found [here](#-development)), you can build and install
|
191
|
-
|
217
|
+
Franky via
|
192
218
|
|
193
219
|
```bash
|
194
220
|
git clone --recurse-submodules git@github.com:timschneider42/franky.git
|
@@ -200,10 +226,10 @@ make
|
|
200
226
|
make install
|
201
227
|
```
|
202
228
|
|
203
|
-
To use
|
229
|
+
To use Franky, you can also include it as a subproject in your parent CMake via `add_subdirectory(franky)` and then
|
204
230
|
`target_link_libraries(<target> franky)`.
|
205
231
|
|
206
|
-
If you need only the Python module, you can install
|
232
|
+
If you need only the Python module, you can install Franky via
|
207
233
|
|
208
234
|
```bash
|
209
235
|
pip install .
|
@@ -214,7 +240,7 @@ Make sure that the built library `_franky.cpython-3**-****-linux-gnu.so` is in t
|
|
214
240
|
|
215
241
|
#### Using Docker
|
216
242
|
|
217
|
-
To use
|
243
|
+
To use Franky within Docker we provide a [Dockerfile](docker/run/Dockerfile) and
|
218
244
|
accompanying [docker-compose](docker-compose.yml) file.
|
219
245
|
|
220
246
|
```bash
|
@@ -238,9 +264,9 @@ docker compose run franky-run bash
|
|
238
264
|
The container requires access to the host machines network *and* elevated user rights to allow the docker user to set RT
|
239
265
|
capabilities of the processes run from within it.
|
240
266
|
|
241
|
-
#### Building
|
267
|
+
#### Building Franky with Docker
|
242
268
|
|
243
|
-
For building
|
269
|
+
For building Franky and its wheels, we provide another Docker container that can also be launched using docker-compose:
|
244
270
|
|
245
271
|
```bash
|
246
272
|
docker compose build franky-build
|
@@ -349,7 +375,7 @@ print(robot.joint_jerk_limit.max)
|
|
349
375
|
|
350
376
|
#### Robot State
|
351
377
|
|
352
|
-
The robot state can be retrieved by
|
378
|
+
The robot state can be retrieved by accessing the following properties:
|
353
379
|
|
354
380
|
* `state`: Object of type `franky.RobotState`, which extends the
|
355
381
|
libfranka [franka::RobotState](https://frankaemika.github.io/libfranka/structfranka_1_1RobotState.html) structure by
|
@@ -375,7 +401,7 @@ state = robot.state
|
|
375
401
|
cartesian_state = robot.current_cartesian_state
|
376
402
|
robot_pose = cartesian_state.pose # Contains end-effector pose and elbow position
|
377
403
|
ee_pose = robot_pose.end_effector_pose
|
378
|
-
elbow_pos = robot_pose.
|
404
|
+
elbow_pos = robot_pose.elbow_state
|
379
405
|
robot_velocity = cartesian_state.velocity # Contains end-effector twist and elbow velocity
|
380
406
|
ee_twist = robot_velocity.end_effector_twist
|
381
407
|
elbow_vel = robot_velocity.elbow_velocity
|
@@ -402,7 +428,7 @@ For a full list of state-related features, check
|
|
402
428
|
the [Robot](https://timschneider42.github.io/franky/classfranky_1_1_robot.html)
|
403
429
|
and [Model](https://timschneider42.github.io/franky/classfranky_1_1_model.html) sections of the documentation.
|
404
430
|
|
405
|
-
### 🏃♂️ Motion Types
|
431
|
+
### <a id="motion-types" /> 🏃♂️ Motion Types
|
406
432
|
|
407
433
|
Franky currently supports four different impedance control modes: **joint position control**, **joint velocity control
|
408
434
|
**, **cartesian position control**, and **cartesian velocity control**.
|
@@ -700,7 +726,7 @@ motion
|
|
700
726
|
robot.move(motion)
|
701
727
|
```
|
702
728
|
|
703
|
-
### ⏱️ Real-Time Motions
|
729
|
+
### <a id="real-time-motions" /> ⏱️ Real-Time Motions
|
704
730
|
|
705
731
|
By setting the `asynchronous` parameter of `Robot.move` to `True`, the function does not block until the motion
|
706
732
|
finishes.
|
@@ -825,7 +851,7 @@ Franky is currently tested against following versions
|
|
825
851
|
## 📜 License
|
826
852
|
|
827
853
|
For non-commercial applications, this software is licensed under the LGPL v3.0.
|
828
|
-
If you want to use
|
854
|
+
If you want to use Franky within commercial applications or under a different license, please contact us for individual
|
829
855
|
agreements.
|
830
856
|
|
831
857
|
## 🔍 Differences to frankx
|
@@ -1,9 +1,9 @@
|
|
1
1
|
franky/__init__.py,sha256=lmRG8cc4eX-0gZgCkxxVCOrmuUEGJsppWl7DDURib-Y,293
|
2
|
-
franky/_franky.cpython-313t-x86_64-linux-gnu.so,sha256
|
3
|
-
franky/_franky.pyi,sha256=
|
2
|
+
franky/_franky.cpython-313t-x86_64-linux-gnu.so,sha256=-fRmLtN2iSGNdR2xQjY4KSRyf6eIhIu-QSu8WKFUaYE,3069865
|
3
|
+
franky/_franky.pyi,sha256=ocNP_RzseT7pe5tdwKkBn7hcG3EKXxQ1RDmhNbawIAQ,60039
|
4
4
|
franky/motion.py,sha256=EZmZPvu2r4YBhcokV1PFh8s8NmiwOUERvct3Zz629C8,334
|
5
5
|
franky/reaction.py,sha256=gDD7kVc_7Et2NwMmCB4Hcd12aK0eygJVqXzZ9Dzw0_M,1488
|
6
|
-
franky/robot.py,sha256=
|
6
|
+
franky/robot.py,sha256=NaTNh4PaJshbz44eibvLCMt6O_Ak7TRVjhUR6AGay9A,236
|
7
7
|
franky/robot_web_session.py,sha256=zOTAqDF4PbZLqJFr3RcuBwfWRSEMiw0Eag1stk3GWKE,7622
|
8
8
|
franky_control.libs/libPocoFoundationd-74964157.so.92,sha256=BHLfMLcmdIPPcSI8dAkqtFlclnh_y2BtbFNKyF-p3EA,2420809
|
9
9
|
franky_control.libs/libPocoNetd-5dd54f10.so.92,sha256=OFNDrRm1dpHiAzz5VZppU2O9TU0lkQj_GOMiPKQ0UWo,1907953
|
@@ -12,17 +12,17 @@ franky_control.libs/libboost_filesystem-63963750.so.1.78.0,sha256=PlaCrBtuzsgfIQ
|
|
12
12
|
franky_control.libs/libboost_serialization-75ebc722.so.1.78.0,sha256=2287N4aM0rCR-iuEDyvMjrx5hefLHyhKBLSCCn3ofRs,319177
|
13
13
|
franky_control.libs/libconsole_bridge-acce180d.so.1.0,sha256=-iSKX9xNyLCSSrducf7rDx6hXzdU5v7xQqZDulppIP8,22769
|
14
14
|
franky_control.libs/libfmt-677b7a5c.so.8.1.1,sha256=rN3uzEn_limS_u6DV-BxdTEbs2GrhlicD_OjyAlKYpA,140649
|
15
|
-
franky_control.libs/libfranka-fb54b5c1.so.0.15.0,sha256=
|
15
|
+
franky_control.libs/libfranka-fb54b5c1.so.0.15.0,sha256=_32_SS3EebthvOxPb5ajzCdQ1VC4w3l2b3dxy3UM1cI,973625
|
16
16
|
franky_control.libs/libpcre2-8-b77f698a.so.0.11.0,sha256=hQ2wPgk-6gm4ZYWGy6wPDCt46HtNTpYIRBUyH9Fq-9U,642033
|
17
|
-
franky_control.libs/libpinocchio_default-
|
18
|
-
franky_control.libs/libpinocchio_parsers-
|
17
|
+
franky_control.libs/libpinocchio_default-14a4da3b.so.3.4.0,sha256=-2BBoUEpCtCaA9t9u6D79NGBW-f_jJVOTHoFYb3Pljw,6489713
|
18
|
+
franky_control.libs/libpinocchio_parsers-9083fe76.so.3.4.0,sha256=CUcLmKVCVW1YCgVL73Zd0XMHAawOBITPUFIUdR3MnHM,593433
|
19
19
|
franky_control.libs/libtinyxml-69e5f0dd.so.0.2.6.2,sha256=V45jOzaljaUrtOAYBS20QBFHn0qPFHTEcWxdcOBoJNA,118121
|
20
20
|
franky_control.libs/liburdfdom_model-9ec0392f.so.1.0,sha256=Kwlq8DuENLdEX5URKcwUC06sl9rxUYoRjGx3EI-uRiY,146081
|
21
21
|
franky_control.libs/liburdfdom_model_state-01125232.so.1.0,sha256=LNMEG27nv_6BYvelpjXjr0YsBl-6IsGQfg3uG0DvTQQ,20857
|
22
22
|
franky_control.libs/liburdfdom_sensor-011819fa.so.1.0,sha256=LzFH_sfeyWcV042TmgSEXTQL1c0teyYg3veA8sTn_EM,20857
|
23
23
|
franky_control.libs/liburdfdom_world-4d53bc81.so.1.0,sha256=IziPhPYdFfZTgKDOnUMGLYSCsZRxYfC1rEKWjvzrpb4,146081
|
24
|
-
franky_control-1.0.
|
25
|
-
franky_control-1.0.
|
26
|
-
franky_control-1.0.
|
27
|
-
franky_control-1.0.
|
28
|
-
franky_control-1.0.
|
24
|
+
franky_control-1.0.1.dist-info/METADATA,sha256=_bCEyfQyvtGBmDvrA85-Z_NV8mWb4so0lQ_sSaanuRs,35098
|
25
|
+
franky_control-1.0.1.dist-info/WHEEL,sha256=Sc5X8hJVkMrnFAq14219oyY9VlZVCLEz5CM09-bt-14,114
|
26
|
+
franky_control-1.0.1.dist-info/top_level.txt,sha256=LdDKRvHTODs6ll6Ow5b-gmWqt4NJffHxL83MRTCv_Ag,22
|
27
|
+
franky_control-1.0.1.dist-info/RECORD,,
|
28
|
+
franky_control-1.0.1.dist-info/licenses/LICENSE,sha256=6or154nLLU6bELzjh0mCreFjt0m2v72zLi3yHE0QbeE,7650
|
Binary file
|
index c1a8c44..59a71bc 100755
|
|
Binary file
|
index 41b2f8b..7e05c54 100755
|
|
Binary file
|
File without changes
|
File without changes
|
File without changes
|