franky-control 1.1.0__cp38-cp38-manylinux_2_34_x86_64.whl → 1.1.1__cp38-cp38-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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
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
@@ -97,6 +97,7 @@ otherwise, follow the [setup instructions](#setup) first.
97
97
 
98
98
  Now we are already ready to go!
99
99
  Unlock the brakes in the web interface, activate FCI, and start coding:
100
+
100
101
  ```python
101
102
  from franky import *
102
103
 
@@ -196,37 +197,7 @@ pip install numpy
196
197
  pip install --no-index --find-links=./dist franky-control
197
198
  ```
198
199
 
199
- Franky is based on [libfranka](https://github.com/frankaemika/libfranka), [Eigen](https://eigen.tuxfamily.org) for
200
- transformation calculations and [pybind11](https://github.com/pybind/pybind11) for the Python bindings.
201
- As the Franka is sensitive to acceleration discontinuities, it requires jerk-constrained motion generation, for which
202
- Franky uses the [Ruckig](https://ruckig.com) community version for Online Trajectory Generation (OTG).
203
-
204
- After installing the dependencies (the exact versions can be found [here](#-development)), you can build and install
205
- Franky via
206
-
207
- ```bash
208
- git clone --recurse-submodules git@github.com:timschneider42/franky.git
209
- cd franky
210
- mkdir -p build
211
- cd build
212
- cmake -DCMAKE_BUILD_TYPE=Release ..
213
- make
214
- make install
215
- ```
216
-
217
- To use Franky, you can also include it as a subproject in your parent CMake via `add_subdirectory(franky)` and then
218
- `target_link_libraries(<target> franky)`.
219
-
220
- If you need only the Python module, you can install Franky via
221
-
222
- ```bash
223
- pip install .
224
- ```
225
-
226
- Make sure that the built library `_franky.cpython-3**-****-linux-gnu.so` is in the Python path, e.g. by adjusting
227
- `PYTHONPATH` accordingly.
228
-
229
- #### Using Docker
200
+ ### Using Docker
230
201
 
231
202
  To use Franky within Docker we provide a [Dockerfile](docker/run/Dockerfile) and
232
203
  accompanying [docker-compose](docker-compose.yml) file.
@@ -252,16 +223,6 @@ docker compose run franky-run bash
252
223
  The container requires access to the host machines network *and* elevated user rights to allow the docker user to set RT
253
224
  capabilities of the processes run from within it.
254
225
 
255
- #### Building Franky with Docker
256
-
257
- For building Franky and its wheels, we provide another Docker container that can also be launched using docker-compose:
258
-
259
- ```bash
260
- docker compose build franky-build
261
- docker compose run --rm franky-build run-tests # To run the tests
262
- docker compose run --rm franky-build build-wheels # To build wheels for all supported python versions
263
- ```
264
-
265
226
  ### Can I use CUDA jointly with Franky?
266
227
 
267
228
  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.
@@ -288,6 +249,48 @@ Alternatively, if you are a cowboy and do not care about security, you can also
288
249
  bash <(wget -qO- https://raw.githubusercontent.com/timschneider42/franky/master/tools/install_cuda_realtime.bash)
289
250
  ```
290
251
 
252
+ ### Building Franky
253
+
254
+ Franky is based on [libfranka](https://github.com/frankaemika/libfranka), [Eigen](https://eigen.tuxfamily.org) for
255
+ transformation calculations and [pybind11](https://github.com/pybind/pybind11) for the Python bindings.
256
+ As the Franka is sensitive to acceleration discontinuities, it requires jerk-constrained motion generation, for which
257
+ Franky uses the [Ruckig](https://ruckig.com) community version for Online Trajectory Generation (OTG).
258
+
259
+ After installing the dependencies (the exact versions can be found [here](#-development)), you can build and install
260
+ Franky via
261
+
262
+ ```bash
263
+ git clone --recurse-submodules git@github.com:timschneider42/franky.git
264
+ cd franky
265
+ mkdir -p build
266
+ cd build
267
+ cmake -DCMAKE_BUILD_TYPE=Release ..
268
+ make
269
+ make install
270
+ ```
271
+
272
+ To use Franky, you can also include it as a subproject in your parent CMake via `add_subdirectory(franky)` and then
273
+ `target_link_libraries(<target> franky)`.
274
+
275
+ If you need only the Python module, you can install Franky via
276
+
277
+ ```bash
278
+ pip install .
279
+ ```
280
+
281
+ Make sure that the built library `_franky.cpython-3**-****-linux-gnu.so` is in the Python path, e.g. by adjusting
282
+ `PYTHONPATH` accordingly.
283
+
284
+ #### Building Franky with Docker
285
+
286
+ For building Franky and its wheels, we provide another Docker container that can also be launched using docker-compose:
287
+
288
+ ```bash
289
+ docker compose build franky-build
290
+ docker compose run --rm franky-build run-tests # To run the tests
291
+ docker compose run --rm franky-build build-wheels # To build wheels for all supported python versions
292
+ ```
293
+
291
294
  ## 📚 Tutorial
292
295
 
293
296
  Franky comes with both a C++ and Python API that differ only regarding real-time capability.
@@ -368,7 +371,9 @@ robot.recover_from_errors()
368
371
  robot.relative_dynamics_factor = 0.05
369
372
 
370
373
  # Alternatively, you can define each constraint individually
371
- robot.relative_dynamics_factor = RelativeDynamicsFactor(velocity=0.1, acceleration=0.05, jerk=0.1)
374
+ robot.relative_dynamics_factor = RelativeDynamicsFactor(
375
+ velocity=0.1, acceleration=0.05, jerk=0.1
376
+ )
372
377
 
373
378
  # Or, for more finegrained access, set individual limits
374
379
  robot.translation_velocity_limit.set(3.0)
@@ -436,7 +441,8 @@ ee_pose_kin = robot.model.pose(Frame.EndEffector, q, f_t_ee, ee_t_k)
436
441
  # Get the jacobian of the current robot state
437
442
  jacobian = robot.model.body_jacobian(Frame.EndEffector, state)
438
443
 
439
- # Alternatively, just get the URDF as string and do the kinematics computation yourself (only for libfranka >= 0.15.0)
444
+ # Alternatively, just get the URDF as string and do the kinematics computation yourself (only
445
+ # for libfranka >= 0.15.0)
440
446
  urdf_model = robot.model_urdf
441
447
  ```
442
448
 
@@ -464,28 +470,37 @@ from franky import *
464
470
  # A point-to-point motion in the joint space
465
471
  m_jp1 = JointMotion([-0.3, 0.1, 0.3, -1.4, 0.1, 1.8, 0.7])
466
472
 
467
- # A motion in joint space with multiple waypoints
468
- m_jp2 = JointWaypointMotion([
469
- JointWaypoint([-0.3, 0.1, 0.3, -1.4, 0.1, 1.8, 0.7]),
470
- JointWaypoint([0.0, 0.3, 0.3, -1.5, -0.2, 1.5, 0.8]),
471
- JointWaypoint([0.1, 0.4, 0.3, -1.4, -0.3, 1.7, 0.9])
472
- ])
473
-
474
- # Intermediate waypoints also permit to specify target velocities. The default target velocity is 0, meaning that the
475
- # robot will stop at every waypoint.
476
- m_jp3 = JointWaypointMotion([
477
- JointWaypoint([-0.3, 0.1, 0.3, -1.4, 0.1, 1.8, 0.7]),
478
- JointWaypoint(
479
- JointState(
480
- position=[0.0, 0.3, 0.3, -1.5, -0.2, 1.5, 0.8],
481
- velocity=[0.1, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0])),
482
- JointWaypoint([0.1, 0.4, 0.3, -1.4, -0.3, 1.7, 0.9])
483
- ])
484
-
485
- # Stop the robot in joint position control mode. The difference of JointStopMotion to other stop motions such as
486
- # CartesianStopMotion is that # JointStopMotion # stops the robot in joint position control mode while
487
- # CartesianStopMotion stops it in cartesian pose control mode. The difference becomes relevant when asynchronous move
488
- # commands are being sent or reactions are being used(see below).
473
+ # A motion in joint space with multiple waypoints. The robot will stop at each of these
474
+ # waypoints. If you want the robot to move continuously, you have to specify a target velocity
475
+ # at every waypoint as shown in the example following this one.
476
+ m_jp2 = JointWaypointMotion(
477
+ [
478
+ JointWaypoint([-0.3, 0.1, 0.3, -1.4, 0.1, 1.8, 0.7]),
479
+ JointWaypoint([0.0, 0.3, 0.3, -1.5, -0.2, 1.5, 0.8]),
480
+ JointWaypoint([0.1, 0.4, 0.3, -1.4, -0.3, 1.7, 0.9]),
481
+ ]
482
+ )
483
+
484
+ # Intermediate waypoints also permit to specify target velocities. The default target velocity
485
+ # is 0, meaning that the robot will stop at every waypoint.
486
+ m_jp3 = JointWaypointMotion(
487
+ [
488
+ JointWaypoint([-0.3, 0.1, 0.3, -1.4, 0.1, 1.8, 0.7]),
489
+ JointWaypoint(
490
+ JointState(
491
+ position=[0.0, 0.3, 0.3, -1.5, -0.2, 1.5, 0.8],
492
+ velocity=[0.1, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0],
493
+ )
494
+ ),
495
+ JointWaypoint([0.1, 0.4, 0.3, -1.4, -0.3, 1.7, 0.9]),
496
+ ]
497
+ )
498
+
499
+ # Stop the robot in joint position control mode. The difference of JointStopMotion to other
500
+ # stop-motions such as CartesianStopMotion is that JointStopMotion stops the robot in joint
501
+ # position control mode while CartesianStopMotion stops it in cartesian pose control mode. The
502
+ # difference becomes relevant when asynchronous move commands are being sent or reactions are
503
+ # being used(see below).
489
504
  m_jp4 = JointStopMotion()
490
505
  ```
491
506
 
@@ -495,18 +510,30 @@ m_jp4 = JointStopMotion()
495
510
  from franky import *
496
511
 
497
512
  # Accelerate to the given joint velocity and hold it. After 1000ms stop the robot again.
498
- m_jv1 = JointVelocityMotion([0.1, 0.3, -0.1, 0.0, 0.1, -0.2, 0.4], duration=Duration(1000))
499
-
500
- # Joint velocity motions also support waypoints. Unlike in joint position control, a joint velocity waypoint is a
501
- # target velocity to be reached. This particular example first accelerates the joints, holds the velocity for 1s, then
502
- # reverses direction for 2s, reverses direction again for 1s, and finally stops. It is important not to forget to stop
503
- # the robot at the end of such a sequence, as it will otherwise throw an error.
504
- m_jv2 = JointVelocityWaypointMotion([
505
- JointVelocityWaypoint([0.1, 0.3, -0.1, 0.0, 0.1, -0.2, 0.4], hold_target_duration=Duration(1000)),
506
- JointVelocityWaypoint([-0.1, -0.3, 0.1, -0.0, -0.1, 0.2, -0.4], hold_target_duration=Duration(2000)),
507
- JointVelocityWaypoint([0.1, 0.3, -0.1, 0.0, 0.1, -0.2, 0.4], hold_target_duration=Duration(1000)),
508
- JointVelocityWaypoint([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
509
- ])
513
+ m_jv1 = JointVelocityMotion(
514
+ [0.1, 0.3, -0.1, 0.0, 0.1, -0.2, 0.4], duration=Duration(1000)
515
+ )
516
+
517
+ # Joint velocity motions also support waypoints. Unlike in joint position control, a joint
518
+ # velocity waypoint is a target velocity to be reached. This particular example first
519
+ # accelerates the joints, holds the velocity for 1s, then reverses direction for 2s, reverses
520
+ # direction again for 1s, and finally stops. It is important not to forget to stop the robot
521
+ # at the end of such a sequence, as it will otherwise throw an error.
522
+ m_jv2 = JointVelocityWaypointMotion(
523
+ [
524
+ JointVelocityWaypoint(
525
+ [0.1, 0.3, -0.1, 0.0, 0.1, -0.2, 0.4], hold_target_duration=Duration(1000)
526
+ ),
527
+ JointVelocityWaypoint(
528
+ [-0.1, -0.3, 0.1, -0.0, -0.1, 0.2, -0.4],
529
+ hold_target_duration=Duration(2000),
530
+ ),
531
+ JointVelocityWaypoint(
532
+ [0.1, 0.3, -0.1, 0.0, 0.1, -0.2, 0.4], hold_target_duration=Duration(1000)
533
+ ),
534
+ JointVelocityWaypoint([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]),
535
+ ]
536
+ )
510
537
 
511
538
  # Stop the robot in joint velocity control mode.
512
539
  m_jv3 = JointVelocityStopMotion()
@@ -524,29 +551,44 @@ quat = Rotation.from_euler("xyz", [0, 0, math.pi / 2]).as_quat()
524
551
  m_cp1 = CartesianMotion(Affine([0.4, -0.2, 0.3], quat))
525
552
 
526
553
  # With target elbow angle (otherwise, the Franka firmware will choose by itself)
527
- m_cp2 = CartesianMotion(RobotPose(Affine([0.4, -0.2, 0.3], quat), elbow_state=ElbowState(0.3)))
554
+ m_cp2 = CartesianMotion(
555
+ RobotPose(Affine([0.4, -0.2, 0.3], quat), elbow_state=ElbowState(0.3))
556
+ )
528
557
 
529
558
  # A linear motion in cartesian space relative to the initial position
530
- # (Note that this motion is relative both in position and orientation. Hence, when the robot's end-effector is oriented
531
- # differently, it will move in a different direction)
559
+ # (Note that this motion is relative both in position and orientation. Hence, when the robot's
560
+ # end-effector is oriented differently, it will move in a different direction)
532
561
  m_cp3 = CartesianMotion(Affine([0.2, 0.0, 0.0]), ReferenceType.Relative)
533
562
 
534
- # Generalization of CartesianMotion that allows for multiple waypoints
535
- m_cp4 = CartesianWaypointMotion([
536
- CartesianWaypoint(RobotPose(Affine([0.4, -0.2, 0.3], quat), elbow_state=ElbowState(0.3))),
537
- # The following waypoint is relative to the prior one and 50% slower
538
- CartesianWaypoint(Affine([0.2, 0.0, 0.0]), ReferenceType.Relative, RelativeDynamicsFactor(0.5, 1.0, 1.0))
539
- ])
540
-
541
- # Cartesian waypoints also permit to specify target velocities
542
- m_cp5 = CartesianWaypointMotion([
543
- CartesianWaypoint(Affine([0.5, -0.2, 0.3], quat)),
544
- CartesianWaypoint(
545
- CartesianState(
546
- pose=Affine([0.4, -0.1, 0.3], quat),
547
- velocity=Twist([-0.01, 0.01, 0.0]))),
548
- CartesianWaypoint(Affine([0.3, 0.0, 0.3], quat))
549
- ])
563
+ # Generalization of CartesianMotion that allows for multiple waypoints. The robot will stop at
564
+ # each of these waypoints. If you want the robot to move continuously, you have to specify a
565
+ # target velocity at every waypoint as shown in the example following this one.
566
+ m_cp4 = CartesianWaypointMotion(
567
+ [
568
+ CartesianWaypoint(
569
+ RobotPose(Affine([0.4, -0.2, 0.3], quat), elbow_state=ElbowState(0.3))
570
+ ),
571
+ # The following waypoint is relative to the prior one and 50% slower
572
+ CartesianWaypoint(
573
+ Affine([0.2, 0.0, 0.0]),
574
+ ReferenceType.Relative,
575
+ RelativeDynamicsFactor(0.5, 1.0, 1.0),
576
+ ),
577
+ ]
578
+ )
579
+
580
+ # Cartesian waypoints permit to specify target velocities
581
+ m_cp5 = CartesianWaypointMotion(
582
+ [
583
+ CartesianWaypoint(Affine([0.5, -0.2, 0.3], quat)),
584
+ CartesianWaypoint(
585
+ CartesianState(
586
+ pose=Affine([0.4, -0.1, 0.3], quat), velocity=Twist([-0.01, 0.01, 0.0])
587
+ )
588
+ ),
589
+ CartesianWaypoint(Affine([0.3, 0.0, 0.3], quat)),
590
+ ]
591
+ )
550
592
 
551
593
  # Stop the robot in cartesian position control mode.
552
594
  m_cp6 = CartesianStopMotion()
@@ -557,22 +599,37 @@ m_cp6 = CartesianStopMotion()
557
599
  ```python
558
600
  from franky import *
559
601
 
560
- # A cartesian velocity motion with linear (first argument) and angular (second argument) components
602
+ # A cartesian velocity motion with linear (first argument) and angular (second argument)
603
+ # components
561
604
  m_cv1 = CartesianVelocityMotion(Twist([0.2, -0.1, 0.1], [0.1, -0.1, 0.2]))
562
605
 
563
606
  # With target elbow velocity
564
- m_cv2 = CartesianVelocityMotion(RobotVelocity(Twist([0.2, -0.1, 0.1], [0.1, -0.1, 0.2]), elbow_velocity=-0.2))
565
-
566
- # Cartesian velocity motions also support multiple waypoints. Unlike in cartesian position control, a cartesian velocity
567
- # waypoint is a target velocity to be reached. This particular example first accelerates the end-effector, holds the
568
- # velocity for 1s, then # reverses direction for 2s, reverses direction again for 1s, and finally stops. It is important
569
- # not to forget to stop # the robot at the end of such a sequence, as it will otherwise throw an error.
570
- m_cv4 = CartesianVelocityWaypointMotion([
571
- CartesianVelocityWaypoint(Twist([0.2, -0.1, 0.1], [0.1, -0.1, 0.2]), hold_target_duration=Duration(1000)),
572
- CartesianVelocityWaypoint(Twist([-0.2, 0.1, -0.1], [-0.1, 0.1, -0.2]), hold_target_duration=Duration(2000)),
573
- CartesianVelocityWaypoint(Twist([0.2, -0.1, 0.1], [0.1, -0.1, 0.2]), hold_target_duration=Duration(1000)),
574
- CartesianVelocityWaypoint(Twist()),
575
- ])
607
+ m_cv2 = CartesianVelocityMotion(
608
+ RobotVelocity(Twist([0.2, -0.1, 0.1], [0.1, -0.1, 0.2]), elbow_velocity=-0.2)
609
+ )
610
+
611
+ # Cartesian velocity motions also support multiple waypoints. Unlike in cartesian position
612
+ # control, a cartesian velocity waypoint is a target velocity to be reached. This particular
613
+ # example first accelerates the end-effector, holds the velocity for 1s, then reverses
614
+ # direction for 2s, reverses direction again for 1s, and finally stops. It is important not to
615
+ # forget to stop the robot at the end of such a sequence, as it will otherwise throw an error.
616
+ m_cv4 = CartesianVelocityWaypointMotion(
617
+ [
618
+ CartesianVelocityWaypoint(
619
+ Twist([0.2, -0.1, 0.1], [0.1, -0.1, 0.2]),
620
+ hold_target_duration=Duration(1000),
621
+ ),
622
+ CartesianVelocityWaypoint(
623
+ Twist([-0.2, 0.1, -0.1], [-0.1, 0.1, -0.2]),
624
+ hold_target_duration=Duration(2000),
625
+ ),
626
+ CartesianVelocityWaypoint(
627
+ Twist([0.2, -0.1, 0.1], [0.1, -0.1, 0.2]),
628
+ hold_target_duration=Duration(1000),
629
+ ),
630
+ CartesianVelocityWaypoint(Twist()),
631
+ ]
632
+ )
576
633
 
577
634
  # Stop the robot in cartesian velocity control mode.
578
635
  m_cv6 = CartesianVelocityStopMotion()
@@ -601,14 +658,15 @@ The real robot can be moved by applying a motion to the robot using `move`:
601
658
  ```python
602
659
  # Before moving the robot, set an appropriate dynamics factor. We start small:
603
660
  robot.relative_dynamics_factor = 0.05
604
- # or alternatively, to control the scaling of velocity, acceleration, and jerk limits separately:
661
+ # or alternatively, to control the scaling of velocity, acceleration, and jerk limits
662
+ # separately:
605
663
  robot.relative_dynamics_factor = RelativeDynamicsFactor(0.05, 0.1, 0.15)
606
664
  # If these values are set too high, you will see discontinuity errors
607
665
 
608
666
  robot.move(m_jp1)
609
667
 
610
- # We can also set a relative dynamics factor in the move command. It will be multiplied with the other relative
611
- # dynamics factors (robot and motion if present).
668
+ # We can also set a relative dynamics factor in the move command. It will be multiplied with
669
+ # the other relative dynamics factors (robot and motion if present).
612
670
  robot.move(m_jp2, relative_dynamics_factor=0.8)
613
671
  ```
614
672
 
@@ -623,7 +681,8 @@ def cb(
623
681
  time_step: Duration,
624
682
  rel_time: Duration,
625
683
  abs_time: Duration,
626
- control_signal: JointPositions):
684
+ control_signal: JointPositions,
685
+ ):
627
686
  print(f"At time {abs_time}, the target joint positions were {control_signal.q}")
628
687
 
629
688
 
@@ -648,9 +707,10 @@ from franky import CartesianMotion, Affine, ReferenceType, Measure, Reaction
648
707
 
649
708
  motion = CartesianMotion(Affine([0.0, 0.0, 0.1]), ReferenceType.Relative) # Move down 10cm
650
709
 
651
- # It is important that the reaction motion uses the same control mode as the original motion. Hence, we cannot register
652
- # a JointMotion as a reaction motion to a CartesianMotion.
653
- reaction_motion = CartesianMotion(Affine([0.0, 0.0, 0.01]), ReferenceType.Relative) # Move up for 1cm
710
+ # It is important that the reaction motion uses the same control mode as the original motion.
711
+ # Hence, we cannot register a JointMotion as a reaction motion to a CartesianMotion.
712
+ # Move up for 1cm
713
+ reaction_motion = CartesianMotion(Affine([0.0, 0.0, 0.01]), ReferenceType.Relative)
654
714
 
655
715
  # Trigger reaction if the Z force is greater than 30N
656
716
  reaction = Reaction(Measure.FORCE_Z > 30.0, reaction_motion)
@@ -713,7 +773,8 @@ them.
713
773
  In C++ you can additionally use lambdas to define more complex behaviours:
714
774
 
715
775
  ```c++
716
- auto motion = CartesianMotion(RobotPose(Affine({0.0, 0.0, 0.2}), 0.0), ReferenceType::Relative);
776
+ auto motion = CartesianMotion(
777
+ RobotPose(Affine({0.0, 0.0, 0.2}), 0.0), ReferenceType::Relative);
717
778
 
718
779
  // Stop motion if force is over 10N
719
780
  auto stop_motion = StopMotion<franka::CartesianPose>()
@@ -758,8 +819,8 @@ motion1 = CartesianMotion(Affine([0.2, 0.0, 0.0]), ReferenceType.Relative)
758
819
  robot.move(motion1, asynchronous=True)
759
820
 
760
821
  time.sleep(0.5)
761
- # Note that similar to reactions, when preempting active motions with new motions, the control mode cannot change.
762
- # Hence, we cannot use, e.g., a JointMotion here.
822
+ # Note that similar to reactions, when preempting active motions with new motions, the
823
+ # control mode cannot change. Hence, we cannot use, e.g., a JointMotion here.
763
824
  motion2 = CartesianMotion(Affine([0.2, 0.0, 0.0]), ReferenceType.Relative)
764
825
  robot.move(motion2, asynchronous=True)
765
826
  ```
@@ -870,15 +931,16 @@ import franky
870
931
  with franky.RobotWebSession("172.16.0.2", "username", "password") as robot_web_session:
871
932
  # First take control
872
933
  try:
873
- # Try taking control. The session currently holding control has to release it in order for this session to gain
874
- # control. In the web interface, a notification will show prompting the user to release control. If the other
875
- # session is another franky.RobotWebSession, then the `release_control` method can be called on the other
934
+ # Try taking control. The session currently holding control has to release it in order
935
+ # for this session to gain control. In the web interface, a notification will show
936
+ # prompting the user to release control. If the other session is another
937
+ # franky.RobotWebSession, then the `release_control` method can be called on the other
876
938
  # session to release control.
877
939
  robot_web_session.take_control(wait_timeout=10.0)
878
940
  except franky.TakeControlTimeoutError:
879
- # If nothing happens for 10s, we try to take control forcefully. This is particularly useful if the session
880
- # holding control is dead. Taking control by force requires the user to manually push the blue button close to
881
- # the robot's wrist.
941
+ # If nothing happens for 10s, we try to take control forcefully. This is particularly
942
+ # useful if the session holding control is dead. Taking control by force requires the
943
+ # user to manually push the blue button close to the robot's wrist.
882
944
  robot_web_session.take_control(wait_timeout=30.0, force=True)
883
945
 
884
946
  # Unlock the brakes
@@ -1,26 +1,26 @@
1
1
  franky/__init__.py,sha256=57BsmUytdeqMrhHglwvxMS6CgpAEVPw0KJge8_UTzEA,378
2
- franky/_franky.cpython-38-x86_64-linux-gnu.so,sha256=DfE2rLEp2ab3Li471Jt0cVZ39Ka0J6zLxmAxiWKJ6-w,3049137
2
+ franky/_franky.cpython-38-x86_64-linux-gnu.so,sha256=ma1dPQVos-S7VtmVPwIQjbHXm0WAAeMl_5f327vUc5U,3049137
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-13a5b20e.so.95,sha256=rxMloAr9p8n7VjzdcsgOc1Gt0_jLczPil9R33w9wsoQ,3269633
9
- franky_control.libs/libPocoNet-8bb0f68b.so.95,sha256=J3GvO79BxFia9l2UeHvseDIPhJ1660hAz5kY4L2SYJU,2482737
8
+ franky_control.libs/libPocoFoundation-44d67b9f.so.95,sha256=6sSpoT5WNjvmbsEdjYvp5uu8nhEx-elAH67Gw8I2twA,3269633
9
+ franky_control.libs/libPocoNet-3bdfeb79.so.95,sha256=_ZbdxzOFhIIiSHA79e8yKNyCjfGVFbzYFvHqaKnqoFc,2482737
10
10
  franky_control.libs/libboost_filesystem-0bf67256.so.1.75.0,sha256=MV-QRMY_pZ0zReU4H4AbcpyZ_sc6yZ6QR6QdDxF84Qc,139961
11
11
  franky_control.libs/libboost_serialization-67da18f6.so.1.75.0,sha256=Wjn9rKqoXLrVK29NShhm_evaRsbhTFvvGydi8gwr5hs,319177
12
12
  franky_control.libs/libconsole_bridge-acce180d.so.1.0,sha256=-iSKX9xNyLCSSrducf7rDx6hXzdU5v7xQqZDulppIP8,22769
13
13
  franky_control.libs/libfmt-677b7a5c.so.8.1.1,sha256=rN3uzEn_limS_u6DV-BxdTEbs2GrhlicD_OjyAlKYpA,140649
14
- franky_control.libs/libfranka-e5e9247f.so.0.15.0,sha256=gosudHQR1C6GTEsZmAW_YFtr7hBawo6Sgg6aePXKUDw,973497
15
- franky_control.libs/libpinocchio_default-5f84cd5d.so.3.1.0,sha256=GcnCciSRaTTx7nUBv40Ba6HpxLtCHYnEw91hdjm_dps,9668545
16
- franky_control.libs/libpinocchio_parsers-a0b97441.so.3.1.0,sha256=Y5XBw0UOgT1xkvBk-v-QHYGwsk9UQDkPd377uN-W5AE,707441
14
+ franky_control.libs/libfranka-e5e9247f.so.0.15.0,sha256=rJDob_PoDQHpC78J-rhR67oqlhmlTnS2Red0bClsi2I,973497
15
+ franky_control.libs/libpinocchio_default-def973fb.so.3.1.0,sha256=cMnEW8NgbxqYEpdZH0Ymp-B5SEKzGiKq4GA0BcZ-JV4,9668545
16
+ franky_control.libs/libpinocchio_parsers-d98f9e85.so.3.1.0,sha256=HbwrdisSDbC2mXCz1NVhACUIaXconvI3i-BN1W9qJuE,707441
17
17
  franky_control.libs/libtinyxml-69e5f0dd.so.0.2.6.2,sha256=V45jOzaljaUrtOAYBS20QBFHn0qPFHTEcWxdcOBoJNA,118121
18
18
  franky_control.libs/liburdfdom_model-9ec0392f.so.1.0,sha256=Kwlq8DuENLdEX5URKcwUC06sl9rxUYoRjGx3EI-uRiY,146081
19
19
  franky_control.libs/liburdfdom_model_state-01125232.so.1.0,sha256=LNMEG27nv_6BYvelpjXjr0YsBl-6IsGQfg3uG0DvTQQ,20857
20
20
  franky_control.libs/liburdfdom_sensor-011819fa.so.1.0,sha256=LzFH_sfeyWcV042TmgSEXTQL1c0teyYg3veA8sTn_EM,20857
21
21
  franky_control.libs/liburdfdom_world-4d53bc81.so.1.0,sha256=IziPhPYdFfZTgKDOnUMGLYSCsZRxYfC1rEKWjvzrpb4,146081
22
- franky_control-1.1.0.dist-info/LICENSE,sha256=2n6rt7r999OuXp8iOqW9we7ORaxWncIbOwN1ILRGR2g,7651
23
- franky_control-1.1.0.dist-info/METADATA,sha256=tY2cwf3m5RF0BLL6f5MlP4GC-huOPAImMbvIP4NU0wg,40066
24
- franky_control-1.1.0.dist-info/WHEEL,sha256=L3HW8fVbXzdi0Qbq6Dl6IkkMSshhqlUpffoAzAKCWvI,111
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,,
22
+ franky_control-1.1.1.dist-info/LICENSE,sha256=2n6rt7r999OuXp8iOqW9we7ORaxWncIbOwN1ILRGR2g,7651
23
+ franky_control-1.1.1.dist-info/METADATA,sha256=krU979EyVmkb6rZBCIm_sLRAurodnpVmyAJLOVGZXXU,40968
24
+ franky_control-1.1.1.dist-info/WHEEL,sha256=L3HW8fVbXzdi0Qbq6Dl6IkkMSshhqlUpffoAzAKCWvI,111
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,,
index eaf603c..0af4094 100755
Binary file