wirepod-vector-sdk-audio 0.9.0__py3-none-any.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.
- anki_vector/__init__.py +43 -0
- anki_vector/animation.py +272 -0
- anki_vector/annotate.py +590 -0
- anki_vector/audio.py +212 -0
- anki_vector/audio_stream.py +335 -0
- anki_vector/behavior.py +1135 -0
- anki_vector/camera.py +670 -0
- anki_vector/camera_viewer/__init__.py +121 -0
- anki_vector/color.py +88 -0
- anki_vector/configure/__main__.py +331 -0
- anki_vector/connection.py +838 -0
- anki_vector/events.py +420 -0
- anki_vector/exceptions.py +185 -0
- anki_vector/faces.py +819 -0
- anki_vector/lights.py +210 -0
- anki_vector/mdns.py +131 -0
- anki_vector/messaging/__init__.py +45 -0
- anki_vector/messaging/alexa_pb2.py +36 -0
- anki_vector/messaging/alexa_pb2_grpc.py +3 -0
- anki_vector/messaging/behavior_pb2.py +40 -0
- anki_vector/messaging/behavior_pb2_grpc.py +3 -0
- anki_vector/messaging/client.py +33 -0
- anki_vector/messaging/cube_pb2.py +113 -0
- anki_vector/messaging/cube_pb2_grpc.py +3 -0
- anki_vector/messaging/extensions_pb2.py +25 -0
- anki_vector/messaging/extensions_pb2_grpc.py +3 -0
- anki_vector/messaging/external_interface_pb2.py +169 -0
- anki_vector/messaging/external_interface_pb2_grpc.py +1267 -0
- anki_vector/messaging/messages_pb2.py +431 -0
- anki_vector/messaging/messages_pb2_grpc.py +3 -0
- anki_vector/messaging/nav_map_pb2.py +33 -0
- anki_vector/messaging/nav_map_pb2_grpc.py +3 -0
- anki_vector/messaging/protocol.py +33 -0
- anki_vector/messaging/response_status_pb2.py +27 -0
- anki_vector/messaging/response_status_pb2_grpc.py +3 -0
- anki_vector/messaging/settings_pb2.py +72 -0
- anki_vector/messaging/settings_pb2_grpc.py +3 -0
- anki_vector/messaging/shared_pb2.py +54 -0
- anki_vector/messaging/shared_pb2_grpc.py +3 -0
- anki_vector/motors.py +127 -0
- anki_vector/nav_map.py +409 -0
- anki_vector/objects.py +1782 -0
- anki_vector/opengl/__init__.py +103 -0
- anki_vector/opengl/assets/LICENSE.txt +21 -0
- anki_vector/opengl/assets/cube.jpg +0 -0
- anki_vector/opengl/assets/cube.mtl +9 -0
- anki_vector/opengl/assets/cube.obj +1000 -0
- anki_vector/opengl/assets/vector.mtl +67 -0
- anki_vector/opengl/assets/vector.obj +13220 -0
- anki_vector/opengl/opengl.py +864 -0
- anki_vector/opengl/opengl_vector.py +620 -0
- anki_vector/opengl/opengl_viewer.py +689 -0
- anki_vector/photos.py +145 -0
- anki_vector/proximity.py +176 -0
- anki_vector/reserve_control/__main__.py +36 -0
- anki_vector/robot.py +930 -0
- anki_vector/screen.py +201 -0
- anki_vector/status.py +322 -0
- anki_vector/touch.py +119 -0
- anki_vector/user_intent.py +186 -0
- anki_vector/util.py +1132 -0
- anki_vector/version.py +15 -0
- anki_vector/viewer.py +403 -0
- anki_vector/vision.py +202 -0
- anki_vector/world.py +899 -0
- wirepod_vector_sdk_audio-0.9.0.dist-info/METADATA +80 -0
- wirepod_vector_sdk_audio-0.9.0.dist-info/RECORD +71 -0
- wirepod_vector_sdk_audio-0.9.0.dist-info/WHEEL +5 -0
- wirepod_vector_sdk_audio-0.9.0.dist-info/licenses/LICENSE.txt +180 -0
- wirepod_vector_sdk_audio-0.9.0.dist-info/top_level.txt +1 -0
- wirepod_vector_sdk_audio-0.9.0.dist-info/zip-safe +1 -0
anki_vector/lights.py
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# Copyright (c) 2018 Anki, Inc.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License in the file LICENSE.txt or at
|
|
6
|
+
#
|
|
7
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
"""Helper routines for dealing with Vector's Cube lights and colors."""
|
|
16
|
+
|
|
17
|
+
# __all__ should order by constants, event classes, other classes, functions.
|
|
18
|
+
__all__ = ['MAX_COLOR_PROFILE', 'WHITE_BALANCED_CUBE_PROFILE',
|
|
19
|
+
'blue_light', 'cyan_light', 'green_light', 'magenta_light', 'off_light',
|
|
20
|
+
'red_light', 'white_light', 'yellow_light',
|
|
21
|
+
'Color', 'ColorProfile', 'Light', 'package_request_params']
|
|
22
|
+
|
|
23
|
+
from .color import Color, green, red, blue, cyan, magenta, yellow, white, off
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ColorProfile:
|
|
27
|
+
"""Applies transforms to make Vector's Cube lights and colors appear as
|
|
28
|
+
intended, by limiting maximum channel intensity.
|
|
29
|
+
|
|
30
|
+
:param red_multiplier: Scaling value for the brightness of red Lights
|
|
31
|
+
:param green_multiplier: Scaling value for the brightness of green Lights
|
|
32
|
+
:param blue_multiplier: Scaling value for the brightness of blue Lights
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
def __init__(self, red_multiplier: float, green_multiplier: float, blue_multiplier: float):
|
|
36
|
+
self._red_multiplier = red_multiplier
|
|
37
|
+
self._green_multiplier = green_multiplier
|
|
38
|
+
self._blue_multiplier = blue_multiplier
|
|
39
|
+
|
|
40
|
+
# TODO Needs docs, param types, sample code
|
|
41
|
+
def augment_color(self, original_color):
|
|
42
|
+
rgb = [
|
|
43
|
+
(original_color.int_color >> 24) & 0xff,
|
|
44
|
+
(original_color.int_color >> 16) & 0xff,
|
|
45
|
+
(original_color.int_color >> 8) & 0xff
|
|
46
|
+
]
|
|
47
|
+
|
|
48
|
+
rgb[0] = int(self._red_multiplier * rgb[0])
|
|
49
|
+
rgb[1] = int(self._green_multiplier * rgb[1])
|
|
50
|
+
rgb[2] = int(self._blue_multiplier * rgb[2])
|
|
51
|
+
|
|
52
|
+
result_int_code = (rgb[0] << 24) | (rgb[1] << 16) | (rgb[2] << 8) | 0xff
|
|
53
|
+
return Color(result_int_code)
|
|
54
|
+
|
|
55
|
+
# TODO Needs example code, more descriptive docs
|
|
56
|
+
@property
|
|
57
|
+
def red_multiplier(self):
|
|
58
|
+
"""float: The multiplier used on the red channel."""
|
|
59
|
+
return self._red_multiplier
|
|
60
|
+
|
|
61
|
+
# TODO Needs example code, more descriptive docs
|
|
62
|
+
@property
|
|
63
|
+
def green_multiplier(self):
|
|
64
|
+
"""float: The multiplier used on the red channel."""
|
|
65
|
+
return self._green_multiplier
|
|
66
|
+
|
|
67
|
+
# TODO Needs example code, more descriptive docs
|
|
68
|
+
@property
|
|
69
|
+
def blue_multiplier(self):
|
|
70
|
+
"""float: The multiplier used on the red channel."""
|
|
71
|
+
return self._blue_multiplier
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
#: :class:`ColorProfile`: Color profile to get the maximum possible brightness out of each LED.
|
|
75
|
+
MAX_COLOR_PROFILE = ColorProfile(red_multiplier=1.0,
|
|
76
|
+
green_multiplier=1.0,
|
|
77
|
+
blue_multiplier=1.0)
|
|
78
|
+
|
|
79
|
+
#: :class:`ColorProfile`: Color profile balanced so that a max color value more closely resembles pure white.
|
|
80
|
+
# TODO: Balance this more carefully once robots with proper color pipe
|
|
81
|
+
# hardware becomes available
|
|
82
|
+
WHITE_BALANCED_CUBE_PROFILE = ColorProfile(red_multiplier=1.0,
|
|
83
|
+
green_multiplier=0.95,
|
|
84
|
+
blue_multiplier=0.7)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
class Light:
|
|
88
|
+
"""Lights are used with Vector's Cube.
|
|
89
|
+
|
|
90
|
+
Lights may either be "on" or "off", though in practice any colors may be
|
|
91
|
+
assigned to either state (including no color/light).
|
|
92
|
+
"""
|
|
93
|
+
|
|
94
|
+
def __init__(self,
|
|
95
|
+
on_color: Color = off,
|
|
96
|
+
off_color: Color = off,
|
|
97
|
+
on_period_ms: int = 250,
|
|
98
|
+
off_period_ms: int = 0,
|
|
99
|
+
transition_on_period_ms: int = 0,
|
|
100
|
+
transition_off_period_ms: int = 0):
|
|
101
|
+
self._on_color = on_color
|
|
102
|
+
self._off_color = off_color
|
|
103
|
+
self._on_period_ms = on_period_ms
|
|
104
|
+
self._off_period_ms = off_period_ms
|
|
105
|
+
self._transition_on_period_ms = transition_on_period_ms
|
|
106
|
+
self._transition_off_period_ms = transition_off_period_ms
|
|
107
|
+
|
|
108
|
+
@property
|
|
109
|
+
def on_color(self) -> Color:
|
|
110
|
+
"""The color shown when the light is on."""
|
|
111
|
+
return self._on_color
|
|
112
|
+
|
|
113
|
+
@on_color.setter
|
|
114
|
+
def on_color(self, color):
|
|
115
|
+
if not isinstance(color, Color):
|
|
116
|
+
raise TypeError("Must specify a Color")
|
|
117
|
+
self._on_color = color
|
|
118
|
+
|
|
119
|
+
@property
|
|
120
|
+
def off_color(self) -> Color:
|
|
121
|
+
"""The color shown when the light is off."""
|
|
122
|
+
return self._off_color
|
|
123
|
+
|
|
124
|
+
@off_color.setter
|
|
125
|
+
def off_color(self, color):
|
|
126
|
+
if not isinstance(color, Color):
|
|
127
|
+
raise TypeError("Must specify a Color")
|
|
128
|
+
self._off_color = color
|
|
129
|
+
|
|
130
|
+
@property
|
|
131
|
+
def on_period_ms(self) -> int:
|
|
132
|
+
"""The number of milliseconds the light should be "on" for for each cycle."""
|
|
133
|
+
return self._on_period_ms
|
|
134
|
+
|
|
135
|
+
@on_period_ms.setter
|
|
136
|
+
def on_period_ms(self, ms):
|
|
137
|
+
if not 0 < ms < 2**32:
|
|
138
|
+
raise ValueError("Invalid value")
|
|
139
|
+
self._on_period_ms = ms
|
|
140
|
+
|
|
141
|
+
@property
|
|
142
|
+
def off_period_ms(self) -> int:
|
|
143
|
+
"""The number of milliseconds the light should be "off" for for each cycle."""
|
|
144
|
+
return self._off_period_ms
|
|
145
|
+
|
|
146
|
+
@off_period_ms.setter
|
|
147
|
+
def off_period_ms(self, ms):
|
|
148
|
+
if not 0 < ms < 2**32:
|
|
149
|
+
raise ValueError("Invalid value")
|
|
150
|
+
self._off_period_ms = ms
|
|
151
|
+
|
|
152
|
+
@property
|
|
153
|
+
def transition_on_period_ms(self) -> int:
|
|
154
|
+
"""The number of milliseconds to take to transition the light to the on color."""
|
|
155
|
+
return self._transition_on_period_ms
|
|
156
|
+
|
|
157
|
+
@transition_on_period_ms.setter
|
|
158
|
+
def transition_on_period_ms(self, ms):
|
|
159
|
+
if not 0 < ms < 2**32:
|
|
160
|
+
raise ValueError("Invalid value")
|
|
161
|
+
self._transition_on_period_ms = ms
|
|
162
|
+
|
|
163
|
+
@property
|
|
164
|
+
def transition_off_period_ms(self) -> int:
|
|
165
|
+
"""The number of milliseconds to take to transition the light to the off color."""
|
|
166
|
+
return self._transition_off_period_ms
|
|
167
|
+
|
|
168
|
+
@transition_off_period_ms.setter
|
|
169
|
+
def transition_off_period_ms(self, ms):
|
|
170
|
+
if not 0 < ms < 2**32:
|
|
171
|
+
raise ValueError("Invalid value")
|
|
172
|
+
self._transition_off_period_ms = ms
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
# TODO needs docs, param types. Should this be private? Maybe a more descriptive name?
|
|
176
|
+
def package_request_params(lights, color_profile):
|
|
177
|
+
merged_params = {}
|
|
178
|
+
for light in lights:
|
|
179
|
+
for attr_name in vars(light):
|
|
180
|
+
attr_name = attr_name[1:]
|
|
181
|
+
attr_val = getattr(light, attr_name)
|
|
182
|
+
if isinstance(attr_val, Color):
|
|
183
|
+
attr_val = color_profile.augment_color(attr_val).int_color
|
|
184
|
+
merged_params.setdefault(attr_name, []).append(attr_val)
|
|
185
|
+
return merged_params
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
#: :class:`Light`: A steady green colored LED light.
|
|
189
|
+
green_light = Light(on_color=green)
|
|
190
|
+
|
|
191
|
+
#: :class:`Light`: A steady red colored LED light.
|
|
192
|
+
red_light = Light(on_color=red)
|
|
193
|
+
|
|
194
|
+
#: :class:`Light`: A steady blue colored LED light.
|
|
195
|
+
blue_light = Light(on_color=blue)
|
|
196
|
+
|
|
197
|
+
#: :class:`Light`: A steady cyan colored LED light.
|
|
198
|
+
cyan_light = Light(on_color=cyan)
|
|
199
|
+
|
|
200
|
+
#: :class:`Light`: A steady magenta colored LED light.
|
|
201
|
+
magenta_light = Light(on_color=magenta)
|
|
202
|
+
|
|
203
|
+
#: :class:`Light`: A steady yellow colored LED light.
|
|
204
|
+
yellow_light = Light(on_color=yellow)
|
|
205
|
+
|
|
206
|
+
#: :class:`Light`: A steady white colored LED light.
|
|
207
|
+
white_light = Light(on_color=white)
|
|
208
|
+
|
|
209
|
+
#: :class:`Light`: A steady off (non-illuminated LED light).
|
|
210
|
+
off_light = Light(on_color=off)
|
anki_vector/mdns.py
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# Copyright (c) 2019 Anki, Inc.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License in the file LICENSE.txt or at
|
|
6
|
+
#
|
|
7
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
"""
|
|
16
|
+
This contains the :class:`VectorMdns` class for discovering Vector (without already knowing
|
|
17
|
+
the IP address) on a LAN (Local Area Network) over mDNS.
|
|
18
|
+
|
|
19
|
+
mDNS (multicast DNS) is a protocol for sending UDP packets containing a DNS query to all
|
|
20
|
+
devices on your Local Area Network. If a device knows how to answer the DNS query, it
|
|
21
|
+
will respond by multicasting a UDP packet containing the relevant DNS records.
|
|
22
|
+
"""
|
|
23
|
+
from threading import Condition
|
|
24
|
+
import sys
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class VectorMdns: # pylint: disable=too-few-public-methods
|
|
28
|
+
"""`VectorMdns` provides a static method for discovering a Vector on the same LAN as
|
|
29
|
+
the SDK program and retrieving its IP address.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
@staticmethod
|
|
33
|
+
def find_vector(name: str, timeout=5):
|
|
34
|
+
"""
|
|
35
|
+
:param name: A name like `"Vector-A1B2"`. If :code:`None`, will search for any Vector.
|
|
36
|
+
:param timeout: The discovery will timeout in :code:`timeout` seconds. Default value is :code:`5`.
|
|
37
|
+
:returns: **dict** or **None** -- if Vector found, **dict** contains keys `"name"` and `"ipv4"`
|
|
38
|
+
|
|
39
|
+
.. testcode::
|
|
40
|
+
|
|
41
|
+
import anki_vector
|
|
42
|
+
vector_mdns = anki_vector.mdns.VectorMdns.find_vector("Vector-A1B2")
|
|
43
|
+
|
|
44
|
+
if vector_mdns is not None:
|
|
45
|
+
print(vector_mdns['ipv4'])
|
|
46
|
+
else:
|
|
47
|
+
print("No Vector found on your local network!")
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
# synchronously search for Vector for up to 5 seconds
|
|
51
|
+
vector_name = name # should be like 'Vector-V3C7'
|
|
52
|
+
return VectorMdns._start_mdns_listener(vector_name, timeout)
|
|
53
|
+
|
|
54
|
+
@staticmethod
|
|
55
|
+
def _start_mdns_listener(name, timeout):
|
|
56
|
+
try:
|
|
57
|
+
from zeroconf import ServiceBrowser, Zeroconf
|
|
58
|
+
except ImportError:
|
|
59
|
+
sys.exit("Cannot import from Zeroconf: Do `pip3 install --user zeroconf` to install")
|
|
60
|
+
|
|
61
|
+
# create a Condition object and acquire the underlying lock
|
|
62
|
+
cond = Condition()
|
|
63
|
+
cond.acquire()
|
|
64
|
+
|
|
65
|
+
# instantiate zeroconf and our MdnsListner object for listening to events
|
|
66
|
+
zeroconf = Zeroconf()
|
|
67
|
+
vector_fullname = None
|
|
68
|
+
|
|
69
|
+
if name is not None:
|
|
70
|
+
vector_fullname = name + ".local."
|
|
71
|
+
|
|
72
|
+
listener = _MdnsListener(vector_fullname, cond)
|
|
73
|
+
|
|
74
|
+
# browse for the _ankivector TCP MDNS service, sending events to our listener
|
|
75
|
+
ServiceBrowser(zeroconf, "_ankivector._tcp.local.", listener)
|
|
76
|
+
|
|
77
|
+
# block until 'timeout' seconds or until we discover vector
|
|
78
|
+
cond.wait(timeout)
|
|
79
|
+
|
|
80
|
+
# close zeroconf
|
|
81
|
+
zeroconf.close()
|
|
82
|
+
|
|
83
|
+
# return an IPv4 string (or None)
|
|
84
|
+
if listener.ipv4 is None:
|
|
85
|
+
return None
|
|
86
|
+
|
|
87
|
+
return {'ipv4': listener.ipv4, 'name': listener.name}
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class _MdnsListener:
|
|
91
|
+
"""_MdnsListener is an internal helper class which listens for mDNS messages.
|
|
92
|
+
|
|
93
|
+
:param name_filter: A String to filter the mDNS responses by name (e.g., `"Vector-A1B2"`).
|
|
94
|
+
:param condition: A Condition object to be used for signaling to caller when robot has been discovered.
|
|
95
|
+
"""
|
|
96
|
+
|
|
97
|
+
def __init__(self, name_filter: str, condition):
|
|
98
|
+
self.name_filter = name_filter
|
|
99
|
+
self.cond = condition
|
|
100
|
+
self.ipv4 = None
|
|
101
|
+
self.name = ""
|
|
102
|
+
|
|
103
|
+
@staticmethod
|
|
104
|
+
def _bytes_to_str_ipv4(ip_bytes):
|
|
105
|
+
return str(ip_bytes[0]) + "." + \
|
|
106
|
+
str(ip_bytes[1]) + "." + \
|
|
107
|
+
str(ip_bytes[2]) + "." + \
|
|
108
|
+
str(ip_bytes[3])
|
|
109
|
+
|
|
110
|
+
def remove_service(self, zeroconf, mdns_type, name):
|
|
111
|
+
# detect service removal
|
|
112
|
+
pass
|
|
113
|
+
|
|
114
|
+
def add_service(self, zeroconf, mdns_type, name):
|
|
115
|
+
# detect service
|
|
116
|
+
info = zeroconf.get_service_info(mdns_type, name)
|
|
117
|
+
|
|
118
|
+
if (self.name_filter is None) or (info.server.lower() == self.name_filter.lower()):
|
|
119
|
+
# found a match for our filter or there is no filter
|
|
120
|
+
self.cond.acquire()
|
|
121
|
+
self.ipv4 = _MdnsListener._bytes_to_str_ipv4(info.addresses[0]) # info.addresses[0] is IPv4 (DNS record type 'A')
|
|
122
|
+
self.name = info.server
|
|
123
|
+
|
|
124
|
+
# cause anything waiting for this condition to end waiting
|
|
125
|
+
# and release so the other thread can continue
|
|
126
|
+
self.cond.notify()
|
|
127
|
+
self.cond.release()
|
|
128
|
+
|
|
129
|
+
def update_service(self, zeroconf, mdns_type, name):
|
|
130
|
+
# detect service update
|
|
131
|
+
pass
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Copyright (c) 2018 Anki, Inc.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License in the file LICENSE.txt or at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
"""
|
|
16
|
+
Protobuf and gRPC messages exposed to the Vector Python SDK.
|
|
17
|
+
|
|
18
|
+
.. warning::
|
|
19
|
+
|
|
20
|
+
This package is provided to understand the messages passed between the SDK and Vector,
|
|
21
|
+
and it should not be necessary for writing code that uses the SDK.
|
|
22
|
+
|
|
23
|
+
.. code-block::
|
|
24
|
+
python
|
|
25
|
+
|
|
26
|
+
from anki_vector.messaging import client, protocol
|
|
27
|
+
|
|
28
|
+
async def send_version_request(interface: client.ExternalInterfaceStub, client_version, min_host_version):
|
|
29
|
+
\"\"\"This function needs to be executed and awaited in the same event loop
|
|
30
|
+
as the interface is created.
|
|
31
|
+
\"\"\"
|
|
32
|
+
# Create a protocol version request message
|
|
33
|
+
version = protocol.ProtocolVersionRequest(client_version=client_version,
|
|
34
|
+
min_host_version=min_host_version)
|
|
35
|
+
|
|
36
|
+
# Send the protocol version to the external interface and await the result
|
|
37
|
+
protocol_version = await interface.ProtocolVersion(version)
|
|
38
|
+
|
|
39
|
+
For information about individual messages and their parameters, see :doc:`the protobuf documentation </proto>`.
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
from . import protocol
|
|
43
|
+
from . import client
|
|
44
|
+
|
|
45
|
+
__all__ = ['protocol', 'client']
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: anki_vector/messaging/alexa.proto
|
|
4
|
+
"""Generated protocol buffer code."""
|
|
5
|
+
from google.protobuf.internal import builder as _builder
|
|
6
|
+
from google.protobuf import descriptor as _descriptor
|
|
7
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
8
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
9
|
+
# @@protoc_insertion_point(imports)
|
|
10
|
+
|
|
11
|
+
_sym_db = _symbol_database.Default()
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
from anki_vector.messaging import response_status_pb2 as anki__vector_dot_messaging_dot_response__status__pb2
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!anki_vector/messaging/alexa.proto\x12\x1e\x41nki.Vector.external_interface\x1a+anki_vector/messaging/response_status.proto\"\x17\n\x15\x41lexaAuthStateRequest\"\xab\x01\n\x16\x41lexaAuthStateResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12\x42\n\nauth_state\x18\x02 \x01(\x0e\x32..Anki.Vector.external_interface.AlexaAuthState\x12\r\n\x05\x65xtra\x18\x03 \x01(\t\"#\n\x11\x41lexaOptInRequest\x12\x0e\n\x06opt_in\x18\x01 \x01(\x08\"T\n\x12\x41lexaOptInResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"c\n\x0e\x41lexaAuthEvent\x12\x42\n\nauth_state\x18\x01 \x01(\x0e\x32..Anki.Vector.external_interface.AlexaAuthState\x12\r\n\x05\x65xtra\x18\x02 \x01(\t*\xa2\x01\n\x0e\x41lexaAuthState\x12\x16\n\x12\x41LEXA_AUTH_INVALID\x10\x00\x12\x1c\n\x18\x41LEXA_AUTH_UNINITIALIZED\x10\x01\x12\x1e\n\x1a\x41LEXA_AUTH_REQUESTING_AUTH\x10\x02\x12\x1f\n\x1b\x41LEXA_AUTH_WAITING_FOR_CODE\x10\x03\x12\x19\n\x15\x41LEXA_AUTH_AUTHORIZED\x10\x04\x62\x06proto3')
|
|
18
|
+
|
|
19
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
|
20
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'anki_vector.messaging.alexa_pb2', globals())
|
|
21
|
+
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
22
|
+
|
|
23
|
+
DESCRIPTOR._options = None
|
|
24
|
+
_ALEXAAUTHSTATE._serialized_start=538
|
|
25
|
+
_ALEXAAUTHSTATE._serialized_end=700
|
|
26
|
+
_ALEXAAUTHSTATEREQUEST._serialized_start=114
|
|
27
|
+
_ALEXAAUTHSTATEREQUEST._serialized_end=137
|
|
28
|
+
_ALEXAAUTHSTATERESPONSE._serialized_start=140
|
|
29
|
+
_ALEXAAUTHSTATERESPONSE._serialized_end=311
|
|
30
|
+
_ALEXAOPTINREQUEST._serialized_start=313
|
|
31
|
+
_ALEXAOPTINREQUEST._serialized_end=348
|
|
32
|
+
_ALEXAOPTINRESPONSE._serialized_start=350
|
|
33
|
+
_ALEXAOPTINRESPONSE._serialized_end=434
|
|
34
|
+
_ALEXAAUTHEVENT._serialized_start=436
|
|
35
|
+
_ALEXAAUTHEVENT._serialized_end=535
|
|
36
|
+
# @@protoc_insertion_point(module_scope)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: anki_vector/messaging/behavior.proto
|
|
4
|
+
"""Generated protocol buffer code."""
|
|
5
|
+
from google.protobuf.internal import builder as _builder
|
|
6
|
+
from google.protobuf import descriptor as _descriptor
|
|
7
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
8
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
9
|
+
# @@protoc_insertion_point(imports)
|
|
10
|
+
|
|
11
|
+
_sym_db = _symbol_database.Default()
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
from anki_vector.messaging import messages_pb2 as anki__vector_dot_messaging_dot_messages__pb2
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$anki_vector/messaging/behavior.proto\x12\x1e\x41nki.Vector.external_interface\x1a$anki_vector/messaging/messages.proto\"\x10\n\x0e\x43ontrolRelease\"\xae\x01\n\x0e\x43ontrolRequest\x12I\n\x08priority\x18\x01 \x01(\x0e\x32\x37.Anki.Vector.external_interface.ControlRequest.Priority\"Q\n\x08Priority\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x16\n\x12OVERRIDE_BEHAVIORS\x10\n\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x14\x12\x13\n\x0fRESERVE_CONTROL\x10\x1e\"\xbe\x01\n\x16\x42\x65haviorControlRequest\x12I\n\x0f\x63ontrol_release\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ControlReleaseH\x00\x12I\n\x0f\x63ontrol_request\x18\x02 \x01(\x0b\x32..Anki.Vector.external_interface.ControlRequestH\x00\x42\x0e\n\x0crequest_type\"\x18\n\x16\x43ontrolGrantedResponse\"\x15\n\x13\x43ontrolLostResponse\"\x1d\n\x1bReservedControlLostResponse\"\x82\x03\n\x17\x42\x65haviorControlResponse\x12Z\n\x18\x63ontrol_granted_response\x18\x01 \x01(\x0b\x32\x36.Anki.Vector.external_interface.ControlGrantedResponseH\x00\x12Q\n\x12\x63ontrol_lost_event\x18\x02 \x01(\x0b\x32\x33.Anki.Vector.external_interface.ControlLostResponseH\x00\x12\x43\n\nkeep_alive\x18\x03 \x01(\x0b\x32-.Anki.Vector.external_interface.KeepAlivePingH\x00\x12\x62\n\x1breserved_control_lost_event\x18\x04 \x01(\x0b\x32;.Anki.Vector.external_interface.ReservedControlLostResponseH\x00\x42\x0f\n\rresponse_typeb\x06proto3')
|
|
18
|
+
|
|
19
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
|
20
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'anki_vector.messaging.behavior_pb2', globals())
|
|
21
|
+
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
22
|
+
|
|
23
|
+
DESCRIPTOR._options = None
|
|
24
|
+
_CONTROLRELEASE._serialized_start=110
|
|
25
|
+
_CONTROLRELEASE._serialized_end=126
|
|
26
|
+
_CONTROLREQUEST._serialized_start=129
|
|
27
|
+
_CONTROLREQUEST._serialized_end=303
|
|
28
|
+
_CONTROLREQUEST_PRIORITY._serialized_start=222
|
|
29
|
+
_CONTROLREQUEST_PRIORITY._serialized_end=303
|
|
30
|
+
_BEHAVIORCONTROLREQUEST._serialized_start=306
|
|
31
|
+
_BEHAVIORCONTROLREQUEST._serialized_end=496
|
|
32
|
+
_CONTROLGRANTEDRESPONSE._serialized_start=498
|
|
33
|
+
_CONTROLGRANTEDRESPONSE._serialized_end=522
|
|
34
|
+
_CONTROLLOSTRESPONSE._serialized_start=524
|
|
35
|
+
_CONTROLLOSTRESPONSE._serialized_end=545
|
|
36
|
+
_RESERVEDCONTROLLOSTRESPONSE._serialized_start=547
|
|
37
|
+
_RESERVEDCONTROLLOSTRESPONSE._serialized_end=576
|
|
38
|
+
_BEHAVIORCONTROLRESPONSE._serialized_start=579
|
|
39
|
+
_BEHAVIORCONTROLRESPONSE._serialized_end=965
|
|
40
|
+
# @@protoc_insertion_point(module_scope)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Copyright (c) 2018 Anki, Inc.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License in the file LICENSE.txt or at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
# pylint: skip-file
|
|
16
|
+
|
|
17
|
+
"""
|
|
18
|
+
Protobuf messages exposed to the Vector Python SDK.
|
|
19
|
+
"""
|
|
20
|
+
import sys
|
|
21
|
+
import inspect
|
|
22
|
+
|
|
23
|
+
from .alexa_pb2_grpc import *
|
|
24
|
+
from .behavior_pb2_grpc import *
|
|
25
|
+
from .cube_pb2_grpc import *
|
|
26
|
+
from .messages_pb2_grpc import *
|
|
27
|
+
from .nav_map_pb2_grpc import *
|
|
28
|
+
from .response_status_pb2_grpc import *
|
|
29
|
+
from .settings_pb2_grpc import *
|
|
30
|
+
from .shared_pb2_grpc import *
|
|
31
|
+
from .external_interface_pb2_grpc import *
|
|
32
|
+
|
|
33
|
+
__all__ = [obj.__name__ for _, obj in inspect.getmembers(sys.modules[__name__]) if inspect.isclass(obj)]
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: anki_vector/messaging/cube.proto
|
|
4
|
+
"""Generated protocol buffer code."""
|
|
5
|
+
from google.protobuf.internal import builder as _builder
|
|
6
|
+
from google.protobuf import descriptor as _descriptor
|
|
7
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
8
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
9
|
+
# @@protoc_insertion_point(imports)
|
|
10
|
+
|
|
11
|
+
_sym_db = _symbol_database.Default()
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
from anki_vector.messaging import messages_pb2 as anki__vector_dot_messaging_dot_messages__pb2
|
|
15
|
+
from anki_vector.messaging import response_status_pb2 as anki__vector_dot_messaging_dot_response__status__pb2
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n anki_vector/messaging/cube.proto\x12\x1e\x41nki.Vector.external_interface\x1a$anki_vector/messaging/messages.proto\x1a+anki_vector/messaging/response_status.proto\"\x14\n\x12\x43onnectCubeRequest\"\x8d\x01\n\x13\x43onnectCubeResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12\x0f\n\x07success\x18\x02 \x01(\x08\x12\x11\n\tobject_id\x18\x03 \x01(\r\x12\x12\n\nfactory_id\x18\x04 \x01(\t\"\x17\n\x15\x43ubesAvailableRequest\"m\n\x16\x43ubesAvailableResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12\x13\n\x0b\x66\x61\x63tory_ids\x18\x02 \x03(\t\"\x17\n\x15\x44isconnectCubeRequest\"X\n\x16\x44isconnectCubeResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\x18\n\x16\x46lashCubeLightsRequest\"Y\n\x17\x46lashCubeLightsResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\x1c\n\x1a\x46orgetPreferredCubeRequest\"]\n\x1b\x46orgetPreferredCubeResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"-\n\x17SetPreferredCubeRequest\x12\x12\n\nfactory_id\x18\x01 \x01(\t\"Z\n\x18SetPreferredCubeResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\xb0\x03\n\x14SetCubeLightsRequest\x12\x11\n\tobject_id\x18\x01 \x01(\r\x12\x10\n\x08on_color\x18\x02 \x03(\r\x12\x11\n\toff_color\x18\x03 \x03(\r\x12\x14\n\x0con_period_ms\x18\x04 \x03(\r\x12\x15\n\roff_period_ms\x18\x05 \x03(\r\x12\x1f\n\x17transition_on_period_ms\x18\x06 \x03(\r\x12 \n\x18transition_off_period_ms\x18\x07 \x03(\r\x12\x0e\n\x06offset\x18\x08 \x03(\x05\x12\x15\n\rrelative_to_x\x18\t \x01(\x02\x12\x15\n\rrelative_to_y\x18\n \x01(\x02\x12\x0e\n\x06rotate\x18\x0b \x01(\x08\x12\\\n\rmake_relative\x18\x0c \x01(\x0e\x32\x45.Anki.Vector.external_interface.SetCubeLightsRequest.MakeRelativeMode\"D\n\x10MakeRelativeMode\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03OFF\x10\x01\x12\r\n\tBY_CORNER\x10\x02\x12\x0b\n\x07\x42Y_SIDE\x10\x03\"W\n\x15SetCubeLightsResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"%\n\x0fObjectAvailable\x12\x12\n\nfactory_id\x18\x01 \x01(\t\"\x92\x01\n\x15ObjectConnectionState\x12\x11\n\tobject_id\x18\x01 \x01(\r\x12\x12\n\nfactory_id\x18\x02 \x01(\t\x12?\n\x0bobject_type\x18\x03 \x01(\x0e\x32*.Anki.Vector.external_interface.ObjectType\x12\x11\n\tconnected\x18\x04 \x01(\x08\"3\n\x0bObjectMoved\x12\x11\n\ttimestamp\x18\x01 \x01(\r\x12\x11\n\tobject_id\x18\x02 \x01(\r\";\n\x13ObjectStoppedMoving\x12\x11\n\ttimestamp\x18\x01 \x01(\r\x12\x11\n\tobject_id\x18\x02 \x01(\r\"t\n\x13ObjectUpAxisChanged\x12\x11\n\ttimestamp\x18\x01 \x01(\r\x12\x11\n\tobject_id\x18\x02 \x01(\r\x12\x37\n\x07up_axis\x18\x03 \x01(\x0e\x32&.Anki.Vector.external_interface.UpAxis\"4\n\x0cObjectTapped\x12\x11\n\ttimestamp\x18\x01 \x01(\r\x12\x11\n\tobject_id\x18\x02 \x01(\r\"\xf0\x02\n\x13RobotObservedObject\x12\x11\n\ttimestamp\x18\x01 \x01(\r\x12G\n\robject_family\x18\x02 \x01(\x0e\x32,.Anki.Vector.external_interface.ObjectFamilyB\x02\x18\x01\x12?\n\x0bobject_type\x18\x03 \x01(\x0e\x32*.Anki.Vector.external_interface.ObjectType\x12\x11\n\tobject_id\x18\x04 \x01(\x05\x12:\n\x08img_rect\x18\x05 \x01(\x0b\x32(.Anki.Vector.external_interface.CladRect\x12\x38\n\x04pose\x18\x06 \x01(\x0b\x32*.Anki.Vector.external_interface.PoseStruct\x12 \n\x18top_face_orientation_rad\x18\x07 \x01(\x02\x12\x11\n\tis_active\x18\x08 \x01(\r\"\x14\n\x12\x43ubeConnectionLost\"d\n\x1a\x44\x65leteCustomObjectsRequest\x12\x46\n\x04mode\x18\x01 \x01(\x0e\x32\x38.Anki.Vector.external_interface.CustomObjectDeletionMode\"]\n\x1b\x44\x65leteCustomObjectsResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\x93\x01\n\x1e\x43reateFixedCustomObjectRequest\x12\x38\n\x04pose\x18\x01 \x01(\x0b\x32*.Anki.Vector.external_interface.PoseStruct\x12\x11\n\tx_size_mm\x18\x02 \x01(\x02\x12\x11\n\ty_size_mm\x18\x03 \x01(\x02\x12\x11\n\tz_size_mm\x18\x04 \x01(\x02\"t\n\x1f\x43reateFixedCustomObjectResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12\x11\n\tobject_id\x18\x02 \x01(\r\"\xba\x04\n\x13\x43ustomBoxDefinition\x12H\n\x0cmarker_front\x18\x01 \x01(\x0e\x32\x32.Anki.Vector.external_interface.CustomObjectMarker\x12G\n\x0bmarker_back\x18\x02 \x01(\x0e\x32\x32.Anki.Vector.external_interface.CustomObjectMarker\x12\x46\n\nmarker_top\x18\x03 \x01(\x0e\x32\x32.Anki.Vector.external_interface.CustomObjectMarker\x12I\n\rmarker_bottom\x18\x04 \x01(\x0e\x32\x32.Anki.Vector.external_interface.CustomObjectMarker\x12G\n\x0bmarker_left\x18\x05 \x01(\x0e\x32\x32.Anki.Vector.external_interface.CustomObjectMarker\x12H\n\x0cmarker_right\x18\x06 \x01(\x0e\x32\x32.Anki.Vector.external_interface.CustomObjectMarker\x12\x11\n\tx_size_mm\x18\x07 \x01(\x02\x12\x11\n\ty_size_mm\x18\x08 \x01(\x02\x12\x11\n\tz_size_mm\x18\t \x01(\x02\x12\x17\n\x0fmarker_width_mm\x18\n \x01(\x02\x12\x18\n\x10marker_height_mm\x18\x0b \x01(\x02\"\x9e\x01\n\x14\x43ustomCubeDefinition\x12\x42\n\x06marker\x18\x01 \x01(\x0e\x32\x32.Anki.Vector.external_interface.CustomObjectMarker\x12\x0f\n\x07size_mm\x18\x02 \x01(\x02\x12\x17\n\x0fmarker_width_mm\x18\x03 \x01(\x02\x12\x18\n\x10marker_height_mm\x18\x04 \x01(\x02\"\xb2\x01\n\x14\x43ustomWallDefinition\x12\x42\n\x06marker\x18\x01 \x01(\x0e\x32\x32.Anki.Vector.external_interface.CustomObjectMarker\x12\x10\n\x08width_mm\x18\x02 \x01(\x02\x12\x11\n\theight_mm\x18\x03 \x01(\x02\x12\x17\n\x0fmarker_width_mm\x18\x04 \x01(\x02\x12\x18\n\x10marker_height_mm\x18\x05 \x01(\x02\"\xf0\x02\n\x19\x44\x65\x66ineCustomObjectRequest\x12?\n\x0b\x63ustom_type\x18\x01 \x01(\x0e\x32*.Anki.Vector.external_interface.CustomType\x12\x11\n\tis_unique\x18\x02 \x01(\x08\x12I\n\ncustom_box\x18\x03 \x01(\x0b\x32\x33.Anki.Vector.external_interface.CustomBoxDefinitionH\x00\x12K\n\x0b\x63ustom_cube\x18\x04 \x01(\x0b\x32\x34.Anki.Vector.external_interface.CustomCubeDefinitionH\x00\x12K\n\x0b\x63ustom_wall\x18\x05 \x01(\x0b\x32\x34.Anki.Vector.external_interface.CustomWallDefinitionH\x00\x42\x1a\n\x18\x63ustom_object_definition\"m\n\x1a\x44\x65\x66ineCustomObjectResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12\x0f\n\x07success\x18\x02 \x01(\x08\"\xac\x05\n\x0bObjectEvent\x12K\n\x10object_available\x18\x01 \x01(\x0b\x32/.Anki.Vector.external_interface.ObjectAvailableH\x00\x12X\n\x17object_connection_state\x18\x02 \x01(\x0b\x32\x35.Anki.Vector.external_interface.ObjectConnectionStateH\x00\x12\x43\n\x0cobject_moved\x18\x03 \x01(\x0b\x32+.Anki.Vector.external_interface.ObjectMovedH\x00\x12T\n\x15object_stopped_moving\x18\x04 \x01(\x0b\x32\x33.Anki.Vector.external_interface.ObjectStoppedMovingH\x00\x12U\n\x16object_up_axis_changed\x18\x05 \x01(\x0b\x32\x33.Anki.Vector.external_interface.ObjectUpAxisChangedH\x00\x12\x45\n\robject_tapped\x18\x06 \x01(\x0b\x32,.Anki.Vector.external_interface.ObjectTappedH\x00\x12T\n\x15robot_observed_object\x18\x07 \x01(\x0b\x32\x33.Anki.Vector.external_interface.RobotObservedObjectH\x00\x12R\n\x14\x63ube_connection_lost\x18\x08 \x01(\x0b\x32\x32.Anki.Vector.external_interface.CubeConnectionLostH\x00\x42\x13\n\x11object_event_type*{\n\nObjectType\x12\x12\n\x0eINVALID_OBJECT\x10\x00\x12\x12\n\x0eUNKNOWN_OBJECT\x10\x01\x12\x14\n\x10\x42LOCK_LIGHTCUBE1\x10\x02\x12\x11\n\rCHARGER_BASIC\x10\x06\x12\x1c\n\x18\x46IRST_CUSTOM_OBJECT_TYPE\x10\x0f*\xd0\x03\n\nCustomType\x12\x17\n\x13INVALID_CUSTOM_TYPE\x10\x00\x12\x12\n\x0e\x43USTOM_TYPE_00\x10\x01\x12\x12\n\x0e\x43USTOM_TYPE_01\x10\x02\x12\x12\n\x0e\x43USTOM_TYPE_02\x10\x03\x12\x12\n\x0e\x43USTOM_TYPE_03\x10\x04\x12\x12\n\x0e\x43USTOM_TYPE_04\x10\x05\x12\x12\n\x0e\x43USTOM_TYPE_05\x10\x06\x12\x12\n\x0e\x43USTOM_TYPE_06\x10\x07\x12\x12\n\x0e\x43USTOM_TYPE_07\x10\x08\x12\x12\n\x0e\x43USTOM_TYPE_08\x10\t\x12\x12\n\x0e\x43USTOM_TYPE_09\x10\n\x12\x12\n\x0e\x43USTOM_TYPE_10\x10\x0b\x12\x12\n\x0e\x43USTOM_TYPE_11\x10\x0c\x12\x12\n\x0e\x43USTOM_TYPE_12\x10\r\x12\x12\n\x0e\x43USTOM_TYPE_13\x10\x0e\x12\x12\n\x0e\x43USTOM_TYPE_14\x10\x0f\x12\x12\n\x0e\x43USTOM_TYPE_15\x10\x10\x12\x12\n\x0e\x43USTOM_TYPE_16\x10\x11\x12\x12\n\x0e\x43USTOM_TYPE_17\x10\x12\x12\x12\n\x0e\x43USTOM_TYPE_18\x10\x13\x12\x12\n\x0e\x43USTOM_TYPE_19\x10\x14\x12\x15\n\x11\x43USTOM_TYPE_COUNT\x10\x14\x1a\x02\x10\x01*\x8e\x01\n\x0cObjectFamily\x12\x12\n\x0eINVALID_FAMILY\x10\x00\x12\x12\n\x0eUNKNOWN_FAMILY\x10\x01\x12\t\n\x05\x42LOCK\x10\x02\x12\x0e\n\nLIGHT_CUBE\x10\x03\x12\x0b\n\x07\x43HARGER\x10\x04\x12\x11\n\rCUSTOM_OBJECT\x10\x07\x12\x17\n\x13OBJECT_FAMILY_COUNT\x10\x07\x1a\x02\x10\x01*\x88\x01\n\x06UpAxis\x12\x10\n\x0cINVALID_AXIS\x10\x00\x12\x0e\n\nX_NEGATIVE\x10\x01\x12\x0e\n\nX_POSITIVE\x10\x02\x12\x0e\n\nY_NEGATIVE\x10\x03\x12\x0e\n\nY_POSITIVE\x10\x04\x12\x0e\n\nZ_NEGATIVE\x10\x05\x12\x0e\n\nZ_POSITIVE\x10\x06\x12\x0c\n\x08NUM_AXES\x10\x07*P\n\x0fObjectConstants\x12\x19\n\x15OBJECT_CONSTANTS_NULL\x10\x00\x12\"\n\x1e\x46IXED_CUSTOM_WALL_THICKNESS_MM\x10\n*\xac\x04\n\x12\x43ustomObjectMarker\x12\x19\n\x15\x43USTOM_MARKER_UNKNOWN\x10\x00\x12\x1b\n\x17\x43USTOM_MARKER_CIRCLES_2\x10\x01\x12\x1b\n\x17\x43USTOM_MARKER_CIRCLES_3\x10\x02\x12\x1b\n\x17\x43USTOM_MARKER_CIRCLES_4\x10\x03\x12\x1b\n\x17\x43USTOM_MARKER_CIRCLES_5\x10\x04\x12\x1c\n\x18\x43USTOM_MARKER_DIAMONDS_2\x10\x05\x12\x1c\n\x18\x43USTOM_MARKER_DIAMONDS_3\x10\x06\x12\x1c\n\x18\x43USTOM_MARKER_DIAMONDS_4\x10\x07\x12\x1c\n\x18\x43USTOM_MARKER_DIAMONDS_5\x10\x08\x12\x1c\n\x18\x43USTOM_MARKER_HEXAGONS_2\x10\t\x12\x1c\n\x18\x43USTOM_MARKER_HEXAGONS_3\x10\n\x12\x1c\n\x18\x43USTOM_MARKER_HEXAGONS_4\x10\x0b\x12\x1c\n\x18\x43USTOM_MARKER_HEXAGONS_5\x10\x0c\x12\x1d\n\x19\x43USTOM_MARKER_TRIANGLES_2\x10\r\x12\x1d\n\x19\x43USTOM_MARKER_TRIANGLES_3\x10\x0e\x12\x1d\n\x19\x43USTOM_MARKER_TRIANGLES_4\x10\x0f\x12\x1d\n\x19\x43USTOM_MARKER_TRIANGLES_5\x10\x10\x12\x17\n\x13\x43USTOM_MARKER_COUNT\x10\x10\x1a\x02\x10\x01*\xa4\x01\n\x18\x43ustomObjectDeletionMode\x12\x19\n\x15\x44\x45LETION_MASK_UNKNOWN\x10\x00\x12&\n\"DELETION_MASK_FIXED_CUSTOM_OBJECTS\x10\x01\x12\'\n#DELETION_MASK_CUSTOM_MARKER_OBJECTS\x10\x02\x12\x1c\n\x18\x44\x45LETION_MASK_ARCHETYPES\x10\x03\x62\x06proto3')
|
|
19
|
+
|
|
20
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
|
21
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'anki_vector.messaging.cube_pb2', globals())
|
|
22
|
+
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
23
|
+
|
|
24
|
+
DESCRIPTOR._options = None
|
|
25
|
+
_CUSTOMTYPE._options = None
|
|
26
|
+
_CUSTOMTYPE._serialized_options = b'\020\001'
|
|
27
|
+
_OBJECTFAMILY._options = None
|
|
28
|
+
_OBJECTFAMILY._serialized_options = b'\020\001'
|
|
29
|
+
_CUSTOMOBJECTMARKER._options = None
|
|
30
|
+
_CUSTOMOBJECTMARKER._serialized_options = b'\020\001'
|
|
31
|
+
_ROBOTOBSERVEDOBJECT.fields_by_name['object_family']._options = None
|
|
32
|
+
_ROBOTOBSERVEDOBJECT.fields_by_name['object_family']._serialized_options = b'\030\001'
|
|
33
|
+
_OBJECTTYPE._serialized_start=4889
|
|
34
|
+
_OBJECTTYPE._serialized_end=5012
|
|
35
|
+
_CUSTOMTYPE._serialized_start=5015
|
|
36
|
+
_CUSTOMTYPE._serialized_end=5479
|
|
37
|
+
_OBJECTFAMILY._serialized_start=5482
|
|
38
|
+
_OBJECTFAMILY._serialized_end=5624
|
|
39
|
+
_UPAXIS._serialized_start=5627
|
|
40
|
+
_UPAXIS._serialized_end=5763
|
|
41
|
+
_OBJECTCONSTANTS._serialized_start=5765
|
|
42
|
+
_OBJECTCONSTANTS._serialized_end=5845
|
|
43
|
+
_CUSTOMOBJECTMARKER._serialized_start=5848
|
|
44
|
+
_CUSTOMOBJECTMARKER._serialized_end=6404
|
|
45
|
+
_CUSTOMOBJECTDELETIONMODE._serialized_start=6407
|
|
46
|
+
_CUSTOMOBJECTDELETIONMODE._serialized_end=6571
|
|
47
|
+
_CONNECTCUBEREQUEST._serialized_start=151
|
|
48
|
+
_CONNECTCUBEREQUEST._serialized_end=171
|
|
49
|
+
_CONNECTCUBERESPONSE._serialized_start=174
|
|
50
|
+
_CONNECTCUBERESPONSE._serialized_end=315
|
|
51
|
+
_CUBESAVAILABLEREQUEST._serialized_start=317
|
|
52
|
+
_CUBESAVAILABLEREQUEST._serialized_end=340
|
|
53
|
+
_CUBESAVAILABLERESPONSE._serialized_start=342
|
|
54
|
+
_CUBESAVAILABLERESPONSE._serialized_end=451
|
|
55
|
+
_DISCONNECTCUBEREQUEST._serialized_start=453
|
|
56
|
+
_DISCONNECTCUBEREQUEST._serialized_end=476
|
|
57
|
+
_DISCONNECTCUBERESPONSE._serialized_start=478
|
|
58
|
+
_DISCONNECTCUBERESPONSE._serialized_end=566
|
|
59
|
+
_FLASHCUBELIGHTSREQUEST._serialized_start=568
|
|
60
|
+
_FLASHCUBELIGHTSREQUEST._serialized_end=592
|
|
61
|
+
_FLASHCUBELIGHTSRESPONSE._serialized_start=594
|
|
62
|
+
_FLASHCUBELIGHTSRESPONSE._serialized_end=683
|
|
63
|
+
_FORGETPREFERREDCUBEREQUEST._serialized_start=685
|
|
64
|
+
_FORGETPREFERREDCUBEREQUEST._serialized_end=713
|
|
65
|
+
_FORGETPREFERREDCUBERESPONSE._serialized_start=715
|
|
66
|
+
_FORGETPREFERREDCUBERESPONSE._serialized_end=808
|
|
67
|
+
_SETPREFERREDCUBEREQUEST._serialized_start=810
|
|
68
|
+
_SETPREFERREDCUBEREQUEST._serialized_end=855
|
|
69
|
+
_SETPREFERREDCUBERESPONSE._serialized_start=857
|
|
70
|
+
_SETPREFERREDCUBERESPONSE._serialized_end=947
|
|
71
|
+
_SETCUBELIGHTSREQUEST._serialized_start=950
|
|
72
|
+
_SETCUBELIGHTSREQUEST._serialized_end=1382
|
|
73
|
+
_SETCUBELIGHTSREQUEST_MAKERELATIVEMODE._serialized_start=1314
|
|
74
|
+
_SETCUBELIGHTSREQUEST_MAKERELATIVEMODE._serialized_end=1382
|
|
75
|
+
_SETCUBELIGHTSRESPONSE._serialized_start=1384
|
|
76
|
+
_SETCUBELIGHTSRESPONSE._serialized_end=1471
|
|
77
|
+
_OBJECTAVAILABLE._serialized_start=1473
|
|
78
|
+
_OBJECTAVAILABLE._serialized_end=1510
|
|
79
|
+
_OBJECTCONNECTIONSTATE._serialized_start=1513
|
|
80
|
+
_OBJECTCONNECTIONSTATE._serialized_end=1659
|
|
81
|
+
_OBJECTMOVED._serialized_start=1661
|
|
82
|
+
_OBJECTMOVED._serialized_end=1712
|
|
83
|
+
_OBJECTSTOPPEDMOVING._serialized_start=1714
|
|
84
|
+
_OBJECTSTOPPEDMOVING._serialized_end=1773
|
|
85
|
+
_OBJECTUPAXISCHANGED._serialized_start=1775
|
|
86
|
+
_OBJECTUPAXISCHANGED._serialized_end=1891
|
|
87
|
+
_OBJECTTAPPED._serialized_start=1893
|
|
88
|
+
_OBJECTTAPPED._serialized_end=1945
|
|
89
|
+
_ROBOTOBSERVEDOBJECT._serialized_start=1948
|
|
90
|
+
_ROBOTOBSERVEDOBJECT._serialized_end=2316
|
|
91
|
+
_CUBECONNECTIONLOST._serialized_start=2318
|
|
92
|
+
_CUBECONNECTIONLOST._serialized_end=2338
|
|
93
|
+
_DELETECUSTOMOBJECTSREQUEST._serialized_start=2340
|
|
94
|
+
_DELETECUSTOMOBJECTSREQUEST._serialized_end=2440
|
|
95
|
+
_DELETECUSTOMOBJECTSRESPONSE._serialized_start=2442
|
|
96
|
+
_DELETECUSTOMOBJECTSRESPONSE._serialized_end=2535
|
|
97
|
+
_CREATEFIXEDCUSTOMOBJECTREQUEST._serialized_start=2538
|
|
98
|
+
_CREATEFIXEDCUSTOMOBJECTREQUEST._serialized_end=2685
|
|
99
|
+
_CREATEFIXEDCUSTOMOBJECTRESPONSE._serialized_start=2687
|
|
100
|
+
_CREATEFIXEDCUSTOMOBJECTRESPONSE._serialized_end=2803
|
|
101
|
+
_CUSTOMBOXDEFINITION._serialized_start=2806
|
|
102
|
+
_CUSTOMBOXDEFINITION._serialized_end=3376
|
|
103
|
+
_CUSTOMCUBEDEFINITION._serialized_start=3379
|
|
104
|
+
_CUSTOMCUBEDEFINITION._serialized_end=3537
|
|
105
|
+
_CUSTOMWALLDEFINITION._serialized_start=3540
|
|
106
|
+
_CUSTOMWALLDEFINITION._serialized_end=3718
|
|
107
|
+
_DEFINECUSTOMOBJECTREQUEST._serialized_start=3721
|
|
108
|
+
_DEFINECUSTOMOBJECTREQUEST._serialized_end=4089
|
|
109
|
+
_DEFINECUSTOMOBJECTRESPONSE._serialized_start=4091
|
|
110
|
+
_DEFINECUSTOMOBJECTRESPONSE._serialized_end=4200
|
|
111
|
+
_OBJECTEVENT._serialized_start=4203
|
|
112
|
+
_OBJECTEVENT._serialized_end=4887
|
|
113
|
+
# @@protoc_insertion_point(module_scope)
|