-
Notifications
You must be signed in to change notification settings - Fork 16
/
cli.py
127 lines (102 loc) · 4.2 KB
/
cli.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
"""
This submodule contains convenience functions that are installed
as executables. These executables can be integrated into bash
scripts, alias commands etc. The table below lists the available
executables and the corresponding entry-points.
+-----------------------+----------------------------+
| Executable | Entry-point |
+=======================+============================+
| panda-unlock | :py:func:`unlock` |
+-----------------------+----------------------------+
| panda-lock | :py:func:`lock` |
+-----------------------+----------------------------+
| panda-reboot | :py:func:`reboot` |
+-----------------------+----------------------------+
| panda-take-control | :py:func:`take_control` |
+-----------------------+----------------------------+
| panda-release-control | :py:func:`release_control` |
+-----------------------+----------------------------+
"""
import argparse
from . import Desk
def _create_argument_parser(needs_platform: bool = True) -> argparse.ArgumentParser:
parser = argparse.ArgumentParser()
parser.add_argument('host', type=str, help='Robot Desk IP or hostname.')
parser.add_argument('user', type=str, help='Desk username.')
parser.add_argument('password', type=str, help='Desk password.')
if needs_platform:
parser.add_argument('--platform', type=str, default='panda', help='Platform of robot, i.e. panda (default) or fr3.')
return parser
def unlock():
"""
Unlocks the robot's brakes and activates the FCI.
Args:
host: IP or hostname of the control unit running the Desk.
user: Username used to log into the Desk.
password: Password of the given username.
platform: The targeted robot platform, i.e. panda or fr3.
"""
parser = _create_argument_parser()
args = parser.parse_args()
desk = Desk(args.host, args.user, args.password, platform=args.platform)
desk.unlock()
desk.activate_fci()
def lock():
"""
Locks the robot's brakes and deactivates the FCI.
Args:
host: IP or hostname of the control unit running the Desk.
user: Username used to log into the Desk.
password: Password of the given username.
platform: The targeted robot platform, i.e. panda or fr3.
"""
parser = _create_argument_parser()
args = parser.parse_args()
desk = Desk(args.host, args.user, args.password, platform=args.platform)
desk.lock()
desk.deactivate_fci()
def reboot():
"""
Reboots the robot. Current versions of the robot's Desk software
will eventually hang up when running the FCI continuously for
several days. This function can be conveniently integrated
into cronjobs or similar to regularly reboot the robot.
Args:
host: IP or hostname of the control unit running the Desk.
user: Username used to log into the Desk.
password: Password of the given username.
"""
parser = _create_argument_parser(needs_platform=False)
args = parser.parse_args()
desk = Desk(args.host, args.user, args.password)
desk.reboot()
def take_control():
"""
Take control of the Desk with the given user credentials.
Args:
host: IP or hostname of the control unit running the Desk.
user: Username used to log into the Desk.
password: Password of the given username.
force: Forcibly take control from another active user
by pressing circle button on physical robot.
"""
parser = _create_argument_parser(needs_platform=False)
parser.add_argument('--force', action='store_true', help='Force takeover if another user is in control.')
args = parser.parse_args()
desk = Desk(args.host, args.user, args.password)
desk.take_control(force=args.force)
def release_control():
"""
Release control of the desk. This will allow another user to
take control without needing physical access to the robot.
Args:
host: IP or hostname of the control unit running the Desk.
user: Username used to log into the Desk.
password: Password of the given username.
force: Forcibly take control from another active user
by pressing circle button on physical robot.
"""
parser = _create_argument_parser(needs_platform=False)
args = parser.parse_args()
desk = Desk(args.host, args.user, args.password)
desk.release_control()