franky-control 1.1.0__cp310-cp310-manylinux_2_28_x86_64.whl → 1.1.1__cp310-cp310-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.
- franky/_franky.cpython-310-x86_64-linux-gnu.so +0 -0
- {franky_control-1.1.0.dist-info → franky_control-1.1.1.dist-info}/METADATA +188 -126
- {franky_control-1.1.0.dist-info → franky_control-1.1.1.dist-info}/RECORD +11 -11
- franky_control.libs/{libPocoFoundation-91a48101.so.95 → libPocoFoundation-f89fb772.so.95} +0 -0
- franky_control.libs/{libPocoNet-9e586dc9.so.95 → libPocoNet-a223dcdc.so.95} +0 -0
- franky_control.libs/libfranka-92ddaf43.so.0.15.0 +0 -0
- franky_control.libs/{libpinocchio_default-53a889f9.so.3.1.0 → libpinocchio_default-17c55e05.so.3.1.0} +0 -0
- franky_control.libs/{libpinocchio_parsers-a0902fb5.so.3.1.0 → libpinocchio_parsers-f66a7fc8.so.3.1.0} +0 -0
- {franky_control-1.1.0.dist-info → franky_control-1.1.1.dist-info}/WHEEL +0 -0
- {franky_control-1.1.0.dist-info → franky_control-1.1.1.dist-info}/licenses/LICENSE +0 -0
- {franky_control-1.1.0.dist-info → franky_control-1.1.1.dist-info}/top_level.txt +0 -0
Binary file
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: franky-control
|
3
|
-
Version: 1.1.
|
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
|
-
|
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(
|
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
|
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
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
])
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
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(
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
#
|
515
|
-
#
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
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(
|
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
|
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
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
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)
|
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(
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
# velocity
|
581
|
-
#
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
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
|
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
|
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.
|
664
|
-
# a JointMotion as a reaction motion to a CartesianMotion.
|
665
|
-
|
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(
|
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
|
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
|
886
|
-
# control. In the web interface, a notification will show
|
887
|
-
#
|
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
|
892
|
-
# holding control is dead. Taking control by force requires the
|
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-310-x86_64-linux-gnu.so,sha256=
|
2
|
+
franky/_franky.cpython-310-x86_64-linux-gnu.so,sha256=u_JXktjdVbxyPu6Aodce4ng5NC3dJL-OpBQqR-GOvzg,3075849
|
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-
|
9
|
-
franky_control.libs/libPocoNet-
|
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=
|
16
|
-
franky_control.libs/libpinocchio_default-
|
17
|
-
franky_control.libs/libpinocchio_parsers-
|
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.
|
24
|
-
franky_control-1.1.
|
25
|
-
franky_control-1.1.
|
26
|
-
franky_control-1.1.
|
27
|
-
franky_control-1.1.
|
23
|
+
franky_control-1.1.1.dist-info/METADATA,sha256=qWzLTDDTUNcAXq0Fwd1Q_WKklCocvIg1RhaxlP7VLPI,41222
|
24
|
+
franky_control-1.1.1.dist-info/WHEEL,sha256=yzF9ixp0XVYLhnovZSdud9vspTPdVe52BzwI7Tv3jTM,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 d3c7d43..5a8a2a3 100755
|
|
Binary file
|
index 17121d8..dc82175 100755
|
|
Binary file
|
Binary file
|
index d1e8322..c0bfda3 100755
|
|
Binary file
|
index e5136f0..8314b06 100755
|
|
Binary file
|
File without changes
|
File without changes
|
File without changes
|