franky-control 1.1.0__cp312-cp312-manylinux_2_28_x86_64.whl → 1.1.1__cp312-cp312-manylinux_2_28_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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: franky-control
3
- Version: 1.1.0
3
+ Version: 1.1.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
@@ -109,6 +109,7 @@ otherwise, follow the [setup instructions](#setup) first.
109
109
 
110
110
  Now we are already ready to go!
111
111
  Unlock the brakes in the web interface, activate FCI, and start coding:
112
+
112
113
  ```python
113
114
  from franky import *
114
115
 
@@ -208,37 +209,7 @@ pip install numpy
208
209
  pip install --no-index --find-links=./dist franky-control
209
210
  ```
210
211
 
211
- Franky is based on [libfranka](https://github.com/frankaemika/libfranka), [Eigen](https://eigen.tuxfamily.org) for
212
- transformation calculations and [pybind11](https://github.com/pybind/pybind11) for the Python bindings.
213
- As the Franka is sensitive to acceleration discontinuities, it requires jerk-constrained motion generation, for which
214
- Franky uses the [Ruckig](https://ruckig.com) community version for Online Trajectory Generation (OTG).
215
-
216
- After installing the dependencies (the exact versions can be found [here](#-development)), you can build and install
217
- Franky via
218
-
219
- ```bash
220
- git clone --recurse-submodules git@github.com:timschneider42/franky.git
221
- cd franky
222
- mkdir -p build
223
- cd build
224
- cmake -DCMAKE_BUILD_TYPE=Release ..
225
- make
226
- make install
227
- ```
228
-
229
- To use Franky, you can also include it as a subproject in your parent CMake via `add_subdirectory(franky)` and then
230
- `target_link_libraries(<target> franky)`.
231
-
232
- If you need only the Python module, you can install Franky via
233
-
234
- ```bash
235
- pip install .
236
- ```
237
-
238
- Make sure that the built library `_franky.cpython-3**-****-linux-gnu.so` is in the Python path, e.g. by adjusting
239
- `PYTHONPATH` accordingly.
240
-
241
- #### Using Docker
212
+ ### Using Docker
242
213
 
243
214
  To use Franky within Docker we provide a [Dockerfile](docker/run/Dockerfile) and
244
215
  accompanying [docker-compose](docker-compose.yml) file.
@@ -264,16 +235,6 @@ docker compose run franky-run bash
264
235
  The container requires access to the host machines network *and* elevated user rights to allow the docker user to set RT
265
236
  capabilities of the processes run from within it.
266
237
 
267
- #### Building Franky with Docker
268
-
269
- For building Franky and its wheels, we provide another Docker container that can also be launched using docker-compose:
270
-
271
- ```bash
272
- docker compose build franky-build
273
- docker compose run --rm franky-build run-tests # To run the tests
274
- docker compose run --rm franky-build build-wheels # To build wheels for all supported python versions
275
- ```
276
-
277
238
  ### Can I use CUDA jointly with Franky?
278
239
 
279
240
  Yes. However, you need to set `IGNORE_PREEMPT_RT_PRESENCE=1` during the installation and all subsequent updates of the CUDA drivers on the real-time kernel.
@@ -300,6 +261,48 @@ Alternatively, if you are a cowboy and do not care about security, you can also
300
261
  bash <(wget -qO- https://raw.githubusercontent.com/timschneider42/franky/master/tools/install_cuda_realtime.bash)
301
262
  ```
302
263
 
264
+ ### Building Franky
265
+
266
+ Franky is based on [libfranka](https://github.com/frankaemika/libfranka), [Eigen](https://eigen.tuxfamily.org) for
267
+ transformation calculations and [pybind11](https://github.com/pybind/pybind11) for the Python bindings.
268
+ As the Franka is sensitive to acceleration discontinuities, it requires jerk-constrained motion generation, for which
269
+ Franky uses the [Ruckig](https://ruckig.com) community version for Online Trajectory Generation (OTG).
270
+
271
+ After installing the dependencies (the exact versions can be found [here](#-development)), you can build and install
272
+ Franky via
273
+
274
+ ```bash
275
+ git clone --recurse-submodules git@github.com:timschneider42/franky.git
276
+ cd franky
277
+ mkdir -p build
278
+ cd build
279
+ cmake -DCMAKE_BUILD_TYPE=Release ..
280
+ make
281
+ make install
282
+ ```
283
+
284
+ To use Franky, you can also include it as a subproject in your parent CMake via `add_subdirectory(franky)` and then
285
+ `target_link_libraries(<target> franky)`.
286
+
287
+ If you need only the Python module, you can install Franky via
288
+
289
+ ```bash
290
+ pip install .
291
+ ```
292
+
293
+ Make sure that the built library `_franky.cpython-3**-****-linux-gnu.so` is in the Python path, e.g. by adjusting
294
+ `PYTHONPATH` accordingly.
295
+
296
+ #### Building Franky with Docker
297
+
298
+ For building Franky and its wheels, we provide another Docker container that can also be launched using docker-compose:
299
+
300
+ ```bash
301
+ docker compose build franky-build
302
+ docker compose run --rm franky-build run-tests # To run the tests
303
+ docker compose run --rm franky-build build-wheels # To build wheels for all supported python versions
304
+ ```
305
+
303
306
  ## 📚 Tutorial
304
307
 
305
308
  Franky comes with both a C++ and Python API that differ only regarding real-time capability.
@@ -380,7 +383,9 @@ robot.recover_from_errors()
380
383
  robot.relative_dynamics_factor = 0.05
381
384
 
382
385
  # Alternatively, you can define each constraint individually
383
- robot.relative_dynamics_factor = RelativeDynamicsFactor(velocity=0.1, acceleration=0.05, jerk=0.1)
386
+ robot.relative_dynamics_factor = RelativeDynamicsFactor(
387
+ velocity=0.1, acceleration=0.05, jerk=0.1
388
+ )
384
389
 
385
390
  # Or, for more finegrained access, set individual limits
386
391
  robot.translation_velocity_limit.set(3.0)
@@ -448,7 +453,8 @@ ee_pose_kin = robot.model.pose(Frame.EndEffector, q, f_t_ee, ee_t_k)
448
453
  # Get the jacobian of the current robot state
449
454
  jacobian = robot.model.body_jacobian(Frame.EndEffector, state)
450
455
 
451
- # Alternatively, just get the URDF as string and do the kinematics computation yourself (only for libfranka >= 0.15.0)
456
+ # Alternatively, just get the URDF as string and do the kinematics computation yourself (only
457
+ # for libfranka >= 0.15.0)
452
458
  urdf_model = robot.model_urdf
453
459
  ```
454
460
 
@@ -476,28 +482,37 @@ from franky import *
476
482
  # A point-to-point motion in the joint space
477
483
  m_jp1 = JointMotion([-0.3, 0.1, 0.3, -1.4, 0.1, 1.8, 0.7])
478
484
 
479
- # A motion in joint space with multiple waypoints
480
- m_jp2 = JointWaypointMotion([
481
- JointWaypoint([-0.3, 0.1, 0.3, -1.4, 0.1, 1.8, 0.7]),
482
- JointWaypoint([0.0, 0.3, 0.3, -1.5, -0.2, 1.5, 0.8]),
483
- JointWaypoint([0.1, 0.4, 0.3, -1.4, -0.3, 1.7, 0.9])
484
- ])
485
-
486
- # Intermediate waypoints also permit to specify target velocities. The default target velocity is 0, meaning that the
487
- # robot will stop at every waypoint.
488
- m_jp3 = JointWaypointMotion([
489
- JointWaypoint([-0.3, 0.1, 0.3, -1.4, 0.1, 1.8, 0.7]),
490
- JointWaypoint(
491
- JointState(
492
- position=[0.0, 0.3, 0.3, -1.5, -0.2, 1.5, 0.8],
493
- velocity=[0.1, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0])),
494
- JointWaypoint([0.1, 0.4, 0.3, -1.4, -0.3, 1.7, 0.9])
495
- ])
496
-
497
- # Stop the robot in joint position control mode. The difference of JointStopMotion to other stop motions such as
498
- # CartesianStopMotion is that # JointStopMotion # stops the robot in joint position control mode while
499
- # CartesianStopMotion stops it in cartesian pose control mode. The difference becomes relevant when asynchronous move
500
- # commands are being sent or reactions are being used(see below).
485
+ # A motion in joint space with multiple waypoints. The robot will stop at each of these
486
+ # waypoints. If you want the robot to move continuously, you have to specify a target velocity
487
+ # at every waypoint as shown in the example following this one.
488
+ m_jp2 = JointWaypointMotion(
489
+ [
490
+ JointWaypoint([-0.3, 0.1, 0.3, -1.4, 0.1, 1.8, 0.7]),
491
+ JointWaypoint([0.0, 0.3, 0.3, -1.5, -0.2, 1.5, 0.8]),
492
+ JointWaypoint([0.1, 0.4, 0.3, -1.4, -0.3, 1.7, 0.9]),
493
+ ]
494
+ )
495
+
496
+ # Intermediate waypoints also permit to specify target velocities. The default target velocity
497
+ # is 0, meaning that the robot will stop at every waypoint.
498
+ m_jp3 = JointWaypointMotion(
499
+ [
500
+ JointWaypoint([-0.3, 0.1, 0.3, -1.4, 0.1, 1.8, 0.7]),
501
+ JointWaypoint(
502
+ JointState(
503
+ position=[0.0, 0.3, 0.3, -1.5, -0.2, 1.5, 0.8],
504
+ velocity=[0.1, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0],
505
+ )
506
+ ),
507
+ JointWaypoint([0.1, 0.4, 0.3, -1.4, -0.3, 1.7, 0.9]),
508
+ ]
509
+ )
510
+
511
+ # Stop the robot in joint position control mode. The difference of JointStopMotion to other
512
+ # stop-motions such as CartesianStopMotion is that JointStopMotion stops the robot in joint
513
+ # position control mode while CartesianStopMotion stops it in cartesian pose control mode. The
514
+ # difference becomes relevant when asynchronous move commands are being sent or reactions are
515
+ # being used(see below).
501
516
  m_jp4 = JointStopMotion()
502
517
  ```
503
518
 
@@ -507,18 +522,30 @@ m_jp4 = JointStopMotion()
507
522
  from franky import *
508
523
 
509
524
  # Accelerate to the given joint velocity and hold it. After 1000ms stop the robot again.
510
- m_jv1 = JointVelocityMotion([0.1, 0.3, -0.1, 0.0, 0.1, -0.2, 0.4], duration=Duration(1000))
511
-
512
- # Joint velocity motions also support waypoints. Unlike in joint position control, a joint velocity waypoint is a
513
- # target velocity to be reached. This particular example first accelerates the joints, holds the velocity for 1s, then
514
- # reverses direction for 2s, reverses direction again for 1s, and finally stops. It is important not to forget to stop
515
- # the robot at the end of such a sequence, as it will otherwise throw an error.
516
- m_jv2 = JointVelocityWaypointMotion([
517
- JointVelocityWaypoint([0.1, 0.3, -0.1, 0.0, 0.1, -0.2, 0.4], hold_target_duration=Duration(1000)),
518
- JointVelocityWaypoint([-0.1, -0.3, 0.1, -0.0, -0.1, 0.2, -0.4], hold_target_duration=Duration(2000)),
519
- JointVelocityWaypoint([0.1, 0.3, -0.1, 0.0, 0.1, -0.2, 0.4], hold_target_duration=Duration(1000)),
520
- JointVelocityWaypoint([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
521
- ])
525
+ m_jv1 = JointVelocityMotion(
526
+ [0.1, 0.3, -0.1, 0.0, 0.1, -0.2, 0.4], duration=Duration(1000)
527
+ )
528
+
529
+ # Joint velocity motions also support waypoints. Unlike in joint position control, a joint
530
+ # velocity waypoint is a target velocity to be reached. This particular example first
531
+ # accelerates the joints, holds the velocity for 1s, then reverses direction for 2s, reverses
532
+ # direction again for 1s, and finally stops. It is important not to forget to stop the robot
533
+ # at the end of such a sequence, as it will otherwise throw an error.
534
+ m_jv2 = JointVelocityWaypointMotion(
535
+ [
536
+ JointVelocityWaypoint(
537
+ [0.1, 0.3, -0.1, 0.0, 0.1, -0.2, 0.4], hold_target_duration=Duration(1000)
538
+ ),
539
+ JointVelocityWaypoint(
540
+ [-0.1, -0.3, 0.1, -0.0, -0.1, 0.2, -0.4],
541
+ hold_target_duration=Duration(2000),
542
+ ),
543
+ JointVelocityWaypoint(
544
+ [0.1, 0.3, -0.1, 0.0, 0.1, -0.2, 0.4], hold_target_duration=Duration(1000)
545
+ ),
546
+ JointVelocityWaypoint([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
547
+ ]
548
+ )
522
549
 
523
550
  # Stop the robot in joint velocity control mode.
524
551
  m_jv3 = JointVelocityStopMotion()
@@ -536,29 +563,44 @@ quat = Rotation.from_euler("xyz", [0, 0, math.pi / 2]).as_quat()
536
563
  m_cp1 = CartesianMotion(Affine([0.4, -0.2, 0.3], quat))
537
564
 
538
565
  # With target elbow angle (otherwise, the Franka firmware will choose by itself)
539
- m_cp2 = CartesianMotion(RobotPose(Affine([0.4, -0.2, 0.3], quat), elbow_state=ElbowState(0.3)))
566
+ m_cp2 = CartesianMotion(
567
+ RobotPose(Affine([0.4, -0.2, 0.3], quat), elbow_state=ElbowState(0.3))
568
+ )
540
569
 
541
570
  # A linear motion in cartesian space relative to the initial position
542
- # (Note that this motion is relative both in position and orientation. Hence, when the robot's end-effector is oriented
543
- # differently, it will move in a different direction)
571
+ # (Note that this motion is relative both in position and orientation. Hence, when the robot's
572
+ # end-effector is oriented differently, it will move in a different direction)
544
573
  m_cp3 = CartesianMotion(Affine([0.2, 0.0, 0.0]), ReferenceType.Relative)
545
574
 
546
- # Generalization of CartesianMotion that allows for multiple waypoints
547
- m_cp4 = CartesianWaypointMotion([
548
- CartesianWaypoint(RobotPose(Affine([0.4, -0.2, 0.3], quat), elbow_state=ElbowState(0.3))),
549
- # The following waypoint is relative to the prior one and 50% slower
550
- CartesianWaypoint(Affine([0.2, 0.0, 0.0]), ReferenceType.Relative, RelativeDynamicsFactor(0.5, 1.0, 1.0))
551
- ])
552
-
553
- # Cartesian waypoints also permit to specify target velocities
554
- m_cp5 = CartesianWaypointMotion([
555
- CartesianWaypoint(Affine([0.5, -0.2, 0.3], quat)),
556
- CartesianWaypoint(
557
- CartesianState(
558
- pose=Affine([0.4, -0.1, 0.3], quat),
559
- velocity=Twist([-0.01, 0.01, 0.0]))),
560
- CartesianWaypoint(Affine([0.3, 0.0, 0.3], quat))
561
- ])
575
+ # Generalization of CartesianMotion that allows for multiple waypoints. The robot will stop at
576
+ # each of these waypoints. If you want the robot to move continuously, you have to specify a
577
+ # target velocity at every waypoint as shown in the example following this one.
578
+ m_cp4 = CartesianWaypointMotion(
579
+ [
580
+ CartesianWaypoint(
581
+ RobotPose(Affine([0.4, -0.2, 0.3], quat), elbow_state=ElbowState(0.3))
582
+ ),
583
+ # The following waypoint is relative to the prior one and 50% slower
584
+ CartesianWaypoint(
585
+ Affine([0.2, 0.0, 0.0]),
586
+ ReferenceType.Relative,
587
+ RelativeDynamicsFactor(0.5, 1.0, 1.0),
588
+ ),
589
+ ]
590
+ )
591
+
592
+ # Cartesian waypoints permit to specify target velocities
593
+ m_cp5 = CartesianWaypointMotion(
594
+ [
595
+ CartesianWaypoint(Affine([0.5, -0.2, 0.3], quat)),
596
+ CartesianWaypoint(
597
+ CartesianState(
598
+ pose=Affine([0.4, -0.1, 0.3], quat), velocity=Twist([-0.01, 0.01, 0.0])
599
+ )
600
+ ),
601
+ CartesianWaypoint(Affine([0.3, 0.0, 0.3], quat)),
602
+ ]
603
+ )
562
604
 
563
605
  # Stop the robot in cartesian position control mode.
564
606
  m_cp6 = CartesianStopMotion()
@@ -569,22 +611,37 @@ m_cp6 = CartesianStopMotion()
569
611
  ```python
570
612
  from franky import *
571
613
 
572
- # A cartesian velocity motion with linear (first argument) and angular (second argument) components
614
+ # A cartesian velocity motion with linear (first argument) and angular (second argument)
615
+ # components
573
616
  m_cv1 = CartesianVelocityMotion(Twist([0.2, -0.1, 0.1], [0.1, -0.1, 0.2]))
574
617
 
575
618
  # With target elbow velocity
576
- m_cv2 = CartesianVelocityMotion(RobotVelocity(Twist([0.2, -0.1, 0.1], [0.1, -0.1, 0.2]), elbow_velocity=-0.2))
577
-
578
- # Cartesian velocity motions also support multiple waypoints. Unlike in cartesian position control, a cartesian velocity
579
- # waypoint is a target velocity to be reached. This particular example first accelerates the end-effector, holds the
580
- # velocity for 1s, then # reverses direction for 2s, reverses direction again for 1s, and finally stops. It is important
581
- # not to forget to stop # the robot at the end of such a sequence, as it will otherwise throw an error.
582
- m_cv4 = CartesianVelocityWaypointMotion([
583
- CartesianVelocityWaypoint(Twist([0.2, -0.1, 0.1], [0.1, -0.1, 0.2]), hold_target_duration=Duration(1000)),
584
- CartesianVelocityWaypoint(Twist([-0.2, 0.1, -0.1], [-0.1, 0.1, -0.2]), hold_target_duration=Duration(2000)),
585
- CartesianVelocityWaypoint(Twist([0.2, -0.1, 0.1], [0.1, -0.1, 0.2]), hold_target_duration=Duration(1000)),
586
- CartesianVelocityWaypoint(Twist()),
587
- ])
619
+ m_cv2 = CartesianVelocityMotion(
620
+ RobotVelocity(Twist([0.2, -0.1, 0.1], [0.1, -0.1, 0.2]), elbow_velocity=-0.2)
621
+ )
622
+
623
+ # Cartesian velocity motions also support multiple waypoints. Unlike in cartesian position
624
+ # control, a cartesian velocity waypoint is a target velocity to be reached. This particular
625
+ # example first accelerates the end-effector, holds the velocity for 1s, then reverses
626
+ # direction for 2s, reverses direction again for 1s, and finally stops. It is important not to
627
+ # forget to stop the robot at the end of such a sequence, as it will otherwise throw an error.
628
+ m_cv4 = CartesianVelocityWaypointMotion(
629
+ [
630
+ CartesianVelocityWaypoint(
631
+ Twist([0.2, -0.1, 0.1], [0.1, -0.1, 0.2]),
632
+ hold_target_duration=Duration(1000),
633
+ ),
634
+ CartesianVelocityWaypoint(
635
+ Twist([-0.2, 0.1, -0.1], [-0.1, 0.1, -0.2]),
636
+ hold_target_duration=Duration(2000),
637
+ ),
638
+ CartesianVelocityWaypoint(
639
+ Twist([0.2, -0.1, 0.1], [0.1, -0.1, 0.2]),
640
+ hold_target_duration=Duration(1000),
641
+ ),
642
+ CartesianVelocityWaypoint(Twist()),
643
+ ]
644
+ )
588
645
 
589
646
  # Stop the robot in cartesian velocity control mode.
590
647
  m_cv6 = CartesianVelocityStopMotion()
@@ -613,14 +670,15 @@ The real robot can be moved by applying a motion to the robot using `move`:
613
670
  ```python
614
671
  # Before moving the robot, set an appropriate dynamics factor. We start small:
615
672
  robot.relative_dynamics_factor = 0.05
616
- # or alternatively, to control the scaling of velocity, acceleration, and jerk limits separately:
673
+ # or alternatively, to control the scaling of velocity, acceleration, and jerk limits
674
+ # separately:
617
675
  robot.relative_dynamics_factor = RelativeDynamicsFactor(0.05, 0.1, 0.15)
618
676
  # If these values are set too high, you will see discontinuity errors
619
677
 
620
678
  robot.move(m_jp1)
621
679
 
622
- # We can also set a relative dynamics factor in the move command. It will be multiplied with the other relative
623
- # dynamics factors (robot and motion if present).
680
+ # We can also set a relative dynamics factor in the move command. It will be multiplied with
681
+ # the other relative dynamics factors (robot and motion if present).
624
682
  robot.move(m_jp2, relative_dynamics_factor=0.8)
625
683
  ```
626
684
 
@@ -635,7 +693,8 @@ def cb(
635
693
  time_step: Duration,
636
694
  rel_time: Duration,
637
695
  abs_time: Duration,
638
- control_signal: JointPositions):
696
+ control_signal: JointPositions,
697
+ ):
639
698
  print(f"At time {abs_time}, the target joint positions were {control_signal.q}")
640
699
 
641
700
 
@@ -660,9 +719,10 @@ from franky import CartesianMotion, Affine, ReferenceType, Measure, Reaction
660
719
 
661
720
  motion = CartesianMotion(Affine([0.0, 0.0, 0.1]), ReferenceType.Relative) # Move down 10cm
662
721
 
663
- # It is important that the reaction motion uses the same control mode as the original motion. Hence, we cannot register
664
- # a JointMotion as a reaction motion to a CartesianMotion.
665
- reaction_motion = CartesianMotion(Affine([0.0, 0.0, 0.01]), ReferenceType.Relative) # Move up for 1cm
722
+ # It is important that the reaction motion uses the same control mode as the original motion.
723
+ # Hence, we cannot register a JointMotion as a reaction motion to a CartesianMotion.
724
+ # Move up for 1cm
725
+ reaction_motion = CartesianMotion(Affine([0.0, 0.0, 0.01]), ReferenceType.Relative)
666
726
 
667
727
  # Trigger reaction if the Z force is greater than 30N
668
728
  reaction = Reaction(Measure.FORCE_Z > 30.0, reaction_motion)
@@ -725,7 +785,8 @@ them.
725
785
  In C++ you can additionally use lambdas to define more complex behaviours:
726
786
 
727
787
  ```c++
728
- auto motion = CartesianMotion(RobotPose(Affine({0.0, 0.0, 0.2}), 0.0), ReferenceType::Relative);
788
+ auto motion = CartesianMotion(
789
+ RobotPose(Affine({0.0, 0.0, 0.2}), 0.0), ReferenceType::Relative);
729
790
 
730
791
  // Stop motion if force is over 10N
731
792
  auto stop_motion = StopMotion<franka::CartesianPose>()
@@ -770,8 +831,8 @@ motion1 = CartesianMotion(Affine([0.2, 0.0, 0.0]), ReferenceType.Relative)
770
831
  robot.move(motion1, asynchronous=True)
771
832
 
772
833
  time.sleep(0.5)
773
- # Note that similar to reactions, when preempting active motions with new motions, the control mode cannot change.
774
- # Hence, we cannot use, e.g., a JointMotion here.
834
+ # Note that similar to reactions, when preempting active motions with new motions, the
835
+ # control mode cannot change. Hence, we cannot use, e.g., a JointMotion here.
775
836
  motion2 = CartesianMotion(Affine([0.2, 0.0, 0.0]), ReferenceType.Relative)
776
837
  robot.move(motion2, asynchronous=True)
777
838
  ```
@@ -882,15 +943,16 @@ import franky
882
943
  with franky.RobotWebSession("172.16.0.2", "username", "password") as robot_web_session:
883
944
  # First take control
884
945
  try:
885
- # Try taking control. The session currently holding control has to release it in order for this session to gain
886
- # control. In the web interface, a notification will show prompting the user to release control. If the other
887
- # session is another franky.RobotWebSession, then the `release_control` method can be called on the other
946
+ # Try taking control. The session currently holding control has to release it in order
947
+ # for this session to gain control. In the web interface, a notification will show
948
+ # prompting the user to release control. If the other session is another
949
+ # franky.RobotWebSession, then the `release_control` method can be called on the other
888
950
  # session to release control.
889
951
  robot_web_session.take_control(wait_timeout=10.0)
890
952
  except franky.TakeControlTimeoutError:
891
- # If nothing happens for 10s, we try to take control forcefully. This is particularly useful if the session
892
- # holding control is dead. Taking control by force requires the user to manually push the blue button close to
893
- # the robot's wrist.
953
+ # If nothing happens for 10s, we try to take control forcefully. This is particularly
954
+ # useful if the session holding control is dead. Taking control by force requires the
955
+ # user to manually push the blue button close to the robot's wrist.
894
956
  robot_web_session.take_control(wait_timeout=30.0, force=True)
895
957
 
896
958
  # Unlock the brakes
@@ -1,27 +1,27 @@
1
1
  franky/__init__.py,sha256=57BsmUytdeqMrhHglwvxMS6CgpAEVPw0KJge8_UTzEA,378
2
- franky/_franky.cpython-312-x86_64-linux-gnu.so,sha256=WqpkO-oOweEDw0h29djjem1CXPEu3sqyJmb5fapBuL8,3092241
2
+ franky/_franky.cpython-312-x86_64-linux-gnu.so,sha256=5B1M6K3ZF_4GAYxa2SZQ4FOxbtRDwOvicvE-tqB8DDc,3088145
3
3
  franky/_franky.pyi,sha256=odBnBaM2qGN4mUa8WvFN5SL9aszPgDTsZj5Jb9UkFHk,60047
4
4
  franky/motion.py,sha256=TWsx2Ba9iYG9e-OxpuYZlVn1wdzKS-Zvz6ayHT_HYXQ,354
5
5
  franky/reaction.py,sha256=cBuHAMek9yH-9Zmwfa0dzz2t5G_1SQEWXNdW7mhhCI8,1519
6
6
  franky/robot.py,sha256=NaTNh4PaJshbz44eibvLCMt6O_Ak7TRVjhUR6AGay9A,236
7
7
  franky/robot_web_session.py,sha256=rYpnUe4b8xj5JjCYxNRZ0uYz8lL2qfxKglcImFDw24Y,9070
8
- franky_control.libs/libPocoFoundation-91a48101.so.95,sha256=ayW6qwws-4x4I7Ee3WK4LRRAyaQuTvbGuEBTkjZy7CU,3273833
9
- franky_control.libs/libPocoNet-9e586dc9.so.95,sha256=KQ6mL1nO9NlXzpp7NcBAKLxC9vjzNd_l9Jy8ldXlotU,2504833
8
+ franky_control.libs/libPocoFoundation-f89fb772.so.95,sha256=A0oHaur1iDxchjWqfovXRVErOXiejfmovbF822E85X0,3273833
9
+ franky_control.libs/libPocoNet-a223dcdc.so.95,sha256=O3cuTFzfIGblEZfYsi3K5A3ZqVHOxZGdO3nLjbhjyi4,2504833
10
10
  franky_control.libs/libboost_filesystem-38deced9.so.1.66.0,sha256=-thu-LYmEDUKnOhQw3njV9C58dVZV12pn_6-KoqDCeI,145241
11
11
  franky_control.libs/libboost_serialization-3aa46b41.so.1.66.0,sha256=KpSA9K4iakzd-Mvv5JvPSqxJyMYsVkcIXrUbSlAkiIo,316673
12
12
  franky_control.libs/libboost_system-69a6c43e.so.1.66.0,sha256=sd_lA0coUWXm-bluxkOkNrzrxFSAXYDphjPDwBekik8,22905
13
13
  franky_control.libs/libconsole_bridge-def124d9.so.0.3,sha256=Eg1wJzVIRG5GQhyr59_qdYgnmhto0orU0j8HW2A0JIg,27297
14
14
  franky_control.libs/libfmt-8375f6bf.so.6.2.1,sha256=Z8D_NYG4rsuwMIYP3KfNB95w7vnsPaV5XLm2EnWd9Fk,327441
15
- franky_control.libs/libfranka-92ddaf43.so.0.15.0,sha256=pVavBW1460_MHqwSDTbwkE5vUfGTOi2PnZjSVQRvwOY,1145681
16
- franky_control.libs/libpinocchio_default-53a889f9.so.3.1.0,sha256=1us8TU8dwRDiCeB-sUnSx2w_Czcr7E-QC21VVO_ht0g,9255841
17
- franky_control.libs/libpinocchio_parsers-a0902fb5.so.3.1.0,sha256=hsF6GO3VBJu034O1PxRlQSTyGmFKaEdO1_lN7Z3bbgM,713129
15
+ franky_control.libs/libfranka-92ddaf43.so.0.15.0,sha256=Y7nghb_GOpYJGbMrfbOK05Y6ZLUtUAmAVtR6mf8z4YE,1145681
16
+ franky_control.libs/libpinocchio_default-17c55e05.so.3.1.0,sha256=lZeast2gvpf-bgquvk4fMGcfhIXHFqh5liUOtMID6bs,9255841
17
+ franky_control.libs/libpinocchio_parsers-f66a7fc8.so.3.1.0,sha256=ZSeVjF9KthVN4UZVJ0lfwydOG6EgvzTu1VXb1STGg_E,713129
18
18
  franky_control.libs/libtinyxml-435d1f53.so.0.2.6.2,sha256=BGSkG-zXEYTuGquHhydNow2ufOetDZpEP7MbBZyf6hA,120209
19
19
  franky_control.libs/liburdfdom_model-9e7b5a88.so.1.0,sha256=c4cAZ09SHlu-dpMZmwsxC8Ydklm8RzEANxvdJHeh4Ho,187561
20
20
  franky_control.libs/liburdfdom_model_state-741cbb83.so.1.0,sha256=NvqLfm2u-YlCihr5GRoUGL6iJMLRHm-RFEmR0he5csM,59105
21
21
  franky_control.libs/liburdfdom_sensor-5dbb5bb4.so.1.0,sha256=udrHZ0oYFTf9qwr8hm8rSrBKZDkd1L5yy5tyh10D018,51777
22
22
  franky_control.libs/liburdfdom_world-bd943329.so.1.0,sha256=ja9WE45nXtAGUoLpg1T1Hte8BZLldj_WNf9cL3H1RPk,187561
23
- franky_control-1.1.0.dist-info/METADATA,sha256=O0HKEVVI_VNuEOVFEocwKNl_9oUXK3EssjRIdvLxnHM,40320
24
- franky_control-1.1.0.dist-info/WHEEL,sha256=VXvNKn6nFeCM45GEUrNLJOO_J_e-cNJphGt9rWFxyE0,113
25
- franky_control-1.1.0.dist-info/top_level.txt,sha256=LdDKRvHTODs6ll6Ow5b-gmWqt4NJffHxL83MRTCv_Ag,22
26
- franky_control-1.1.0.dist-info/RECORD,,
27
- franky_control-1.1.0.dist-info/licenses/LICENSE,sha256=2n6rt7r999OuXp8iOqW9we7ORaxWncIbOwN1ILRGR2g,7651
23
+ franky_control-1.1.1.dist-info/METADATA,sha256=qWzLTDDTUNcAXq0Fwd1Q_WKklCocvIg1RhaxlP7VLPI,41222
24
+ franky_control-1.1.1.dist-info/WHEEL,sha256=VXvNKn6nFeCM45GEUrNLJOO_J_e-cNJphGt9rWFxyE0,113
25
+ franky_control-1.1.1.dist-info/top_level.txt,sha256=LdDKRvHTODs6ll6Ow5b-gmWqt4NJffHxL83MRTCv_Ag,22
26
+ franky_control-1.1.1.dist-info/RECORD,,
27
+ franky_control-1.1.1.dist-info/licenses/LICENSE,sha256=2n6rt7r999OuXp8iOqW9we7ORaxWncIbOwN1ILRGR2g,7651
index 17121d8..dc82175 100755
Binary file