From 6e327444a623dac819ffe777146cdc77e4f98def Mon Sep 17 00:00:00 2001 From: Michelle Sintov Date: Thu, 10 Jan 2019 17:20:44 -0800 Subject: [PATCH 001/115] Add CONTRIBUTING.md (#94) --- sdk/CONTRIBUTING.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 sdk/CONTRIBUTING.md diff --git a/sdk/CONTRIBUTING.md b/sdk/CONTRIBUTING.md new file mode 100644 index 0000000..d96e057 --- /dev/null +++ b/sdk/CONTRIBUTING.md @@ -0,0 +1,9 @@ +We accept contributions from 3rd parties as long as you first complete an individual CLA (Contributor License Agreement): + +http://go.anki.com/individual-cla + +If your employer(s) have rights to intellectual property that you create, and that includes your contributions, then we also require a separate Corporate CLA from them: + +http://go.anki.com/corporate-cla + +Please also review our: [Code Style Guide](CODESTYLE.md) From c2d57a46bc4a130b41f68ef8343ff4c305a50b75 Mon Sep 17 00:00:00 2001 From: Michelle Sintov Date: Fri, 1 Feb 2019 14:23:20 -0800 Subject: [PATCH 002/115] Remove file in incorrect location --- sdk/CONTRIBUTING.md | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 sdk/CONTRIBUTING.md diff --git a/sdk/CONTRIBUTING.md b/sdk/CONTRIBUTING.md deleted file mode 100644 index d96e057..0000000 --- a/sdk/CONTRIBUTING.md +++ /dev/null @@ -1,9 +0,0 @@ -We accept contributions from 3rd parties as long as you first complete an individual CLA (Contributor License Agreement): - -http://go.anki.com/individual-cla - -If your employer(s) have rights to intellectual property that you create, and that includes your contributions, then we also require a separate Corporate CLA from them: - -http://go.anki.com/corporate-cla - -Please also review our: [Code Style Guide](CODESTYLE.md) From 8b7cba3cbe1beff3ce6659c137e198b6aac69cc6 Mon Sep 17 00:00:00 2001 From: Michelle Sintov Date: Fri, 1 Feb 2019 14:35:13 -0800 Subject: [PATCH 003/115] Add CONTRIBUTING (#17) --- CONTRIBUTING.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..d96e057 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,9 @@ +We accept contributions from 3rd parties as long as you first complete an individual CLA (Contributor License Agreement): + +http://go.anki.com/individual-cla + +If your employer(s) have rights to intellectual property that you create, and that includes your contributions, then we also require a separate Corporate CLA from them: + +http://go.anki.com/corporate-cla + +Please also review our: [Code Style Guide](CODESTYLE.md) From 33a9232af12f00db9f21d3968c029bd0bacb0898 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20M=C3=BCller?= Date: Thu, 7 Feb 2019 20:51:26 +0100 Subject: [PATCH 004/115] Correct dock_with_cube params: approach_angle_rad and distance_from_marker_mm (#19) --- anki_vector/behavior.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/anki_vector/behavior.py b/anki_vector/behavior.py index eb652fc..4a9a4ef 100644 --- a/anki_vector/behavior.py +++ b/anki_vector/behavior.py @@ -293,9 +293,9 @@ async def dock_with_cube(self, if approach_angle is not None: dock_request.use_approach_angle = True dock_request.use_pre_dock_pose = True - dock_request.approach_angle = approach_angle.radians + dock_request.approach_angle_rad = approach_angle.radians if distance_from_marker is not None: - dock_request.distance_from_marker = distance_from_marker.distance_mm + dock_request.distance_from_marker_mm = distance_from_marker.distance_mm return await self.grpc_interface.DockWithCube(dock_request) From c46c839d0386f000a025d899884c8790bf310139 Mon Sep 17 00:00:00 2001 From: Bruce von Kugelgen <45771625+BruceVonK@users.noreply.github.com> Date: Tue, 11 Dec 2018 13:41:07 -0800 Subject: [PATCH 005/115] VIC-11924 Escaped double quotes to display initial input field value correctly (#63) --- examples/apps/remote_control/remote_control.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/apps/remote_control/remote_control.py b/examples/apps/remote_control/remote_control.py index 99e5529..d386d7a 100755 --- a/examples/apps/remote_control/remote_control.py +++ b/examples/apps/remote_control/remote_control.py @@ -373,7 +373,7 @@ def handle_index_page():

Play Animations

0 .. 9 : Play Animation mapped to that key

Talk

- Space : Say + Space : Say From 16b40bf2def8e091b7aed8da88b30514b270186a Mon Sep 17 00:00:00 2001 From: Shawn Blakesley Date: Tue, 11 Dec 2018 15:16:37 -0800 Subject: [PATCH 006/115] Hide 3D viewer controls in proximity mapper (#57) --- anki_vector/opengl/__init__.py | 7 +++++-- anki_vector/viewer.py | 11 +++++++---- examples/apps/proximity_mapper/proximity_mapper.py | 4 ++-- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/anki_vector/opengl/__init__.py b/anki_vector/opengl/__init__.py index 0db3dc8..bc9c542 100644 --- a/anki_vector/opengl/__init__.py +++ b/anki_vector/opengl/__init__.py @@ -49,7 +49,8 @@ def main(close_event: mp.Event, nav_map_queue: mp.Queue, world_frame_queue: mp.Queue, extra_render_function_queue: mp.Queue, - user_data_queue: mp.Queue): + user_data_queue: mp.Queue, + show_viewer_controls: bool = True): """Run the 3D Viewer window. This is intended to run on a background process. .. code-block:: python @@ -87,13 +88,15 @@ def main(close_event: mp.Event, :type extra_render_function_queue: multiprocessing.Queue :param user_data_queue: A queue that may be used outside the SDK to pass information to the viewer process. May be used by ``extra_render_function_queue`` functions. + :param show_viewer_controls: Specifies whether to draw controls on the view. """ viewer = opengl_viewer.OpenGLViewer(close_event, input_intent_queue, nav_map_queue, world_frame_queue, extra_render_function_queue, - user_data_queue) + user_data_queue, + show_viewer_controls=show_viewer_controls) viewer.run() diff --git a/anki_vector/viewer.py b/anki_vector/viewer.py index ed2e1f0..c6e336d 100644 --- a/anki_vector/viewer.py +++ b/anki_vector/viewer.py @@ -244,7 +244,7 @@ def __init__(self, robot): self._update_thread: threading.Thread = None self._last_robot_control_intents = None - def show(self): + def show(self, show_viewer_controls: bool = True): """Spawns a background process that shows the navigation map in a 3D view. .. testcode:: @@ -257,6 +257,8 @@ def show(self): robot.viewer_3d.show() time.sleep(5) robot.viewer_3d.close() + + :param show_viewer_controls: Specifies whether to draw controls on the view. """ from . import opengl ctx = mp.get_context('spawn') @@ -277,7 +279,8 @@ def show(self): self._nav_map_queue, self._world_frame_queue, self._extra_render_function_queue, - self._user_data_queue), + self._user_data_queue, + show_viewer_controls), daemon=True, name="3D Viewer Process") self._process.start() @@ -371,8 +374,8 @@ def _update(self): old_intents = self._last_robot_control_intents self._last_robot_control_intents = input_intents - if not old_intents or (old_intents.left_wheel_speed != input_intents.left_wheel_speed - or old_intents.right_wheel_speed != input_intents.right_wheel_speed): + if not old_intents or (old_intents.left_wheel_speed != input_intents.left_wheel_speed or + old_intents.right_wheel_speed != input_intents.right_wheel_speed): self.robot.motors.set_wheel_motors(input_intents.left_wheel_speed, input_intents.right_wheel_speed, input_intents.left_wheel_speed * 4, diff --git a/examples/apps/proximity_mapper/proximity_mapper.py b/examples/apps/proximity_mapper/proximity_mapper.py index f67b0f0..9a88354 100755 --- a/examples/apps/proximity_mapper/proximity_mapper.py +++ b/examples/apps/proximity_mapper/proximity_mapper.py @@ -307,8 +307,8 @@ def open_point_sort_func(position: Vector3): with anki_vector.Robot(args.serial, enable_camera_feed=True, show_viewer=True, - enable_nav_map_feed=False, - show_3d_viewer=True) as robotInstance: + enable_nav_map_feed=False) as robotInstance: + robotInstance.viewer_3d.show(False) robotInstance.behavior.drive_off_charger() loop = asyncio.get_event_loop() loop.run_until_complete(map_explorer(robotInstance)) From 2df50d3522d739bc683c9a733a0ba36de23b0a1c Mon Sep 17 00:00:00 2001 From: Shawn Blakesley Date: Wed, 12 Dec 2018 10:12:44 -0800 Subject: [PATCH 007/115] Remove lingering reference to SDK Folder in docs (#65) --- docs/source/getstarted.rst | 1 + docs/source/install-linux.rst | 4 ++-- docs/source/install-macos.rst | 4 ++-- docs/source/install-windows.rst | 4 ++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/source/getstarted.rst b/docs/source/getstarted.rst index dd47874..15cf410 100644 --- a/docs/source/getstarted.rst +++ b/docs/source/getstarted.rst @@ -26,6 +26,7 @@ Prerequisites ------------- * You have completed the Installation steps, found here: :ref:`initial` +* You have downloaded and extracted the example programs, found here: :doc:`Downloads ` * The Vector companion app is *not* currently connected to Vector. * Vector is connected to the same network as your computer. * You can see Vector's eyes on his screen. diff --git a/docs/source/install-linux.rst b/docs/source/install-linux.rst index e5c48a9..23ef55b 100644 --- a/docs/source/install-linux.rst +++ b/docs/source/install-linux.rst @@ -54,7 +54,7 @@ To install the SDK, type the following into the Terminal window:: Vector Authentication ^^^^^^^^^^^^^^^^^^^^^ -To authenticate with the robot, type the following into the Terminal window:: +To authenticate with the robot, type the following into the Terminal window. Note that during this configure step, your password will not show by design as a security precaution:: python3 -m anki_vector.configure @@ -105,7 +105,7 @@ To install the SDK, type the following into the Terminal window:: Vector Authentication ^^^^^^^^^^^^^^^^^^^^^ -To authenticate with the robot, type the following into the Terminal window:: +To authenticate with the robot, type the following into the Terminal window. Note that during this configure step, your password will not show by design as a security precaution:: python3.6 -m anki_vector.configure diff --git a/docs/source/install-macos.rst b/docs/source/install-macos.rst index e229cca..971dd70 100644 --- a/docs/source/install-macos.rst +++ b/docs/source/install-macos.rst @@ -37,7 +37,7 @@ The Vector SDK supports Python 3.6.1 or later. SDK Installation ^^^^^^^^^^^^^^^^ -To install the SDK, navigate into the SDK folder and type the following into a Terminal window:: +To install the SDK, type the following into the Terminal window:: python3 -m pip install --user anki_vector @@ -45,7 +45,7 @@ To install the SDK, navigate into the SDK folder and type the following into a T Vector Authentication ^^^^^^^^^^^^^^^^^^^^^ -To authenticate with the robot, type the following into the Terminal window:: +To authenticate with the robot, type the following into the Terminal window. Note that during this configure step, your password will not show by design as a security precaution:: python3 -m anki_vector.configure diff --git a/docs/source/install-windows.rst b/docs/source/install-windows.rst index fd750ae..2b1d7c4 100644 --- a/docs/source/install-windows.rst +++ b/docs/source/install-windows.rst @@ -31,7 +31,7 @@ run it on your computer. SDK Installation ^^^^^^^^^^^^^^^^ -To install the SDK, navigate into the SDK folder and type the following into a Command Prompt window:: +To install the SDK, type the following into the Command Prompt window:: py -3 -m pip install --user anki_vector @@ -43,7 +43,7 @@ To install the SDK, navigate into the SDK folder and type the following into a C Vector Authentication ^^^^^^^^^^^^^^^^^^^^^ -To authenticate with the robot, type the following into the Terminal window:: +To authenticate with the robot, type the following into the Command Prompt window. Note that during this configure step, your password will not show by design as a security precaution:: py -m anki_vector.configure From a0b2a80d563be553b5947827250706da75967ed4 Mon Sep 17 00:00:00 2001 From: Bruce von Kugelgen <45771625+BruceVonK@users.noreply.github.com> Date: Thu, 13 Dec 2018 11:18:44 -0800 Subject: [PATCH 008/115] =?UTF-8?q?VIC-11672=20Working=20code=20that=20dem?= =?UTF-8?q?onstrates=20the=20use=20of=20async=20commands=20and=20futures.?= =?UTF-8?q?=E2=80=A6=20(#67)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Working code that demonstrates the use of async commands and futures. * Update sdk/anki_vector/robot.py Co-Authored-By: BruceVonK <45771625+BruceVonK@users.noreply.github.com> * snake case, added import --- anki_vector/robot.py | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/anki_vector/robot.py b/anki_vector/robot.py index 12fbeb1..2269847 100755 --- a/anki_vector/robot.py +++ b/anki_vector/robot.py @@ -858,10 +858,19 @@ class AsyncRobot(Robot): .. testcode:: import anki_vector + from anki_vector.util import degrees # Create the robot connection with anki_vector.AsyncRobot() as robot: - # Run your commands - robot.anim.play_animation("anim_turn_left_01").result() + # Start saying text asynchronously + say_future = robot.say_text("Now is the time") + # Turn robot, wait for completion + turn_future = robot.behavior.turn_in_place(degrees(3*360)) + turn_future.result() + # Play pounce animation, wait for completion + pounce_future = robot.anim.play_animation("anim_pounce_03") + pounce_future.result() + # Make sure text has been spoken + say_future.result() 2. Using :func:`connect` and :func:`disconnect` to explicitly open and close the connection: it allows the robot's connection to continue in the context in which it started. @@ -869,12 +878,21 @@ class AsyncRobot(Robot): .. testcode:: import anki_vector + from anki_vector.util import degrees # Create a Robot object robot = anki_vector.AsyncRobot() # Connect to Vector robot.connect() - # Run your commands - robot.anim.play_animation("anim_turn_left_01").result() + # Start saying text asynchronously + say_future = robot.say_text("Now is the time") + # Turn robot, wait for completion + turn_future = robot.behavior.turn_in_place(degrees(3 * 360)) + turn_future.result() + # Play pounce animation, wait for completion + pounce_future = robot.anim.play_animation("anim_pounce_03") + pounce_future.result() + # Make sure text has been spoken + say_future.result() # Disconnect from Vector robot.disconnect() From 68153036ca1d1e08d18ba2f929d4cb40f692c632 Mon Sep 17 00:00:00 2001 From: Michelle Sintov Date: Thu, 13 Dec 2018 13:15:45 -0800 Subject: [PATCH 009/115] Add anki_vector module upgrade steps #66 --- docs/source/install-linux.rst | 16 ++++++++++++++++ docs/source/install-macos.rst | 8 ++++++++ docs/source/install-windows.rst | 8 ++++++++ 3 files changed, 32 insertions(+) diff --git a/docs/source/install-linux.rst b/docs/source/install-linux.rst index 23ef55b..226a756 100644 --- a/docs/source/install-linux.rst +++ b/docs/source/install-linux.rst @@ -50,6 +50,14 @@ To install the SDK, type the following into the Terminal window:: python3 -m pip install --user anki_vector +""""""""""" +SDK Upgrade +""""""""""" + +To upgrade the SDK from a previous install, enter this command:: + + python3 -m pip install --user --upgrade anki_vector + ^^^^^^^^^^^^^^^^^^^^^ Vector Authentication ^^^^^^^^^^^^^^^^^^^^^ @@ -101,6 +109,14 @@ To install the SDK, type the following into the Terminal window:: python3.6 -m pip install --user anki_vector +""""""""""" +SDK Upgrade +""""""""""" + +To upgrade the SDK from a previous install, enter this command:: + + python3.6 -m pip install --user --upgrade anki_vector + ^^^^^^^^^^^^^^^^^^^^^ Vector Authentication ^^^^^^^^^^^^^^^^^^^^^ diff --git a/docs/source/install-macos.rst b/docs/source/install-macos.rst index 971dd70..bd1a194 100644 --- a/docs/source/install-macos.rst +++ b/docs/source/install-macos.rst @@ -41,6 +41,14 @@ To install the SDK, type the following into the Terminal window:: python3 -m pip install --user anki_vector +""""""""""" +SDK Upgrade +""""""""""" + +To upgrade the SDK from a previous install, enter this command:: + + python3 -m pip install --user --upgrade anki_vector + ^^^^^^^^^^^^^^^^^^^^^ Vector Authentication ^^^^^^^^^^^^^^^^^^^^^ diff --git a/docs/source/install-windows.rst b/docs/source/install-windows.rst index 2b1d7c4..d068e6d 100644 --- a/docs/source/install-windows.rst +++ b/docs/source/install-windows.rst @@ -39,6 +39,14 @@ To install the SDK, type the following into the Command Prompt window:: .. note:: If you encounter an error during SDK installation, you may need to upgrade your Python Setuptools. Try ``py -3 -m pip install --upgrade setuptools`` +""""""""""" +SDK Upgrade +""""""""""" + +To upgrade the SDK from a previous install, enter this command:: + + py -3 -m pip install --user --upgrade anki_vector + ^^^^^^^^^^^^^^^^^^^^^ Vector Authentication ^^^^^^^^^^^^^^^^^^^^^ From 2c549b3edf01b13f1e141e8ee149e1667c972fa2 Mon Sep 17 00:00:00 2001 From: Bruce von Kugelgen <45771625+BruceVonK@users.noreply.github.com> Date: Thu, 13 Dec 2018 17:15:44 -0800 Subject: [PATCH 010/115] OpenGL expects degrees for rotation, existing code was using radians. (#68) --- anki_vector/opengl/opengl_vector.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/anki_vector/opengl/opengl_vector.py b/anki_vector/opengl/opengl_vector.py index 138fab4..16cc380 100644 --- a/anki_vector/opengl/opengl_vector.py +++ b/anki_vector/opengl/opengl_vector.py @@ -74,7 +74,7 @@ LIFT_PIVOT_HEIGHT_MM = 45.0 #: Angle of the lift in the object's initial default pose. -LIFT_ANGLE_IN_DEFAULT_POSE = -11.36 +LIFT_ANGLE_IN_DEFAULT_POSE = -0.1136 #: Pivot offset for where the fork rotates around itself FORK_PIVOT_X = 3.0 @@ -321,6 +321,7 @@ def display(self, pose: util.Pose, head_angle: util.Angle, lift_position: util.D angle_radians = math.asin(sin_angle) lift_angle = -(angle_radians - LIFT_ANGLE_IN_DEFAULT_POSE) + lift_angle_degrees = math.degrees(lift_angle) glPushMatrix() glEnable(GL_LIGHTING) @@ -334,7 +335,7 @@ def display(self, pose: util.Pose, head_angle: util.Angle, lift_position: util.D glPolygonMode(GL_FRONT_AND_BACK, GL_FILL) self._display_vector_body() - self._display_vector_lift(lift_angle) + self._display_vector_lift(lift_angle_degrees) self._display_vector_head(head_angle_degrees) glDisable(GL_LIGHTING) From 4a62114a40bf697d06b5c7660ff09c586c6a6338 Mon Sep 17 00:00:00 2001 From: Shawn Blakesley Date: Fri, 14 Dec 2018 17:54:33 -0800 Subject: [PATCH 011/115] VIC-7239 Add protobuf object documentation to sdk docs (#69) --- anki_vector/messaging/__init__.py | 25 +- anki_vector/messaging/behavior.proto | 16 +- anki_vector/messaging/behavior_pb2.py | 28 +- .../messaging/external_interface.proto | 1 + .../messaging/external_interface_pb2_grpc.py | 4 +- anki_vector/messaging/messages.proto | 52 +- anki_vector/messaging/messages_pb2.py | 500 +- anki_vector/messaging/response_status.proto | 19 +- anki_vector/messaging/settings.proto | 14 - anki_vector/messaging/settings_pb2.py | 75 +- anki_vector/messaging/shared.proto | 1 + docs/source/api.rst | 5 +- docs/source/proto.html | 8540 +++++++++++++++++ docs/source/proto.rst | 13 + docs/source/template.tmpl | 310 + 15 files changed, 9162 insertions(+), 441 deletions(-) create mode 100644 docs/source/proto.html create mode 100644 docs/source/proto.rst create mode 100644 docs/source/template.tmpl diff --git a/anki_vector/messaging/__init__.py b/anki_vector/messaging/__init__.py index a08083b..5beb98e 100644 --- a/anki_vector/messaging/__init__.py +++ b/anki_vector/messaging/__init__.py @@ -13,7 +13,30 @@ # limitations under the License. """ -Protobuf and gRPC messages exposed to the Vector Python SDK +Protobuf and gRPC messages exposed to the Vector Python SDK. + +.. warning:: + + This package is provided to understand the messages passed between the SDK and Vector, + and it should not be necessary for writing code that uses the SDK. + +.. code-block:: + python + + from anki_vector.messaging import client, protocol + + async def send_version_request(interface: client.ExternalInterfaceStub, client_version, min_host_version): + \"\"\"This function needs to be executed and awaited in the same event loop + as the interface is created. + \"\"\" + # Create a protocol version request message + version = protocol.ProtocolVersionRequest(client_version=client_version, + min_host_version=min_host_version) + + # Send the protocol version to the external interface and await the result + protocol_version = await interface.ProtocolVersion(version) + +For information about individual messages and their parameters, see :doc:`the protobuf documentation `. """ from . import protocol diff --git a/anki_vector/messaging/behavior.proto b/anki_vector/messaging/behavior.proto index 2d1faf7..e59b53d 100644 --- a/anki_vector/messaging/behavior.proto +++ b/anki_vector/messaging/behavior.proto @@ -20,17 +20,22 @@ package Anki.Vector.external_interface; import "anki_vector/messaging/messages.proto"; +// Tell the behavior stream to release control from the SDK. +// The stream may stay alive, but Vector will be allowed to run +// his normal behaviors. message ControlRelease {} -// Request control of the behavior system at a given priority +// Request control of the behavior system at a given priority. +// Currently there is only one priority level. message ControlRequest { + // Where in the behavior tree the SDK code should be executed. enum Priority { + // Unknown priority. Used for versions that don't understand old priority levels. UNKNOWN = 0; - // Request control above mandatory physical reactions. Not recommended. - OVERRIDE_ALL = 10; // Highest priority level. Directly under mandatory physical reactions. TOP_PRIORITY_AI = 20; } + // Where in the behavior tree the SDK code should be executed. Priority priority = 1; } @@ -38,7 +43,9 @@ message ControlRequest { // requesting or releasing control. message BehaviorControlRequest { oneof request_type { + // Release control of the behavior system back to Vector. ControlRelease control_release = 1; + // Request control of the behavior system for the SDK. ControlRequest control_request = 2; } } @@ -57,8 +64,11 @@ message ControlLostResponse {} // Responses from the behavior stream. message BehaviorControlResponse { oneof response_type { + // The SDK user is now free to directly control Vector. ControlGrantedResponse control_granted_response = 1; + // Control of the behavior system has been lost to a higher priority behavior. ControlLostResponse control_lost_event = 2; + // Used by Vector to verify the connection is still alive. KeepAlivePing keep_alive = 3; } } \ No newline at end of file diff --git a/anki_vector/messaging/behavior_pb2.py b/anki_vector/messaging/behavior_pb2.py index 0e708b0..41a54f4 100644 --- a/anki_vector/messaging/behavior_pb2.py +++ b/anki_vector/messaging/behavior_pb2.py @@ -20,7 +20,7 @@ name='anki_vector/messaging/behavior.proto', package='Anki.Vector.external_interface', syntax='proto3', - serialized_pb=_b('\n$anki_vector/messaging/behavior.proto\x12\x1e\x41nki.Vector.external_interface\x1a$anki_vector/messaging/messages.proto\"\x10\n\x0e\x43ontrolRelease\"\x9b\x01\n\x0e\x43ontrolRequest\x12I\n\x08priority\x18\x01 \x01(\x0e\x32\x37.Anki.Vector.external_interface.ControlRequest.Priority\">\n\x08Priority\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x10\n\x0cOVERRIDE_ALL\x10\n\x12\x13\n\x0fTOP_PRIORITY_AI\x10\x14\"\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\"\x9e\x02\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\x42\x0f\n\rresponse_typeb\x06proto3') + serialized_pb=_b('\n$anki_vector/messaging/behavior.proto\x12\x1e\x41nki.Vector.external_interface\x1a$anki_vector/messaging/messages.proto\"\x10\n\x0e\x43ontrolRelease\"\x89\x01\n\x0e\x43ontrolRequest\x12I\n\x08priority\x18\x01 \x01(\x0e\x32\x37.Anki.Vector.external_interface.ControlRequest.Priority\",\n\x08Priority\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x13\n\x0fTOP_PRIORITY_AI\x10\x14\"\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\"\x9e\x02\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\x42\x0f\n\rresponse_typeb\x06proto3') , dependencies=[anki__vector_dot_messaging_dot_messages__pb2.DESCRIPTOR,]) @@ -37,18 +37,14 @@ options=None, type=None), _descriptor.EnumValueDescriptor( - name='OVERRIDE_ALL', index=1, number=10, - options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='TOP_PRIORITY_AI', index=2, number=20, + name='TOP_PRIORITY_AI', index=1, number=20, options=None, type=None), ], containing_type=None, options=None, serialized_start=222, - serialized_end=284, + serialized_end=266, ) _sym_db.RegisterEnumDescriptor(_CONTROLREQUEST_PRIORITY) @@ -105,7 +101,7 @@ oneofs=[ ], serialized_start=129, - serialized_end=284, + serialized_end=266, ) @@ -145,8 +141,8 @@ name='request_type', full_name='Anki.Vector.external_interface.BehaviorControlRequest.request_type', index=0, containing_type=None, fields=[]), ], - serialized_start=287, - serialized_end=477, + serialized_start=269, + serialized_end=459, ) @@ -169,8 +165,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=479, - serialized_end=503, + serialized_start=461, + serialized_end=485, ) @@ -193,8 +189,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=505, - serialized_end=526, + serialized_start=487, + serialized_end=508, ) @@ -241,8 +237,8 @@ name='response_type', full_name='Anki.Vector.external_interface.BehaviorControlResponse.response_type', index=0, containing_type=None, fields=[]), ], - serialized_start=529, - serialized_end=815, + serialized_start=511, + serialized_end=797, ) _CONTROLREQUEST.fields_by_name['priority'].enum_type = _CONTROLREQUEST_PRIORITY diff --git a/anki_vector/messaging/external_interface.proto b/anki_vector/messaging/external_interface.proto index 2c60104..e951b95 100644 --- a/anki_vector/messaging/external_interface.proto +++ b/anki_vector/messaging/external_interface.proto @@ -398,6 +398,7 @@ service ExternalInterface { }; } + // Stream navigation map data. rpc NavMapFeed(NavMapFeedRequest) returns (stream NavMapFeedResponse) { option (google.api.http) = { post: "/v1/nav_map_feed", diff --git a/anki_vector/messaging/external_interface_pb2_grpc.py b/anki_vector/messaging/external_interface_pb2_grpc.py index 6f3ed72..2371961 100644 --- a/anki_vector/messaging/external_interface_pb2_grpc.py +++ b/anki_vector/messaging/external_interface_pb2_grpc.py @@ -664,8 +664,8 @@ def SetEyeColor(self, request, context): raise NotImplementedError('Method not implemented!') def NavMapFeed(self, request, context): - # missing associated documentation comment in .proto file - pass + """Stream navigation map data. + """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') diff --git a/anki_vector/messaging/messages.proto b/anki_vector/messaging/messages.proto index 5792cbe..1a7bc72 100644 --- a/anki_vector/messaging/messages.proto +++ b/anki_vector/messaging/messages.proto @@ -25,10 +25,13 @@ import "anki_vector/messaging/extensions.proto"; // still connected. message KeepAlivePing {} +// An animation object. message Animation { + // The name of a given animation. string name = 1; } +// See the DriveWheels rpc for more details. message DriveWheelsRequest { float left_wheel_mmps = 1; float right_wheel_mmps = 2; @@ -36,53 +39,80 @@ message DriveWheelsRequest { float right_wheel_mmps2 = 4; } +// See the DriveWheels rpc for more details. message DriveWheelsResponse { + // A generic status. ResponseStatus status = 1; } +// See the MoveHead rpc for more details. message MoveHeadRequest { float speed_rad_per_sec = 1; } +// See the MoveHead rpc for more details. message MoveHeadResponse { + // A generic status. ResponseStatus status = 1; } +// See the MoveLift rpc for more details. message MoveLiftRequest { float speed_rad_per_sec = 1; } +// See the MoveLift rpc for more details. message MoveLiftResponse { + // A generic status. ResponseStatus status = 1; } +// See PlayAnimation rpc for more details. message PlayAnimationRequest { + // The animation to play. Animation animation = 1; + // The number of times to play the animation in a row. uint32 loops = 2; + // Ignore any movement of Vector's body in the given animation. bool ignore_body_track = 3; + // Ignore any movement of Vector's head in the given animation. bool ignore_head_track = 4; + // Ignore any movement of Vector's lift in the given animation. bool ignore_lift_track = 5; } +// See PlayAnimation rpc for more details. message PlayAnimationResponse { + // A generic status. ResponseStatus status = 1; + // Information on whether the animation played successfully. BehaviorResults result = 2; } +// See ListAnimations rpc for more details. message ListAnimationsRequest {} +// See ListAnimations rpc for more details. message ListAnimationsResponse { + // A generic status. ResponseStatus status = 1; + // The animations that Vector knows. repeated Animation animation_names = 2; } +// See DisplayFaceImageRGB rpc for more details. message DisplayFaceImageRGBRequest { + // The image to render. bytes face_data = 1; + // How long to display the image on the face. uint32 duration_ms = 2; + // If this image should overwrite any current images on the face. bool interrupt_running = 3; } +// See DisplayFaceImageRGB rpc for more details. message DisplayFaceImageRGBResponse { + // A generic status. ResponseStatus status = 1; } @@ -129,14 +159,16 @@ message PoseStruct { uint32 origin_id = 8; // Which coordinate frame this pose is in (0 for none or unknown) } +// All values are in mm/s^2. message AccelData { - float x = 1; // mm/s^2 + float x = 1; float y = 2; float z = 3; } +// All values are in rad/s. message GyroData { - float x = 1; // rad/s + float x = 1; float y = 2; float z = 3; } @@ -255,11 +287,6 @@ message RobotChangedObservedFaceID { int32 new_id = 2; } -message AppIntentRequest { - string intent = 1; - string param = 2; -} - enum FaceEnrollmentResult { SUCCESS = 0; @@ -276,12 +303,6 @@ enum FaceEnrollmentResult UNKNOWN_FAILURE = 9; } -message AppDisconnected{} - -message AppIntentResponse { - ResponseStatus status = 1; -} - message FaceEnrollmentCompleted { FaceEnrollmentResult result = 1; int32 face_id = 2; @@ -463,8 +484,9 @@ message PathMotionProfile { bool is_custom = 11; } -// These codes are duplicated from actionResults.clad file and need to be kept in sync -message ActionResult { +// The possible results of running an action. + message ActionResult { + // The possible results of running an action. enum ActionResultCode { ACTION_RESULT_SUCCESS = 0; ACTION_RESULT_RUNNING = 16777216; diff --git a/anki_vector/messaging/messages_pb2.py b/anki_vector/messaging/messages_pb2.py index 7133b77..a0a3bf1 100644 --- a/anki_vector/messaging/messages_pb2.py +++ b/anki_vector/messaging/messages_pb2.py @@ -22,7 +22,7 @@ name='anki_vector/messaging/messages.proto', package='Anki.Vector.external_interface', syntax='proto3', - serialized_pb=_b('\n$anki_vector/messaging/messages.proto\x12\x1e\x41nki.Vector.external_interface\x1a+anki_vector/messaging/response_status.proto\x1a&anki_vector/messaging/extensions.proto\"\x0f\n\rKeepAlivePing\"\x19\n\tAnimation\x12\x0c\n\x04name\x18\x01 \x01(\t\"|\n\x12\x44riveWheelsRequest\x12\x17\n\x0fleft_wheel_mmps\x18\x01 \x01(\x02\x12\x18\n\x10right_wheel_mmps\x18\x02 \x01(\x02\x12\x18\n\x10left_wheel_mmps2\x18\x03 \x01(\x02\x12\x19\n\x11right_wheel_mmps2\x18\x04 \x01(\x02\"U\n\x13\x44riveWheelsResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\",\n\x0fMoveHeadRequest\x12\x19\n\x11speed_rad_per_sec\x18\x01 \x01(\x02\"R\n\x10MoveHeadResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\",\n\x0fMoveLiftRequest\x12\x19\n\x11speed_rad_per_sec\x18\x01 \x01(\x02\"R\n\x10MoveLiftResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\xb4\x01\n\x14PlayAnimationRequest\x12<\n\tanimation\x18\x01 \x01(\x0b\x32).Anki.Vector.external_interface.Animation\x12\r\n\x05loops\x18\x02 \x01(\r\x12\x19\n\x11ignore_body_track\x18\x03 \x01(\x08\x12\x19\n\x11ignore_head_track\x18\x04 \x01(\x08\x12\x19\n\x11ignore_lift_track\x18\x05 \x01(\x08\"\x98\x01\n\x15PlayAnimationResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12?\n\x06result\x18\x02 \x01(\x0e\x32/.Anki.Vector.external_interface.BehaviorResults\"\x17\n\x15ListAnimationsRequest\"\x9c\x01\n\x16ListAnimationsResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12\x42\n\x0f\x61nimation_names\x18\x02 \x03(\x0b\x32).Anki.Vector.external_interface.Animation\"_\n\x1a\x44isplayFaceImageRGBRequest\x12\x11\n\tface_data\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64uration_ms\x18\x02 \x01(\r\x12\x19\n\x11interrupt_running\x18\x03 \x01(\x08\"]\n\x1b\x44isplayFaceImageRGBResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\x1b\n\x19MeetVictorFaceScanStarted\"\x1c\n\x1aMeetVictorFaceScanComplete\"\xbf\x02\n\x06Status\x12\x62\n\x1dmeet_victor_face_scan_started\x18\x02 \x01(\x0b\x32\x39.Anki.Vector.external_interface.MeetVictorFaceScanStartedH\x00\x12\x64\n\x1emeet_victor_face_scan_complete\x18\x03 \x01(\x0b\x32:.Anki.Vector.external_interface.MeetVictorFaceScanCompleteH\x00\x12\\\n\x19\x66\x61\x63\x65_enrollment_completed\x18\x04 \x01(\x0b\x32\x37.Anki.Vector.external_interface.FaceEnrollmentCompletedH\x00\x42\r\n\x0bstatus_type\"\xac\x01\n\x08WakeWord\x12H\n\x0fwake_word_begin\x18\x01 \x01(\x0b\x32-.Anki.Vector.external_interface.WakeWordBeginH\x00\x12\x44\n\rwake_word_end\x18\x02 \x01(\x0b\x32+.Anki.Vector.external_interface.WakeWordEndH\x00\x42\x10\n\x0ewake_word_type\"b\n\x11TimeStampedStatus\x12\x36\n\x06status\x18\x01 \x01(\x0b\x32&.Anki.Vector.external_interface.Status\x12\x15\n\rtimestamp_utc\x18\x02 \x01(\r\"p\n\nPoseStruct\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02\x12\n\n\x02q0\x18\x04 \x01(\x02\x12\n\n\x02q1\x18\x05 \x01(\x02\x12\n\n\x02q2\x18\x06 \x01(\x02\x12\n\n\x02q3\x18\x07 \x01(\x02\x12\x11\n\torigin_id\x18\x08 \x01(\r\",\n\tAccelData\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02\"+\n\x08GyroData\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02\"\xa3\x01\n\x08ProxData\x12\x13\n\x0b\x64istance_mm\x18\x01 \x01(\r\x12\x16\n\x0esignal_quality\x18\x02 \x01(\x02\x12\x19\n\x11is_in_valid_range\x18\x03 \x01(\x08\x12\x1f\n\x17is_valid_signal_quality\x18\x04 \x01(\x08\x12\x16\n\x0eis_lift_in_fov\x18\x05 \x01(\x08\x12\x16\n\x0eis_too_pitched\x18\x06 \x01(\x08\">\n\tTouchData\x12\x17\n\x0fraw_touch_value\x18\x01 \x01(\r\x12\x18\n\x10is_being_touched\x18\x02 \x01(\x08\"\x82\x05\n\nRobotState\x12\x38\n\x04pose\x18\x01 \x01(\x0b\x32*.Anki.Vector.external_interface.PoseStruct\x12\x16\n\x0epose_angle_rad\x18\x02 \x01(\x02\x12\x16\n\x0epose_pitch_rad\x18\x03 \x01(\x02\x12\x1d\n\x15left_wheel_speed_mmps\x18\x04 \x01(\x02\x12\x1e\n\x16right_wheel_speed_mmps\x18\x05 \x01(\x02\x12\x16\n\x0ehead_angle_rad\x18\x06 \x01(\x02\x12\x16\n\x0elift_height_mm\x18\x07 \x01(\x02\x12\x38\n\x05\x61\x63\x63\x65l\x18\x08 \x01(\x0b\x32).Anki.Vector.external_interface.AccelData\x12\x36\n\x04gyro\x18\t \x01(\x0b\x32(.Anki.Vector.external_interface.GyroData\x12\x1a\n\x12\x63\x61rrying_object_id\x18\n \x01(\x05\x12!\n\x19\x63\x61rrying_object_on_top_id\x18\x0b \x01(\x05\x12\x1f\n\x17head_tracking_object_id\x18\x0c \x01(\x05\x12\x1e\n\x16localized_to_object_id\x18\r \x01(\x05\x12\x1d\n\x15last_image_time_stamp\x18\x0e \x01(\r\x12\x0e\n\x06status\x18\x0f \x01(\r\x12;\n\tprox_data\x18\x10 \x01(\x0b\x32(.Anki.Vector.external_interface.ProxData\x12=\n\ntouch_data\x18\x11 \x01(\x0b\x32).Anki.Vector.external_interface.TouchData\"!\n\tCladPoint\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\"Q\n\x08\x43ladRect\x12\x12\n\nx_top_left\x18\x01 \x01(\x02\x12\x12\n\ny_top_left\x18\x02 \x01(\x02\x12\r\n\x05width\x18\x03 \x01(\x02\x12\x0e\n\x06height\x18\x04 \x01(\x02\"\x8a\x04\n\x11RobotObservedFace\x12\x0f\n\x07\x66\x61\x63\x65_id\x18\x01 \x01(\x05\x12\x11\n\ttimestamp\x18\x02 \x01(\r\x12\x38\n\x04pose\x18\x03 \x01(\x0b\x32*.Anki.Vector.external_interface.PoseStruct\x12:\n\x08img_rect\x18\x04 \x01(\x0b\x32(.Anki.Vector.external_interface.CladRect\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x44\n\nexpression\x18\x06 \x01(\x0e\x32\x30.Anki.Vector.external_interface.FacialExpression\x12\x19\n\x11\x65xpression_values\x18\x07 \x03(\r\x12;\n\x08left_eye\x18\x08 \x03(\x0b\x32).Anki.Vector.external_interface.CladPoint\x12<\n\tright_eye\x18\t \x03(\x0b\x32).Anki.Vector.external_interface.CladPoint\x12\x37\n\x04nose\x18\n \x03(\x0b\x32).Anki.Vector.external_interface.CladPoint\x12\x38\n\x05mouth\x18\x0b \x03(\x0b\x32).Anki.Vector.external_interface.CladPoint\"<\n\x1aRobotChangedObservedFaceID\x12\x0e\n\x06old_id\x18\x01 \x01(\x05\x12\x0e\n\x06new_id\x18\x02 \x01(\x05\"1\n\x10\x41ppIntentRequest\x12\x0e\n\x06intent\x18\x01 \x01(\t\x12\r\n\x05param\x18\x02 \x01(\t\"\x11\n\x0f\x41ppDisconnected\"S\n\x11\x41ppIntentResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"~\n\x17\x46\x61\x63\x65\x45nrollmentCompleted\x12\x44\n\x06result\x18\x01 \x01(\x0e\x32\x34.Anki.Vector.external_interface.FaceEnrollmentResult\x12\x0f\n\x07\x66\x61\x63\x65_id\x18\x02 \x01(\x05\x12\x0c\n\x04name\x18\x03 \x01(\t\"\x1d\n\x1b\x43\x61ncelFaceEnrollmentRequest\"^\n\x1c\x43\x61ncelFaceEnrollmentResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\x1d\n\x1bRequestEnrolledNamesRequest\"\xc2\x01\n\x0fLoadedKnownFace\x12$\n\x1cseconds_since_first_enrolled\x18\x01 \x01(\x03\x12\"\n\x1aseconds_since_last_updated\x18\x02 \x01(\x03\x12\x1f\n\x17seconds_since_last_seen\x18\x03 \x01(\x03\x12%\n\x1dlast_seen_seconds_since_epoch\x18\x04 \x01(\x03\x12\x0f\n\x07\x66\x61\x63\x65_id\x18\x05 \x01(\x05\x12\x0c\n\x04name\x18\x06 \x01(\t\"9\n\x18RobotRenamedEnrolledFace\x12\x0f\n\x07\x66\x61\x63\x65_id\x18\x01 \x01(\x05\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x9e\x01\n\x1cRequestEnrolledNamesResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12>\n\x05\x66\x61\x63\x65s\x18\x02 \x03(\x0b\x32/.Anki.Vector.external_interface.LoadedKnownFace\"T\n\x1dUpdateEnrolledFaceByIDRequest\x12\x0f\n\x07\x66\x61\x63\x65_id\x18\x01 \x01(\x05\x12\x10\n\x08old_name\x18\x02 \x01(\t\x12\x10\n\x08new_name\x18\x03 \x01(\t\"`\n\x1eUpdateEnrolledFaceByIDResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"/\n\x1c\x45raseEnrolledFaceByIDRequest\x12\x0f\n\x07\x66\x61\x63\x65_id\x18\x01 \x01(\x05\"_\n\x1d\x45raseEnrolledFaceByIDResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\x1e\n\x1c\x45raseAllEnrolledFacesRequest\"_\n\x1d\x45raseAllEnrolledFacesResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\x88\x01\n\x16SetFaceToEnrollRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0bobserved_id\x18\x02 \x01(\x05\x12\x0f\n\x07save_id\x18\x03 \x01(\x05\x12\x15\n\rsave_to_robot\x18\x04 \x01(\x08\x12\x10\n\x08say_name\x18\x05 \x01(\x08\x12\x11\n\tuse_music\x18\x06 \x01(\x08\"Y\n\x17SetFaceToEnrollResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\x18\n\x16\x44riveOffChargerRequest\"\x9a\x01\n\x17\x44riveOffChargerResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12?\n\x06result\x18\x02 \x01(\x0e\x32/.Anki.Vector.external_interface.BehaviorResults\"\x17\n\x15\x44riveOnChargerRequest\"\x99\x01\n\x16\x44riveOnChargerResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12?\n\x06result\x18\x02 \x01(\x0e\x32/.Anki.Vector.external_interface.BehaviorResults\"\x0f\n\rWakeWordBegin\"8\n\x0bWakeWordEnd\x12\x14\n\x0cintent_heard\x18\x01 \x01(\x08\x12\x13\n\x0bintent_json\x18\x02 \x01(\t\"n\n\tPhotoInfo\x12\x10\n\x08photo_id\x18\x01 \x01(\r\x12\x15\n\rtimestamp_utc\x18\x02 \x01(\r\x12\x1b\n\x13photo_copied_to_app\x18\x03 \x01(\x08\x12\x1b\n\x13thumb_copied_to_app\x18\x04 \x01(\x08\"\x13\n\x11PhotosInfoRequest\"\x94\x01\n\x12PhotosInfoResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12>\n\x0bphoto_infos\x18\x02 \x03(\x0b\x32).Anki.Vector.external_interface.PhotoInfo\" \n\x0cPhotoRequest\x12\x10\n\x08photo_id\x18\x01 \x01(\r\"6\n\x10PhotoPathMessage\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x11\n\tfull_path\x18\x02 \x01(\t\"o\n\rPhotoResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12\x0f\n\x07success\x18\x02 \x01(\x08\x12\r\n\x05image\x18\x03 \x01(\x0c\"$\n\x10ThumbnailRequest\x12\x10\n\x08photo_id\x18\x01 \x01(\r\":\n\x14ThumbnailPathMessage\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x11\n\tfull_path\x18\x02 \x01(\t\"s\n\x11ThumbnailResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12\x0f\n\x07success\x18\x02 \x01(\x08\x12\r\n\x05image\x18\x03 \x01(\x0c\"&\n\x12\x44\x65letePhotoRequest\x12\x10\n\x08photo_id\x18\x01 \x01(\r\"f\n\x13\x44\x65letePhotoResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12\x0f\n\x07success\x18\x02 \x01(\x08\"\x1e\n\nPhotoTaken\x12\x10\n\x08photo_id\x18\x01 \x01(\r\"\xc1\x02\n\x11PathMotionProfile\x12\x12\n\nspeed_mmps\x18\x01 \x01(\x02\x12\x13\n\x0b\x61\x63\x63\x65l_mmps2\x18\x02 \x01(\x02\x12\x13\n\x0b\x64\x65\x63\x65l_mmps2\x18\x03 \x01(\x02\x12$\n\x1cpoint_turn_speed_rad_per_sec\x18\x04 \x01(\x02\x12%\n\x1dpoint_turn_accel_rad_per_sec2\x18\x05 \x01(\x02\x12%\n\x1dpoint_turn_decel_rad_per_sec2\x18\x06 \x01(\x02\x12\x17\n\x0f\x64ock_speed_mmps\x18\x07 \x01(\x02\x12\x18\n\x10\x64ock_accel_mmps2\x18\x08 \x01(\x02\x12\x18\n\x10\x64ock_decel_mmps2\x18\t \x01(\x02\x12\x1a\n\x12reverse_speed_mmps\x18\n \x01(\x02\x12\x11\n\tis_custom\x18\x0b \x01(\x08\"\xf8\x0c\n\x0c\x41\x63tionResult\x12K\n\x04\x63ode\x18\x01 \x01(\x0e\x32=.Anki.Vector.external_interface.ActionResult.ActionResultCode\"\x9a\x0c\n\x10\x41\x63tionResultCode\x12\x19\n\x15\x41\x43TION_RESULT_SUCCESS\x10\x00\x12\x1c\n\x15\x41\x43TION_RESULT_RUNNING\x10\x80\x80\x80\x08\x12,\n%ACTION_RESULT_CANCELLED_WHILE_RUNNING\x10\x80\x80\x80\x10\x12\x12\n\x0bNOT_STARTED\x10\x81\x80\x80\x10\x12\x0c\n\x05\x41\x42ORT\x10\x80\x80\x80\x18\x12\x13\n\x0c\x41NIM_ABORTED\x10\x81\x80\x80\x18\x12\x11\n\nBAD_MARKER\x10\x82\x80\x80\x18\x12\x16\n\x0f\x42\x41\x44_MESSAGE_TAG\x10\x83\x80\x80\x18\x12\x11\n\nBAD_OBJECT\x10\x84\x80\x80\x18\x12\x0f\n\x08\x42\x41\x44_POSE\x10\x85\x80\x80\x18\x12\x0e\n\x07\x42\x41\x44_TAG\x10\x86\x80\x80\x18\x12\x1e\n\x17\x43HARGER_UNPLUGGED_ABORT\x10\x87\x80\x80\x18\x12!\n\x1a\x43LIFF_ALIGN_FAILED_TIMEOUT\x10\x88\x80\x80\x18\x12$\n\x1d\x43LIFF_ALIGN_FAILED_NO_TURNING\x10\x89\x80\x80\x18\x12&\n\x1f\x43LIFF_ALIGN_FAILED_OVER_TURNING\x10\x8a\x80\x80\x18\x12\"\n\x1b\x43LIFF_ALIGN_FAILED_NO_WHITE\x10\x8b\x80\x80\x18\x12!\n\x1a\x43LIFF_ALIGN_FAILED_STOPPED\x10\x8c\x80\x80\x18\x12!\n\x1a\x46\x41ILED_SETTING_CALIBRATION\x10\x8d\x80\x80\x18\x12(\n!FOLLOWING_PATH_BUT_NOT_TRAVERSING\x10\x8e\x80\x80\x18\x12\x12\n\x0bINTERRUPTED\x10\x8f\x80\x80\x18\x12\x1f\n\x18INVALID_OFF_TREADS_STATE\x10\x90\x80\x80\x18\x12\x19\n\x12MISMATCHED_UP_AXIS\x10\x91\x80\x80\x18\x12\x13\n\x0cNO_ANIM_NAME\x10\x92\x80\x80\x18\x12\x16\n\x0fNO_DISTANCE_SET\x10\x93\x80\x80\x18\x12\x0e\n\x07NO_FACE\x10\x94\x80\x80\x18\x12\x12\n\x0bNO_GOAL_SET\x10\x95\x80\x80\x18\x12\x19\n\x12NO_PREACTION_POSES\x10\x96\x80\x80\x18\x12 \n\x19NOT_CARRYING_OBJECT_ABORT\x10\x97\x80\x80\x18\x12\x1b\n\x14NOT_ON_CHARGER_ABORT\x10\x98\x80\x80\x18\x12\x15\n\x0eNULL_SUBACTION\x10\x99\x80\x80\x18\x12!\n\x1aPATH_PLANNING_FAILED_ABORT\x10\x9a\x80\x80\x18\x12(\n!PICKUP_OBJECT_UNEXPECTEDLY_MOVING\x10\x9b\x80\x80\x18\x12#\n\x1cSEND_MESSAGE_TO_ROBOT_FAILED\x10\x9c\x80\x80\x18\x12\x1c\n\x15STILL_CARRYING_OBJECT\x10\x9d\x80\x80\x18\x12\x0e\n\x07TIMEOUT\x10\x9e\x80\x80\x18\x12\x14\n\rTRACKS_LOCKED\x10\x9f\x80\x80\x18\x12\x1d\n\x16UNEXPECTED_DOCK_ACTION\x10\xa0\x80\x80\x18\x12\x18\n\x11UNKNOWN_TOOL_CODE\x10\xa1\x80\x80\x18\x12\x1c\n\x15UPDATE_DERIVED_FAILED\x10\xa2\x80\x80\x18\x12 \n\x19VISUAL_OBSERVATION_FAILED\x10\xa3\x80\x80\x18\x12 \n\x19SHOULDNT_DRIVE_ON_CHARGER\x10\xa4\x80\x80\x18\x12\x0c\n\x05RETRY\x10\x80\x80\x80 \x12#\n\x1c\x44ID_NOT_REACH_PREACTION_POSE\x10\x81\x80\x80 \x12\x1d\n\x16\x46\x41ILED_TRAVERSING_PATH\x10\x82\x80\x80 \x12!\n\x1aLAST_PICK_AND_PLACE_FAILED\x10\x83\x80\x80 \x12$\n\x1dMOTOR_STOPPED_MAKING_PROGRESS\x10\x84\x80\x80 \x12 \n\x19NOT_CARRYING_OBJECT_RETRY\x10\x85\x80\x80 \x12\x1b\n\x14NOT_ON_CHARGER_RETRY\x10\x86\x80\x80 \x12!\n\x1aPATH_PLANNING_FAILED_RETRY\x10\x87\x80\x80 \x12\x1e\n\x17PLACEMENT_GOAL_NOT_FREE\x10\x88\x80\x80 \x12,\n%PICKUP_OBJECT_UNEXPECTEDLY_NOT_MOVING\x10\x89\x80\x80 \x12\x17\n\x10STILL_ON_CHARGER\x10\x8a\x80\x80 \x12\x1d\n\x16UNEXPECTED_PITCH_ANGLE\x10\x8b\x80\x80 \"\xa7\x01\n\x0fGoToPoseRequest\x12\x0c\n\x04x_mm\x18\x01 \x01(\x02\x12\x0c\n\x04y_mm\x18\x02 \x01(\x02\x12\x0b\n\x03rad\x18\x03 \x01(\x02\x12\x46\n\x0bmotion_prof\x18\x04 \x01(\x0b\x32\x31.Anki.Vector.external_interface.PathMotionProfile\x12\x0e\n\x06id_tag\x18\x05 \x01(\x05\x12\x13\n\x0bnum_retries\x18\x06 \x01(\x05\"\x90\x01\n\x10GoToPoseResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12<\n\x06result\x18\x02 \x01(\x0b\x32,.Anki.Vector.external_interface.ActionResult\"\xd0\x02\n\x13\x44ockWithCubeRequest\x12\x11\n\tobject_id\x18\x01 \x01(\x05\x12\x1f\n\x17\x64istance_from_marker_mm\x18\x02 \x01(\x02\x12\x1a\n\x12\x61pproach_angle_rad\x18\x03 \x01(\x02\x12\x45\n\x0e\x61lignment_type\x18\x04 \x01(\x0e\x32-.Anki.Vector.external_interface.AlignmentType\x12\x1a\n\x12use_approach_angle\x18\x05 \x01(\x08\x12\x19\n\x11use_pre_dock_pose\x18\x06 \x01(\x08\x12\x46\n\x0bmotion_prof\x18\x07 \x01(\x0b\x32\x31.Anki.Vector.external_interface.PathMotionProfile\x12\x0e\n\x06id_tag\x18\x08 \x01(\x05\x12\x13\n\x0bnum_retries\x18\t \x01(\x05\"\x94\x01\n\x14\x44ockWithCubeResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12<\n\x06result\x18\x02 \x01(\x0b\x32,.Anki.Vector.external_interface.ActionResult\"\x7f\n\x14\x44riveStraightRequest\x12\x12\n\nspeed_mmps\x18\x01 \x01(\x02\x12\x0f\n\x07\x64ist_mm\x18\x02 \x01(\x02\x12\x1d\n\x15should_play_animation\x18\x03 \x01(\x08\x12\x0e\n\x06id_tag\x18\x04 \x01(\x05\x12\x13\n\x0bnum_retries\x18\x05 \x01(\x05\"\x95\x01\n\x15\x44riveStraightResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12<\n\x06result\x18\x02 \x01(\x0b\x32,.Anki.Vector.external_interface.ActionResult\"\xa9\x01\n\x12TurnInPlaceRequest\x12\x11\n\tangle_rad\x18\x01 \x01(\x02\x12\x19\n\x11speed_rad_per_sec\x18\x02 \x01(\x02\x12\x1a\n\x12\x61\x63\x63\x65l_rad_per_sec2\x18\x03 \x01(\x02\x12\x0f\n\x07tol_rad\x18\x04 \x01(\x02\x12\x13\n\x0bis_absolute\x18\x05 \x01(\r\x12\x0e\n\x06id_tag\x18\x06 \x01(\x05\x12\x13\n\x0bnum_retries\x18\x07 \x01(\x05\"\x93\x01\n\x13TurnInPlaceResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12<\n\x06result\x18\x02 \x01(\x0b\x32,.Anki.Vector.external_interface.ActionResult\"\x9e\x01\n\x13SetHeadAngleRequest\x12\x11\n\tangle_rad\x18\x01 \x01(\x02\x12\x1d\n\x15max_speed_rad_per_sec\x18\x02 \x01(\x02\x12\x1a\n\x12\x61\x63\x63\x65l_rad_per_sec2\x18\x03 \x01(\x02\x12\x14\n\x0c\x64uration_sec\x18\x04 \x01(\x02\x12\x0e\n\x06id_tag\x18\x05 \x01(\x05\x12\x13\n\x0bnum_retries\x18\x06 \x01(\x05\"\x94\x01\n\x14SetHeadAngleResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12<\n\x06result\x18\x02 \x01(\x0b\x32,.Anki.Vector.external_interface.ActionResult\"\x9f\x01\n\x14SetLiftHeightRequest\x12\x11\n\theight_mm\x18\x01 \x01(\x02\x12\x1d\n\x15max_speed_rad_per_sec\x18\x02 \x01(\x02\x12\x1a\n\x12\x61\x63\x63\x65l_rad_per_sec2\x18\x03 \x01(\x02\x12\x14\n\x0c\x64uration_sec\x18\x04 \x01(\x02\x12\x0e\n\x06id_tag\x18\x05 \x01(\x05\x12\x13\n\x0bnum_retries\x18\x06 \x01(\x05\"\x95\x01\n\x15SetLiftHeightResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12<\n\x06result\x18\x02 \x01(\x0b\x32,.Anki.Vector.external_interface.ActionResult\"\xb9\x03\n\x0cNetworkStats\x12#\n\x1bg_net_stat1_num_connections\x18\x01 \x01(\x05\x12\x1f\n\x17g_net_stat2_latency_avg\x18\x02 \x01(\x02\x12\x1e\n\x16g_net_stat3_latency_sd\x18\x03 \x01(\x02\x12\x1f\n\x17g_net_stat4_latency_min\x18\x04 \x01(\x02\x12\x1f\n\x17g_net_stat5_latency_max\x18\x05 \x01(\x02\x12#\n\x1bg_net_stat6_ping_arrived_pc\x18\x06 \x01(\x02\x12%\n\x1dg_net_stat7_ext_queued_avg_ms\x18\x07 \x01(\x02\x12%\n\x1dg_net_stat8_ext_queued_min_ms\x18\x08 \x01(\x02\x12%\n\x1dg_net_stat9_ext_queued_max_ms\x18\t \x01(\x02\x12!\n\x19g_net_stata_queued_avg_ms\x18\n \x01(\x02\x12!\n\x19g_net_statb_queued_min_ms\x18\x0b \x01(\x02\x12!\n\x19g_net_statc_queued_max_ms\x18\x0c \x01(\x02\"\x15\n\x13\x42\x61tteryStateRequest\"\xc9\x02\n\x14\x42\x61tteryStateResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12\x43\n\rbattery_level\x18\x02 \x01(\x0e\x32,.Anki.Vector.external_interface.BatteryLevel\x12\x15\n\rbattery_volts\x18\x03 \x01(\x02\x12\x13\n\x0bis_charging\x18\x04 \x01(\x08\x12\x1e\n\x16is_on_charger_platform\x18\x05 \x01(\x08\x12\x1d\n\x15suggested_charger_sec\x18\x06 \x01(\x02\x12\x41\n\x0c\x63ube_battery\x18\x07 \x01(\x0b\x32+.Anki.Vector.external_interface.CubeBattery\"\xd3\x01\n\x0b\x43ubeBattery\x12K\n\x05level\x18\x01 \x01(\x0e\x32<.Anki.Vector.external_interface.CubeBattery.CubeBatteryLevel\x12\x12\n\nfactory_id\x18\x02 \x01(\t\x12\x15\n\rbattery_volts\x18\x03 \x01(\x02\x12#\n\x1btime_since_last_reading_sec\x18\x04 \x01(\x02\"\'\n\x10\x43ubeBatteryLevel\x12\x07\n\x03Low\x10\x00\x12\n\n\x06Normal\x10\x01\"\x15\n\x13VersionStateRequest\"\x83\x01\n\x14VersionStateResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12\x12\n\nos_version\x18\x02 \x01(\t\x12\x17\n\x0f\x65ngine_build_id\x18\x03 \x01(\t\"\x15\n\x13NetworkStateRequest\"\x9b\x01\n\x14NetworkStateResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12\x43\n\rnetwork_stats\x18\x02 \x01(\x0b\x32,.Anki.Vector.external_interface.NetworkStats\"Q\n\x0eSayTextRequest\x12\x0c\n\x04text\x18\x01 \x01(\t\x12\x18\n\x10use_vector_voice\x18\x02 \x01(\x08\x12\x17\n\x0f\x64uration_scalar\x18\x03 \x01(\x02\"\xf5\x01\n\x0fSayTextResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12M\n\x05state\x18\x02 \x01(\x0e\x32>.Anki.Vector.external_interface.SayTextResponse.UtteranceState\"S\n\x0eUtteranceState\x12\x0b\n\x07INVALID\x10\x00\x12\x0e\n\nGENERATING\x10\x01\x12\t\n\x05READY\x10\x02\x12\x0b\n\x07PLAYING\x10\x03\x12\x0c\n\x08\x46INISHED\x10\x04\"\x9b\x01\n\x0fStimulationInfo\x12\x16\n\x0e\x65motion_events\x18\x01 \x03(\t\x12\r\n\x05value\x18\x02 \x01(\x02\x12\x10\n\x08velocity\x18\x03 \x01(\x02\x12\r\n\x05\x61\x63\x63\x65l\x18\x04 \x01(\x02\x12\x1a\n\x12value_before_event\x18\x05 \x01(\x02\x12\x11\n\tmin_value\x18\x06 \x01(\x02\x12\x11\n\tmax_value\x18\x07 \x01(\x02\"Y\n\x14\x41udioSendModeRequest\x12\x41\n\x04mode\x18\x01 \x01(\x0e\x32\x33.Anki.Vector.external_interface.AudioProcessingMode\"Y\n\x14\x41udioSendModeChanged\x12\x41\n\x04mode\x18\x01 \x01(\x0e\x32\x33.Anki.Vector.external_interface.AudioProcessingMode\"\xe8\x01\n\nAudioChunk\x12\x18\n\x10robot_time_stamp\x18\x01 \x01(\r\x12\x10\n\x08group_id\x18\x02 \x01(\r\x12\x10\n\x08\x63hunk_id\x18\x03 \x01(\r\x12\x19\n\x11\x61udio_chunk_count\x18\x04 \x01(\r\x12\x14\n\x0csignal_power\x18\x05 \x01(\x0c\x12\x1b\n\x13\x64irection_strengths\x18\x06 \x01(\x0c\x12\x18\n\x10source_direction\x18\x07 \x01(\r\x12\x19\n\x11source_confidence\x18\x08 \x01(\r\x12\x19\n\x11noise_floor_power\x18\t \x01(\r\"\x12\n\x10\x41udioFeedRequest\"\xc8\x01\n\x11\x41udioFeedResponse\x12\x18\n\x10robot_time_stamp\x18\x01 \x01(\r\x12\x10\n\x08group_id\x18\x02 \x01(\r\x12\x14\n\x0csignal_power\x18\x03 \x01(\x0c\x12\x1b\n\x13\x64irection_strengths\x18\x04 \x01(\x0c\x12\x18\n\x10source_direction\x18\x05 \x01(\r\x12\x19\n\x11source_confidence\x18\x06 \x01(\r\x12\x19\n\x11noise_floor_power\x18\x07 \x01(\r:\x04\x80\xa6\x1d\x01\".\n\x1c\x45nableMarkerDetectionRequest\x12\x0e\n\x06\x65nable\x18\x01 \x01(\x08\"_\n\x1d\x45nableMarkerDetectionResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\xb1\x01\n\x1a\x45nableFaceDetectionRequest\x12\x0e\n\x06\x65nable\x18\x01 \x01(\x08\x12\x1e\n\x16\x65nable_smile_detection\x18\x02 \x01(\x08\x12$\n\x1c\x65nable_expression_estimation\x18\x03 \x01(\x08\x12\x1e\n\x16\x65nable_blink_detection\x18\x04 \x01(\x08\x12\x1d\n\x15\x65nable_gaze_detection\x18\x05 \x01(\x08\"]\n\x1b\x45nableFaceDetectionResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\".\n\x1c\x45nableMotionDetectionRequest\x12\x0e\n\x06\x65nable\x18\x01 \x01(\x08\"_\n\x1d\x45nableMotionDetectionResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\")\n\x17\x45nableMirrorModeRequest\x12\x0e\n\x06\x65nable\x18\x01 \x01(\x08\"Z\n\x18\x45nableMirrorModeResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\x14\n\x12MirrorModeDisabled\"-\n\x1b\x45nableImageStreamingRequest\x12\x0e\n\x06\x65nable\x18\x01 \x01(\x08\"^\n\x1c\x45nableImageStreamingResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\x19\n\x17VisionModesAutoDisabled\"\xd1\x03\n\nImageChunk\x12\x18\n\x10\x66rame_time_stamp\x18\x01 \x01(\r\x12\x10\n\x08image_id\x18\x02 \x01(\r\x12\r\n\x05width\x18\x03 \x01(\r\x12\x0e\n\x06height\x18\x04 \x01(\r\x12P\n\x0eimage_encoding\x18\x05 \x01(\x0e\x32\x38.Anki.Vector.external_interface.ImageChunk.ImageEncoding\x12\x15\n\rdisplay_index\x18\x06 \x01(\r\x12\x19\n\x11image_chunk_count\x18\x07 \x01(\r\x12\x10\n\x08\x63hunk_id\x18\x08 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\t \x01(\x0c\"\xd3\x01\n\rImageEncoding\x12\x17\n\x13NONE_IMAGE_ENCODING\x10\x00\x12\x0c\n\x08RAW_GRAY\x10\x01\x12\x0b\n\x07RAW_RGB\x10\x02\x12\x08\n\x04YUYV\x10\x03\x12\x0c\n\x08YUV420SP\x10\x04\x12\t\n\x05\x42\x41YER\x10\x05\x12\r\n\tJPEG_GRAY\x10\x06\x12\x0e\n\nJPEG_COLOR\x10\x07\x12\x19\n\x15JPEG_COLOR_HALF_WIDTH\x10\x08\x12\x17\n\x13JPEG_MINIMIZED_GRAY\x10\t\x12\x18\n\x14JPEG_MINIMIZED_COLOR\x10\n\"\x13\n\x11\x43\x61meraFeedRequest\"\xa6\x01\n\x12\x43\x61meraFeedResponse\x12\x18\n\x10\x66rame_time_stamp\x18\x01 \x01(\r\x12\x10\n\x08image_id\x18\x02 \x01(\r\x12P\n\x0eimage_encoding\x18\x03 \x01(\x0e\x32\x38.Anki.Vector.external_interface.ImageChunk.ImageEncoding\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c:\x04\x80\xa6\x1d\x01\"5\n\x12SetEyeColorRequest\x12\x0b\n\x03hue\x18\x01 \x01(\x02\x12\x12\n\nsaturation\x18\x02 \x01(\x02\"U\n\x13SetEyeColorResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\x96\x01\n\x18SDKInitializationRequest\x12\x1a\n\x12sdk_module_version\x18\x01 \x01(\t\x12\x16\n\x0epython_version\x18\x02 \x01(\t\x12\x1d\n\x15python_implementation\x18\x03 \x01(\t\x12\x12\n\nos_version\x18\x04 \x01(\t\x12\x13\n\x0b\x63pu_version\x18\x05 \x01(\t\"[\n\x19SDKInitializationResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus*\xdc\x04\n\x0bRobotStatus\x12\x15\n\x11ROBOT_STATUS_NONE\x10\x00\x12\x1a\n\x16ROBOT_STATUS_IS_MOVING\x10\x01\x12\"\n\x1eROBOT_STATUS_IS_CARRYING_BLOCK\x10\x02\x12&\n\"ROBOT_STATUS_IS_PICKING_OR_PLACING\x10\x04\x12\x1d\n\x19ROBOT_STATUS_IS_PICKED_UP\x10\x08\x12\"\n\x1eROBOT_STATUS_IS_BUTTON_PRESSED\x10\x10\x12\x1b\n\x17ROBOT_STATUS_IS_FALLING\x10 \x12\x1d\n\x19ROBOT_STATUS_IS_ANIMATING\x10@\x12\x1c\n\x17ROBOT_STATUS_IS_PATHING\x10\x80\x01\x12\x1d\n\x18ROBOT_STATUS_LIFT_IN_POS\x10\x80\x02\x12\x1d\n\x18ROBOT_STATUS_HEAD_IN_POS\x10\x80\x04\x12!\n\x1cROBOT_STATUS_CALM_POWER_MODE\x10\x80\x08\x12\x1f\n\x1aROBOT_STATUS_IS_ON_CHARGER\x10\x80 \x12\x1d\n\x18ROBOT_STATUS_IS_CHARGING\x10\x80@\x12!\n\x1bROBOT_STATUS_CLIFF_DETECTED\x10\x80\x80\x01\x12$\n\x1eROBOT_STATUS_ARE_WHEELS_MOVING\x10\x80\x80\x02\x12 \n\x1aROBOT_STATUS_IS_BEING_HELD\x10\x80\x80\x04\x12%\n\x1fROBOT_STATUS_IS_MOTION_DETECTED\x10\x80\x80\x08*\xbd\x01\n\x10\x46\x61\x63ialExpression\x12\x16\n\x12\x45XPRESSION_UNKNOWN\x10\x00\x12\x16\n\x12\x45XPRESSION_NEUTRAL\x10\x01\x12\x18\n\x14\x45XPRESSION_HAPPINESS\x10\x02\x12\x17\n\x13\x45XPRESSION_SURPRISE\x10\x03\x12\x14\n\x10\x45XPRESSION_ANGER\x10\x04\x12\x16\n\x12\x45XPRESSION_SADNESS\x10\x05\x12\x14\n\x10\x45XPRESSION_COUNT\x10\x05\x1a\x02\x10\x01*\xcc\x01\n\x14\x46\x61\x63\x65\x45nrollmentResult\x12\x0b\n\x07SUCCESS\x10\x00\x12\x12\n\x0eSAW_WRONG_FACE\x10\x01\x12\x16\n\x12SAW_MULTIPLE_FACES\x10\x02\x12\r\n\tTIMED_OUT\x10\x03\x12\x0f\n\x0bSAVE_FAILED\x10\x04\x12\x0e\n\nINCOMPLETE\x10\x05\x12\r\n\tCANCELLED\x10\x06\x12\x0f\n\x0bNAME_IN_USE\x10\x07\x12\x16\n\x12NAMED_STORAGE_FULL\x10\x08\x12\x13\n\x0fUNKNOWN_FAILURE\x10\t*l\n\x0f\x42\x65haviorResults\x12\x1a\n\x16\x42\x45HAVIOR_INVALID_STATE\x10\x00\x12\x1b\n\x17\x42\x45HAVIOR_COMPLETE_STATE\x10\x01\x12 \n\x1c\x42\x45HAVIOR_WONT_ACTIVATE_STATE\x10\x02*S\n\x12\x41\x63tionTagConstants\x12\x13\n\x0fINVALID_SDK_TAG\x10\x00\x12\x13\n\rFIRST_SDK_TAG\x10\x81\x89z\x12\x13\n\x0cLAST_SDK_TAG\x10\xc0\x8d\xb7\x01*\x9e\x01\n\rAlignmentType\x12\x1a\n\x16\x41LIGNMENT_TYPE_UNKNOWN\x10\x00\x12\x1e\n\x1a\x41LIGNMENT_TYPE_LIFT_FINGER\x10\x01\x12\x1d\n\x19\x41LIGNMENT_TYPE_LIFT_PLATE\x10\x02\x12\x17\n\x13\x41LIGNMENT_TYPE_BODY\x10\x03\x12\x19\n\x15\x41LIGNMENT_TYPE_CUSTOM\x10\x04*s\n\x0c\x42\x61tteryLevel\x12\x19\n\x15\x42\x41TTERY_LEVEL_UNKNOWN\x10\x00\x12\x15\n\x11\x42\x41TTERY_LEVEL_LOW\x10\x01\x12\x19\n\x15\x42\x41TTERY_LEVEL_NOMINAL\x10\x02\x12\x16\n\x12\x42\x41TTERY_LEVEL_FULL\x10\x03*\xcc\x01\n\x0e\x41udioConstants\x12\x18\n\x14\x41UDIO_CONSTANTS_NULL\x10\x00\x12\x1c\n\x18MIC_DETECTION_DIRECTIONS\x10\x0c\x12%\n SAMPLE_COUNTS_PER_ENGINE_MESSAGE\x10\xa0\x01\x12\"\n\x1dSAMPLE_COUNTS_PER_SDK_MESSAGE\x10\xc0\x0c\x12\x1b\n\x16MICROPHONE_SAMPLE_RATE\x10\x89z\x12\x1a\n\x15PROCESSED_SAMPLE_RATE\x10\x80}*\x85\x01\n\x13\x41udioProcessingMode\x12\x11\n\rAUDIO_UNKNOWN\x10\x00\x12\r\n\tAUDIO_OFF\x10\x01\x12\x13\n\x0f\x41UDIO_FAST_MODE\x10\x02\x12\x1a\n\x16\x41UDIO_DIRECTIONAL_MODE\x10\x03\x12\x1b\n\x17\x41UDIO_VOICE_DETECT_MODE\x10\x04\x62\x06proto3') + serialized_pb=_b('\n$anki_vector/messaging/messages.proto\x12\x1e\x41nki.Vector.external_interface\x1a+anki_vector/messaging/response_status.proto\x1a&anki_vector/messaging/extensions.proto\"\x0f\n\rKeepAlivePing\"\x19\n\tAnimation\x12\x0c\n\x04name\x18\x01 \x01(\t\"|\n\x12\x44riveWheelsRequest\x12\x17\n\x0fleft_wheel_mmps\x18\x01 \x01(\x02\x12\x18\n\x10right_wheel_mmps\x18\x02 \x01(\x02\x12\x18\n\x10left_wheel_mmps2\x18\x03 \x01(\x02\x12\x19\n\x11right_wheel_mmps2\x18\x04 \x01(\x02\"U\n\x13\x44riveWheelsResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\",\n\x0fMoveHeadRequest\x12\x19\n\x11speed_rad_per_sec\x18\x01 \x01(\x02\"R\n\x10MoveHeadResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\",\n\x0fMoveLiftRequest\x12\x19\n\x11speed_rad_per_sec\x18\x01 \x01(\x02\"R\n\x10MoveLiftResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\xb4\x01\n\x14PlayAnimationRequest\x12<\n\tanimation\x18\x01 \x01(\x0b\x32).Anki.Vector.external_interface.Animation\x12\r\n\x05loops\x18\x02 \x01(\r\x12\x19\n\x11ignore_body_track\x18\x03 \x01(\x08\x12\x19\n\x11ignore_head_track\x18\x04 \x01(\x08\x12\x19\n\x11ignore_lift_track\x18\x05 \x01(\x08\"\x98\x01\n\x15PlayAnimationResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12?\n\x06result\x18\x02 \x01(\x0e\x32/.Anki.Vector.external_interface.BehaviorResults\"\x17\n\x15ListAnimationsRequest\"\x9c\x01\n\x16ListAnimationsResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12\x42\n\x0f\x61nimation_names\x18\x02 \x03(\x0b\x32).Anki.Vector.external_interface.Animation\"_\n\x1a\x44isplayFaceImageRGBRequest\x12\x11\n\tface_data\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64uration_ms\x18\x02 \x01(\r\x12\x19\n\x11interrupt_running\x18\x03 \x01(\x08\"]\n\x1b\x44isplayFaceImageRGBResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\x1b\n\x19MeetVictorFaceScanStarted\"\x1c\n\x1aMeetVictorFaceScanComplete\"\xbf\x02\n\x06Status\x12\x62\n\x1dmeet_victor_face_scan_started\x18\x02 \x01(\x0b\x32\x39.Anki.Vector.external_interface.MeetVictorFaceScanStartedH\x00\x12\x64\n\x1emeet_victor_face_scan_complete\x18\x03 \x01(\x0b\x32:.Anki.Vector.external_interface.MeetVictorFaceScanCompleteH\x00\x12\\\n\x19\x66\x61\x63\x65_enrollment_completed\x18\x04 \x01(\x0b\x32\x37.Anki.Vector.external_interface.FaceEnrollmentCompletedH\x00\x42\r\n\x0bstatus_type\"\xac\x01\n\x08WakeWord\x12H\n\x0fwake_word_begin\x18\x01 \x01(\x0b\x32-.Anki.Vector.external_interface.WakeWordBeginH\x00\x12\x44\n\rwake_word_end\x18\x02 \x01(\x0b\x32+.Anki.Vector.external_interface.WakeWordEndH\x00\x42\x10\n\x0ewake_word_type\"b\n\x11TimeStampedStatus\x12\x36\n\x06status\x18\x01 \x01(\x0b\x32&.Anki.Vector.external_interface.Status\x12\x15\n\rtimestamp_utc\x18\x02 \x01(\r\"p\n\nPoseStruct\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02\x12\n\n\x02q0\x18\x04 \x01(\x02\x12\n\n\x02q1\x18\x05 \x01(\x02\x12\n\n\x02q2\x18\x06 \x01(\x02\x12\n\n\x02q3\x18\x07 \x01(\x02\x12\x11\n\torigin_id\x18\x08 \x01(\r\",\n\tAccelData\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02\"+\n\x08GyroData\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02\"\xa3\x01\n\x08ProxData\x12\x13\n\x0b\x64istance_mm\x18\x01 \x01(\r\x12\x16\n\x0esignal_quality\x18\x02 \x01(\x02\x12\x19\n\x11is_in_valid_range\x18\x03 \x01(\x08\x12\x1f\n\x17is_valid_signal_quality\x18\x04 \x01(\x08\x12\x16\n\x0eis_lift_in_fov\x18\x05 \x01(\x08\x12\x16\n\x0eis_too_pitched\x18\x06 \x01(\x08\">\n\tTouchData\x12\x17\n\x0fraw_touch_value\x18\x01 \x01(\r\x12\x18\n\x10is_being_touched\x18\x02 \x01(\x08\"\x82\x05\n\nRobotState\x12\x38\n\x04pose\x18\x01 \x01(\x0b\x32*.Anki.Vector.external_interface.PoseStruct\x12\x16\n\x0epose_angle_rad\x18\x02 \x01(\x02\x12\x16\n\x0epose_pitch_rad\x18\x03 \x01(\x02\x12\x1d\n\x15left_wheel_speed_mmps\x18\x04 \x01(\x02\x12\x1e\n\x16right_wheel_speed_mmps\x18\x05 \x01(\x02\x12\x16\n\x0ehead_angle_rad\x18\x06 \x01(\x02\x12\x16\n\x0elift_height_mm\x18\x07 \x01(\x02\x12\x38\n\x05\x61\x63\x63\x65l\x18\x08 \x01(\x0b\x32).Anki.Vector.external_interface.AccelData\x12\x36\n\x04gyro\x18\t \x01(\x0b\x32(.Anki.Vector.external_interface.GyroData\x12\x1a\n\x12\x63\x61rrying_object_id\x18\n \x01(\x05\x12!\n\x19\x63\x61rrying_object_on_top_id\x18\x0b \x01(\x05\x12\x1f\n\x17head_tracking_object_id\x18\x0c \x01(\x05\x12\x1e\n\x16localized_to_object_id\x18\r \x01(\x05\x12\x1d\n\x15last_image_time_stamp\x18\x0e \x01(\r\x12\x0e\n\x06status\x18\x0f \x01(\r\x12;\n\tprox_data\x18\x10 \x01(\x0b\x32(.Anki.Vector.external_interface.ProxData\x12=\n\ntouch_data\x18\x11 \x01(\x0b\x32).Anki.Vector.external_interface.TouchData\"!\n\tCladPoint\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\"Q\n\x08\x43ladRect\x12\x12\n\nx_top_left\x18\x01 \x01(\x02\x12\x12\n\ny_top_left\x18\x02 \x01(\x02\x12\r\n\x05width\x18\x03 \x01(\x02\x12\x0e\n\x06height\x18\x04 \x01(\x02\"\x8a\x04\n\x11RobotObservedFace\x12\x0f\n\x07\x66\x61\x63\x65_id\x18\x01 \x01(\x05\x12\x11\n\ttimestamp\x18\x02 \x01(\r\x12\x38\n\x04pose\x18\x03 \x01(\x0b\x32*.Anki.Vector.external_interface.PoseStruct\x12:\n\x08img_rect\x18\x04 \x01(\x0b\x32(.Anki.Vector.external_interface.CladRect\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x44\n\nexpression\x18\x06 \x01(\x0e\x32\x30.Anki.Vector.external_interface.FacialExpression\x12\x19\n\x11\x65xpression_values\x18\x07 \x03(\r\x12;\n\x08left_eye\x18\x08 \x03(\x0b\x32).Anki.Vector.external_interface.CladPoint\x12<\n\tright_eye\x18\t \x03(\x0b\x32).Anki.Vector.external_interface.CladPoint\x12\x37\n\x04nose\x18\n \x03(\x0b\x32).Anki.Vector.external_interface.CladPoint\x12\x38\n\x05mouth\x18\x0b \x03(\x0b\x32).Anki.Vector.external_interface.CladPoint\"<\n\x1aRobotChangedObservedFaceID\x12\x0e\n\x06old_id\x18\x01 \x01(\x05\x12\x0e\n\x06new_id\x18\x02 \x01(\x05\"~\n\x17\x46\x61\x63\x65\x45nrollmentCompleted\x12\x44\n\x06result\x18\x01 \x01(\x0e\x32\x34.Anki.Vector.external_interface.FaceEnrollmentResult\x12\x0f\n\x07\x66\x61\x63\x65_id\x18\x02 \x01(\x05\x12\x0c\n\x04name\x18\x03 \x01(\t\"\x1d\n\x1b\x43\x61ncelFaceEnrollmentRequest\"^\n\x1c\x43\x61ncelFaceEnrollmentResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\x1d\n\x1bRequestEnrolledNamesRequest\"\xc2\x01\n\x0fLoadedKnownFace\x12$\n\x1cseconds_since_first_enrolled\x18\x01 \x01(\x03\x12\"\n\x1aseconds_since_last_updated\x18\x02 \x01(\x03\x12\x1f\n\x17seconds_since_last_seen\x18\x03 \x01(\x03\x12%\n\x1dlast_seen_seconds_since_epoch\x18\x04 \x01(\x03\x12\x0f\n\x07\x66\x61\x63\x65_id\x18\x05 \x01(\x05\x12\x0c\n\x04name\x18\x06 \x01(\t\"9\n\x18RobotRenamedEnrolledFace\x12\x0f\n\x07\x66\x61\x63\x65_id\x18\x01 \x01(\x05\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x9e\x01\n\x1cRequestEnrolledNamesResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12>\n\x05\x66\x61\x63\x65s\x18\x02 \x03(\x0b\x32/.Anki.Vector.external_interface.LoadedKnownFace\"T\n\x1dUpdateEnrolledFaceByIDRequest\x12\x0f\n\x07\x66\x61\x63\x65_id\x18\x01 \x01(\x05\x12\x10\n\x08old_name\x18\x02 \x01(\t\x12\x10\n\x08new_name\x18\x03 \x01(\t\"`\n\x1eUpdateEnrolledFaceByIDResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"/\n\x1c\x45raseEnrolledFaceByIDRequest\x12\x0f\n\x07\x66\x61\x63\x65_id\x18\x01 \x01(\x05\"_\n\x1d\x45raseEnrolledFaceByIDResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\x1e\n\x1c\x45raseAllEnrolledFacesRequest\"_\n\x1d\x45raseAllEnrolledFacesResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\x88\x01\n\x16SetFaceToEnrollRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0bobserved_id\x18\x02 \x01(\x05\x12\x0f\n\x07save_id\x18\x03 \x01(\x05\x12\x15\n\rsave_to_robot\x18\x04 \x01(\x08\x12\x10\n\x08say_name\x18\x05 \x01(\x08\x12\x11\n\tuse_music\x18\x06 \x01(\x08\"Y\n\x17SetFaceToEnrollResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\x18\n\x16\x44riveOffChargerRequest\"\x9a\x01\n\x17\x44riveOffChargerResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12?\n\x06result\x18\x02 \x01(\x0e\x32/.Anki.Vector.external_interface.BehaviorResults\"\x17\n\x15\x44riveOnChargerRequest\"\x99\x01\n\x16\x44riveOnChargerResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12?\n\x06result\x18\x02 \x01(\x0e\x32/.Anki.Vector.external_interface.BehaviorResults\"\x0f\n\rWakeWordBegin\"8\n\x0bWakeWordEnd\x12\x14\n\x0cintent_heard\x18\x01 \x01(\x08\x12\x13\n\x0bintent_json\x18\x02 \x01(\t\"n\n\tPhotoInfo\x12\x10\n\x08photo_id\x18\x01 \x01(\r\x12\x15\n\rtimestamp_utc\x18\x02 \x01(\r\x12\x1b\n\x13photo_copied_to_app\x18\x03 \x01(\x08\x12\x1b\n\x13thumb_copied_to_app\x18\x04 \x01(\x08\"\x13\n\x11PhotosInfoRequest\"\x94\x01\n\x12PhotosInfoResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12>\n\x0bphoto_infos\x18\x02 \x03(\x0b\x32).Anki.Vector.external_interface.PhotoInfo\" \n\x0cPhotoRequest\x12\x10\n\x08photo_id\x18\x01 \x01(\r\"6\n\x10PhotoPathMessage\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x11\n\tfull_path\x18\x02 \x01(\t\"o\n\rPhotoResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12\x0f\n\x07success\x18\x02 \x01(\x08\x12\r\n\x05image\x18\x03 \x01(\x0c\"$\n\x10ThumbnailRequest\x12\x10\n\x08photo_id\x18\x01 \x01(\r\":\n\x14ThumbnailPathMessage\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x11\n\tfull_path\x18\x02 \x01(\t\"s\n\x11ThumbnailResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12\x0f\n\x07success\x18\x02 \x01(\x08\x12\r\n\x05image\x18\x03 \x01(\x0c\"&\n\x12\x44\x65letePhotoRequest\x12\x10\n\x08photo_id\x18\x01 \x01(\r\"f\n\x13\x44\x65letePhotoResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12\x0f\n\x07success\x18\x02 \x01(\x08\"\x1e\n\nPhotoTaken\x12\x10\n\x08photo_id\x18\x01 \x01(\r\"\xc1\x02\n\x11PathMotionProfile\x12\x12\n\nspeed_mmps\x18\x01 \x01(\x02\x12\x13\n\x0b\x61\x63\x63\x65l_mmps2\x18\x02 \x01(\x02\x12\x13\n\x0b\x64\x65\x63\x65l_mmps2\x18\x03 \x01(\x02\x12$\n\x1cpoint_turn_speed_rad_per_sec\x18\x04 \x01(\x02\x12%\n\x1dpoint_turn_accel_rad_per_sec2\x18\x05 \x01(\x02\x12%\n\x1dpoint_turn_decel_rad_per_sec2\x18\x06 \x01(\x02\x12\x17\n\x0f\x64ock_speed_mmps\x18\x07 \x01(\x02\x12\x18\n\x10\x64ock_accel_mmps2\x18\x08 \x01(\x02\x12\x18\n\x10\x64ock_decel_mmps2\x18\t \x01(\x02\x12\x1a\n\x12reverse_speed_mmps\x18\n \x01(\x02\x12\x11\n\tis_custom\x18\x0b \x01(\x08\"\xf8\x0c\n\x0c\x41\x63tionResult\x12K\n\x04\x63ode\x18\x01 \x01(\x0e\x32=.Anki.Vector.external_interface.ActionResult.ActionResultCode\"\x9a\x0c\n\x10\x41\x63tionResultCode\x12\x19\n\x15\x41\x43TION_RESULT_SUCCESS\x10\x00\x12\x1c\n\x15\x41\x43TION_RESULT_RUNNING\x10\x80\x80\x80\x08\x12,\n%ACTION_RESULT_CANCELLED_WHILE_RUNNING\x10\x80\x80\x80\x10\x12\x12\n\x0bNOT_STARTED\x10\x81\x80\x80\x10\x12\x0c\n\x05\x41\x42ORT\x10\x80\x80\x80\x18\x12\x13\n\x0c\x41NIM_ABORTED\x10\x81\x80\x80\x18\x12\x11\n\nBAD_MARKER\x10\x82\x80\x80\x18\x12\x16\n\x0f\x42\x41\x44_MESSAGE_TAG\x10\x83\x80\x80\x18\x12\x11\n\nBAD_OBJECT\x10\x84\x80\x80\x18\x12\x0f\n\x08\x42\x41\x44_POSE\x10\x85\x80\x80\x18\x12\x0e\n\x07\x42\x41\x44_TAG\x10\x86\x80\x80\x18\x12\x1e\n\x17\x43HARGER_UNPLUGGED_ABORT\x10\x87\x80\x80\x18\x12!\n\x1a\x43LIFF_ALIGN_FAILED_TIMEOUT\x10\x88\x80\x80\x18\x12$\n\x1d\x43LIFF_ALIGN_FAILED_NO_TURNING\x10\x89\x80\x80\x18\x12&\n\x1f\x43LIFF_ALIGN_FAILED_OVER_TURNING\x10\x8a\x80\x80\x18\x12\"\n\x1b\x43LIFF_ALIGN_FAILED_NO_WHITE\x10\x8b\x80\x80\x18\x12!\n\x1a\x43LIFF_ALIGN_FAILED_STOPPED\x10\x8c\x80\x80\x18\x12!\n\x1a\x46\x41ILED_SETTING_CALIBRATION\x10\x8d\x80\x80\x18\x12(\n!FOLLOWING_PATH_BUT_NOT_TRAVERSING\x10\x8e\x80\x80\x18\x12\x12\n\x0bINTERRUPTED\x10\x8f\x80\x80\x18\x12\x1f\n\x18INVALID_OFF_TREADS_STATE\x10\x90\x80\x80\x18\x12\x19\n\x12MISMATCHED_UP_AXIS\x10\x91\x80\x80\x18\x12\x13\n\x0cNO_ANIM_NAME\x10\x92\x80\x80\x18\x12\x16\n\x0fNO_DISTANCE_SET\x10\x93\x80\x80\x18\x12\x0e\n\x07NO_FACE\x10\x94\x80\x80\x18\x12\x12\n\x0bNO_GOAL_SET\x10\x95\x80\x80\x18\x12\x19\n\x12NO_PREACTION_POSES\x10\x96\x80\x80\x18\x12 \n\x19NOT_CARRYING_OBJECT_ABORT\x10\x97\x80\x80\x18\x12\x1b\n\x14NOT_ON_CHARGER_ABORT\x10\x98\x80\x80\x18\x12\x15\n\x0eNULL_SUBACTION\x10\x99\x80\x80\x18\x12!\n\x1aPATH_PLANNING_FAILED_ABORT\x10\x9a\x80\x80\x18\x12(\n!PICKUP_OBJECT_UNEXPECTEDLY_MOVING\x10\x9b\x80\x80\x18\x12#\n\x1cSEND_MESSAGE_TO_ROBOT_FAILED\x10\x9c\x80\x80\x18\x12\x1c\n\x15STILL_CARRYING_OBJECT\x10\x9d\x80\x80\x18\x12\x0e\n\x07TIMEOUT\x10\x9e\x80\x80\x18\x12\x14\n\rTRACKS_LOCKED\x10\x9f\x80\x80\x18\x12\x1d\n\x16UNEXPECTED_DOCK_ACTION\x10\xa0\x80\x80\x18\x12\x18\n\x11UNKNOWN_TOOL_CODE\x10\xa1\x80\x80\x18\x12\x1c\n\x15UPDATE_DERIVED_FAILED\x10\xa2\x80\x80\x18\x12 \n\x19VISUAL_OBSERVATION_FAILED\x10\xa3\x80\x80\x18\x12 \n\x19SHOULDNT_DRIVE_ON_CHARGER\x10\xa4\x80\x80\x18\x12\x0c\n\x05RETRY\x10\x80\x80\x80 \x12#\n\x1c\x44ID_NOT_REACH_PREACTION_POSE\x10\x81\x80\x80 \x12\x1d\n\x16\x46\x41ILED_TRAVERSING_PATH\x10\x82\x80\x80 \x12!\n\x1aLAST_PICK_AND_PLACE_FAILED\x10\x83\x80\x80 \x12$\n\x1dMOTOR_STOPPED_MAKING_PROGRESS\x10\x84\x80\x80 \x12 \n\x19NOT_CARRYING_OBJECT_RETRY\x10\x85\x80\x80 \x12\x1b\n\x14NOT_ON_CHARGER_RETRY\x10\x86\x80\x80 \x12!\n\x1aPATH_PLANNING_FAILED_RETRY\x10\x87\x80\x80 \x12\x1e\n\x17PLACEMENT_GOAL_NOT_FREE\x10\x88\x80\x80 \x12,\n%PICKUP_OBJECT_UNEXPECTEDLY_NOT_MOVING\x10\x89\x80\x80 \x12\x17\n\x10STILL_ON_CHARGER\x10\x8a\x80\x80 \x12\x1d\n\x16UNEXPECTED_PITCH_ANGLE\x10\x8b\x80\x80 \"\xa7\x01\n\x0fGoToPoseRequest\x12\x0c\n\x04x_mm\x18\x01 \x01(\x02\x12\x0c\n\x04y_mm\x18\x02 \x01(\x02\x12\x0b\n\x03rad\x18\x03 \x01(\x02\x12\x46\n\x0bmotion_prof\x18\x04 \x01(\x0b\x32\x31.Anki.Vector.external_interface.PathMotionProfile\x12\x0e\n\x06id_tag\x18\x05 \x01(\x05\x12\x13\n\x0bnum_retries\x18\x06 \x01(\x05\"\x90\x01\n\x10GoToPoseResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12<\n\x06result\x18\x02 \x01(\x0b\x32,.Anki.Vector.external_interface.ActionResult\"\xd0\x02\n\x13\x44ockWithCubeRequest\x12\x11\n\tobject_id\x18\x01 \x01(\x05\x12\x1f\n\x17\x64istance_from_marker_mm\x18\x02 \x01(\x02\x12\x1a\n\x12\x61pproach_angle_rad\x18\x03 \x01(\x02\x12\x45\n\x0e\x61lignment_type\x18\x04 \x01(\x0e\x32-.Anki.Vector.external_interface.AlignmentType\x12\x1a\n\x12use_approach_angle\x18\x05 \x01(\x08\x12\x19\n\x11use_pre_dock_pose\x18\x06 \x01(\x08\x12\x46\n\x0bmotion_prof\x18\x07 \x01(\x0b\x32\x31.Anki.Vector.external_interface.PathMotionProfile\x12\x0e\n\x06id_tag\x18\x08 \x01(\x05\x12\x13\n\x0bnum_retries\x18\t \x01(\x05\"\x94\x01\n\x14\x44ockWithCubeResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12<\n\x06result\x18\x02 \x01(\x0b\x32,.Anki.Vector.external_interface.ActionResult\"\x7f\n\x14\x44riveStraightRequest\x12\x12\n\nspeed_mmps\x18\x01 \x01(\x02\x12\x0f\n\x07\x64ist_mm\x18\x02 \x01(\x02\x12\x1d\n\x15should_play_animation\x18\x03 \x01(\x08\x12\x0e\n\x06id_tag\x18\x04 \x01(\x05\x12\x13\n\x0bnum_retries\x18\x05 \x01(\x05\"\x95\x01\n\x15\x44riveStraightResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12<\n\x06result\x18\x02 \x01(\x0b\x32,.Anki.Vector.external_interface.ActionResult\"\xa9\x01\n\x12TurnInPlaceRequest\x12\x11\n\tangle_rad\x18\x01 \x01(\x02\x12\x19\n\x11speed_rad_per_sec\x18\x02 \x01(\x02\x12\x1a\n\x12\x61\x63\x63\x65l_rad_per_sec2\x18\x03 \x01(\x02\x12\x0f\n\x07tol_rad\x18\x04 \x01(\x02\x12\x13\n\x0bis_absolute\x18\x05 \x01(\r\x12\x0e\n\x06id_tag\x18\x06 \x01(\x05\x12\x13\n\x0bnum_retries\x18\x07 \x01(\x05\"\x93\x01\n\x13TurnInPlaceResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12<\n\x06result\x18\x02 \x01(\x0b\x32,.Anki.Vector.external_interface.ActionResult\"\x9e\x01\n\x13SetHeadAngleRequest\x12\x11\n\tangle_rad\x18\x01 \x01(\x02\x12\x1d\n\x15max_speed_rad_per_sec\x18\x02 \x01(\x02\x12\x1a\n\x12\x61\x63\x63\x65l_rad_per_sec2\x18\x03 \x01(\x02\x12\x14\n\x0c\x64uration_sec\x18\x04 \x01(\x02\x12\x0e\n\x06id_tag\x18\x05 \x01(\x05\x12\x13\n\x0bnum_retries\x18\x06 \x01(\x05\"\x94\x01\n\x14SetHeadAngleResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12<\n\x06result\x18\x02 \x01(\x0b\x32,.Anki.Vector.external_interface.ActionResult\"\x9f\x01\n\x14SetLiftHeightRequest\x12\x11\n\theight_mm\x18\x01 \x01(\x02\x12\x1d\n\x15max_speed_rad_per_sec\x18\x02 \x01(\x02\x12\x1a\n\x12\x61\x63\x63\x65l_rad_per_sec2\x18\x03 \x01(\x02\x12\x14\n\x0c\x64uration_sec\x18\x04 \x01(\x02\x12\x0e\n\x06id_tag\x18\x05 \x01(\x05\x12\x13\n\x0bnum_retries\x18\x06 \x01(\x05\"\x95\x01\n\x15SetLiftHeightResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12<\n\x06result\x18\x02 \x01(\x0b\x32,.Anki.Vector.external_interface.ActionResult\"\xb9\x03\n\x0cNetworkStats\x12#\n\x1bg_net_stat1_num_connections\x18\x01 \x01(\x05\x12\x1f\n\x17g_net_stat2_latency_avg\x18\x02 \x01(\x02\x12\x1e\n\x16g_net_stat3_latency_sd\x18\x03 \x01(\x02\x12\x1f\n\x17g_net_stat4_latency_min\x18\x04 \x01(\x02\x12\x1f\n\x17g_net_stat5_latency_max\x18\x05 \x01(\x02\x12#\n\x1bg_net_stat6_ping_arrived_pc\x18\x06 \x01(\x02\x12%\n\x1dg_net_stat7_ext_queued_avg_ms\x18\x07 \x01(\x02\x12%\n\x1dg_net_stat8_ext_queued_min_ms\x18\x08 \x01(\x02\x12%\n\x1dg_net_stat9_ext_queued_max_ms\x18\t \x01(\x02\x12!\n\x19g_net_stata_queued_avg_ms\x18\n \x01(\x02\x12!\n\x19g_net_statb_queued_min_ms\x18\x0b \x01(\x02\x12!\n\x19g_net_statc_queued_max_ms\x18\x0c \x01(\x02\"\x15\n\x13\x42\x61tteryStateRequest\"\xc9\x02\n\x14\x42\x61tteryStateResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12\x43\n\rbattery_level\x18\x02 \x01(\x0e\x32,.Anki.Vector.external_interface.BatteryLevel\x12\x15\n\rbattery_volts\x18\x03 \x01(\x02\x12\x13\n\x0bis_charging\x18\x04 \x01(\x08\x12\x1e\n\x16is_on_charger_platform\x18\x05 \x01(\x08\x12\x1d\n\x15suggested_charger_sec\x18\x06 \x01(\x02\x12\x41\n\x0c\x63ube_battery\x18\x07 \x01(\x0b\x32+.Anki.Vector.external_interface.CubeBattery\"\xd3\x01\n\x0b\x43ubeBattery\x12K\n\x05level\x18\x01 \x01(\x0e\x32<.Anki.Vector.external_interface.CubeBattery.CubeBatteryLevel\x12\x12\n\nfactory_id\x18\x02 \x01(\t\x12\x15\n\rbattery_volts\x18\x03 \x01(\x02\x12#\n\x1btime_since_last_reading_sec\x18\x04 \x01(\x02\"\'\n\x10\x43ubeBatteryLevel\x12\x07\n\x03Low\x10\x00\x12\n\n\x06Normal\x10\x01\"\x15\n\x13VersionStateRequest\"\x83\x01\n\x14VersionStateResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12\x12\n\nos_version\x18\x02 \x01(\t\x12\x17\n\x0f\x65ngine_build_id\x18\x03 \x01(\t\"\x15\n\x13NetworkStateRequest\"\x9b\x01\n\x14NetworkStateResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12\x43\n\rnetwork_stats\x18\x02 \x01(\x0b\x32,.Anki.Vector.external_interface.NetworkStats\"Q\n\x0eSayTextRequest\x12\x0c\n\x04text\x18\x01 \x01(\t\x12\x18\n\x10use_vector_voice\x18\x02 \x01(\x08\x12\x17\n\x0f\x64uration_scalar\x18\x03 \x01(\x02\"\xf5\x01\n\x0fSayTextResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\x12M\n\x05state\x18\x02 \x01(\x0e\x32>.Anki.Vector.external_interface.SayTextResponse.UtteranceState\"S\n\x0eUtteranceState\x12\x0b\n\x07INVALID\x10\x00\x12\x0e\n\nGENERATING\x10\x01\x12\t\n\x05READY\x10\x02\x12\x0b\n\x07PLAYING\x10\x03\x12\x0c\n\x08\x46INISHED\x10\x04\"\x9b\x01\n\x0fStimulationInfo\x12\x16\n\x0e\x65motion_events\x18\x01 \x03(\t\x12\r\n\x05value\x18\x02 \x01(\x02\x12\x10\n\x08velocity\x18\x03 \x01(\x02\x12\r\n\x05\x61\x63\x63\x65l\x18\x04 \x01(\x02\x12\x1a\n\x12value_before_event\x18\x05 \x01(\x02\x12\x11\n\tmin_value\x18\x06 \x01(\x02\x12\x11\n\tmax_value\x18\x07 \x01(\x02\"Y\n\x14\x41udioSendModeRequest\x12\x41\n\x04mode\x18\x01 \x01(\x0e\x32\x33.Anki.Vector.external_interface.AudioProcessingMode\"Y\n\x14\x41udioSendModeChanged\x12\x41\n\x04mode\x18\x01 \x01(\x0e\x32\x33.Anki.Vector.external_interface.AudioProcessingMode\"\xe8\x01\n\nAudioChunk\x12\x18\n\x10robot_time_stamp\x18\x01 \x01(\r\x12\x10\n\x08group_id\x18\x02 \x01(\r\x12\x10\n\x08\x63hunk_id\x18\x03 \x01(\r\x12\x19\n\x11\x61udio_chunk_count\x18\x04 \x01(\r\x12\x14\n\x0csignal_power\x18\x05 \x01(\x0c\x12\x1b\n\x13\x64irection_strengths\x18\x06 \x01(\x0c\x12\x18\n\x10source_direction\x18\x07 \x01(\r\x12\x19\n\x11source_confidence\x18\x08 \x01(\r\x12\x19\n\x11noise_floor_power\x18\t \x01(\r\"\x12\n\x10\x41udioFeedRequest\"\xc8\x01\n\x11\x41udioFeedResponse\x12\x18\n\x10robot_time_stamp\x18\x01 \x01(\r\x12\x10\n\x08group_id\x18\x02 \x01(\r\x12\x14\n\x0csignal_power\x18\x03 \x01(\x0c\x12\x1b\n\x13\x64irection_strengths\x18\x04 \x01(\x0c\x12\x18\n\x10source_direction\x18\x05 \x01(\r\x12\x19\n\x11source_confidence\x18\x06 \x01(\r\x12\x19\n\x11noise_floor_power\x18\x07 \x01(\r:\x04\x80\xa6\x1d\x01\".\n\x1c\x45nableMarkerDetectionRequest\x12\x0e\n\x06\x65nable\x18\x01 \x01(\x08\"_\n\x1d\x45nableMarkerDetectionResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\xb1\x01\n\x1a\x45nableFaceDetectionRequest\x12\x0e\n\x06\x65nable\x18\x01 \x01(\x08\x12\x1e\n\x16\x65nable_smile_detection\x18\x02 \x01(\x08\x12$\n\x1c\x65nable_expression_estimation\x18\x03 \x01(\x08\x12\x1e\n\x16\x65nable_blink_detection\x18\x04 \x01(\x08\x12\x1d\n\x15\x65nable_gaze_detection\x18\x05 \x01(\x08\"]\n\x1b\x45nableFaceDetectionResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\".\n\x1c\x45nableMotionDetectionRequest\x12\x0e\n\x06\x65nable\x18\x01 \x01(\x08\"_\n\x1d\x45nableMotionDetectionResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\")\n\x17\x45nableMirrorModeRequest\x12\x0e\n\x06\x65nable\x18\x01 \x01(\x08\"Z\n\x18\x45nableMirrorModeResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\x14\n\x12MirrorModeDisabled\"-\n\x1b\x45nableImageStreamingRequest\x12\x0e\n\x06\x65nable\x18\x01 \x01(\x08\"^\n\x1c\x45nableImageStreamingResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\x19\n\x17VisionModesAutoDisabled\"\xd1\x03\n\nImageChunk\x12\x18\n\x10\x66rame_time_stamp\x18\x01 \x01(\r\x12\x10\n\x08image_id\x18\x02 \x01(\r\x12\r\n\x05width\x18\x03 \x01(\r\x12\x0e\n\x06height\x18\x04 \x01(\r\x12P\n\x0eimage_encoding\x18\x05 \x01(\x0e\x32\x38.Anki.Vector.external_interface.ImageChunk.ImageEncoding\x12\x15\n\rdisplay_index\x18\x06 \x01(\r\x12\x19\n\x11image_chunk_count\x18\x07 \x01(\r\x12\x10\n\x08\x63hunk_id\x18\x08 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\t \x01(\x0c\"\xd3\x01\n\rImageEncoding\x12\x17\n\x13NONE_IMAGE_ENCODING\x10\x00\x12\x0c\n\x08RAW_GRAY\x10\x01\x12\x0b\n\x07RAW_RGB\x10\x02\x12\x08\n\x04YUYV\x10\x03\x12\x0c\n\x08YUV420SP\x10\x04\x12\t\n\x05\x42\x41YER\x10\x05\x12\r\n\tJPEG_GRAY\x10\x06\x12\x0e\n\nJPEG_COLOR\x10\x07\x12\x19\n\x15JPEG_COLOR_HALF_WIDTH\x10\x08\x12\x17\n\x13JPEG_MINIMIZED_GRAY\x10\t\x12\x18\n\x14JPEG_MINIMIZED_COLOR\x10\n\"\x13\n\x11\x43\x61meraFeedRequest\"\xa6\x01\n\x12\x43\x61meraFeedResponse\x12\x18\n\x10\x66rame_time_stamp\x18\x01 \x01(\r\x12\x10\n\x08image_id\x18\x02 \x01(\r\x12P\n\x0eimage_encoding\x18\x03 \x01(\x0e\x32\x38.Anki.Vector.external_interface.ImageChunk.ImageEncoding\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c:\x04\x80\xa6\x1d\x01\"5\n\x12SetEyeColorRequest\x12\x0b\n\x03hue\x18\x01 \x01(\x02\x12\x12\n\nsaturation\x18\x02 \x01(\x02\"U\n\x13SetEyeColorResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus\"\x96\x01\n\x18SDKInitializationRequest\x12\x1a\n\x12sdk_module_version\x18\x01 \x01(\t\x12\x16\n\x0epython_version\x18\x02 \x01(\t\x12\x1d\n\x15python_implementation\x18\x03 \x01(\t\x12\x12\n\nos_version\x18\x04 \x01(\t\x12\x13\n\x0b\x63pu_version\x18\x05 \x01(\t\"[\n\x19SDKInitializationResponse\x12>\n\x06status\x18\x01 \x01(\x0b\x32..Anki.Vector.external_interface.ResponseStatus*\xdc\x04\n\x0bRobotStatus\x12\x15\n\x11ROBOT_STATUS_NONE\x10\x00\x12\x1a\n\x16ROBOT_STATUS_IS_MOVING\x10\x01\x12\"\n\x1eROBOT_STATUS_IS_CARRYING_BLOCK\x10\x02\x12&\n\"ROBOT_STATUS_IS_PICKING_OR_PLACING\x10\x04\x12\x1d\n\x19ROBOT_STATUS_IS_PICKED_UP\x10\x08\x12\"\n\x1eROBOT_STATUS_IS_BUTTON_PRESSED\x10\x10\x12\x1b\n\x17ROBOT_STATUS_IS_FALLING\x10 \x12\x1d\n\x19ROBOT_STATUS_IS_ANIMATING\x10@\x12\x1c\n\x17ROBOT_STATUS_IS_PATHING\x10\x80\x01\x12\x1d\n\x18ROBOT_STATUS_LIFT_IN_POS\x10\x80\x02\x12\x1d\n\x18ROBOT_STATUS_HEAD_IN_POS\x10\x80\x04\x12!\n\x1cROBOT_STATUS_CALM_POWER_MODE\x10\x80\x08\x12\x1f\n\x1aROBOT_STATUS_IS_ON_CHARGER\x10\x80 \x12\x1d\n\x18ROBOT_STATUS_IS_CHARGING\x10\x80@\x12!\n\x1bROBOT_STATUS_CLIFF_DETECTED\x10\x80\x80\x01\x12$\n\x1eROBOT_STATUS_ARE_WHEELS_MOVING\x10\x80\x80\x02\x12 \n\x1aROBOT_STATUS_IS_BEING_HELD\x10\x80\x80\x04\x12%\n\x1fROBOT_STATUS_IS_MOTION_DETECTED\x10\x80\x80\x08*\xbd\x01\n\x10\x46\x61\x63ialExpression\x12\x16\n\x12\x45XPRESSION_UNKNOWN\x10\x00\x12\x16\n\x12\x45XPRESSION_NEUTRAL\x10\x01\x12\x18\n\x14\x45XPRESSION_HAPPINESS\x10\x02\x12\x17\n\x13\x45XPRESSION_SURPRISE\x10\x03\x12\x14\n\x10\x45XPRESSION_ANGER\x10\x04\x12\x16\n\x12\x45XPRESSION_SADNESS\x10\x05\x12\x14\n\x10\x45XPRESSION_COUNT\x10\x05\x1a\x02\x10\x01*\xcc\x01\n\x14\x46\x61\x63\x65\x45nrollmentResult\x12\x0b\n\x07SUCCESS\x10\x00\x12\x12\n\x0eSAW_WRONG_FACE\x10\x01\x12\x16\n\x12SAW_MULTIPLE_FACES\x10\x02\x12\r\n\tTIMED_OUT\x10\x03\x12\x0f\n\x0bSAVE_FAILED\x10\x04\x12\x0e\n\nINCOMPLETE\x10\x05\x12\r\n\tCANCELLED\x10\x06\x12\x0f\n\x0bNAME_IN_USE\x10\x07\x12\x16\n\x12NAMED_STORAGE_FULL\x10\x08\x12\x13\n\x0fUNKNOWN_FAILURE\x10\t*l\n\x0f\x42\x65haviorResults\x12\x1a\n\x16\x42\x45HAVIOR_INVALID_STATE\x10\x00\x12\x1b\n\x17\x42\x45HAVIOR_COMPLETE_STATE\x10\x01\x12 \n\x1c\x42\x45HAVIOR_WONT_ACTIVATE_STATE\x10\x02*S\n\x12\x41\x63tionTagConstants\x12\x13\n\x0fINVALID_SDK_TAG\x10\x00\x12\x13\n\rFIRST_SDK_TAG\x10\x81\x89z\x12\x13\n\x0cLAST_SDK_TAG\x10\xc0\x8d\xb7\x01*\x9e\x01\n\rAlignmentType\x12\x1a\n\x16\x41LIGNMENT_TYPE_UNKNOWN\x10\x00\x12\x1e\n\x1a\x41LIGNMENT_TYPE_LIFT_FINGER\x10\x01\x12\x1d\n\x19\x41LIGNMENT_TYPE_LIFT_PLATE\x10\x02\x12\x17\n\x13\x41LIGNMENT_TYPE_BODY\x10\x03\x12\x19\n\x15\x41LIGNMENT_TYPE_CUSTOM\x10\x04*s\n\x0c\x42\x61tteryLevel\x12\x19\n\x15\x42\x41TTERY_LEVEL_UNKNOWN\x10\x00\x12\x15\n\x11\x42\x41TTERY_LEVEL_LOW\x10\x01\x12\x19\n\x15\x42\x41TTERY_LEVEL_NOMINAL\x10\x02\x12\x16\n\x12\x42\x41TTERY_LEVEL_FULL\x10\x03*\xcc\x01\n\x0e\x41udioConstants\x12\x18\n\x14\x41UDIO_CONSTANTS_NULL\x10\x00\x12\x1c\n\x18MIC_DETECTION_DIRECTIONS\x10\x0c\x12%\n SAMPLE_COUNTS_PER_ENGINE_MESSAGE\x10\xa0\x01\x12\"\n\x1dSAMPLE_COUNTS_PER_SDK_MESSAGE\x10\xc0\x0c\x12\x1b\n\x16MICROPHONE_SAMPLE_RATE\x10\x89z\x12\x1a\n\x15PROCESSED_SAMPLE_RATE\x10\x80}*\x85\x01\n\x13\x41udioProcessingMode\x12\x11\n\rAUDIO_UNKNOWN\x10\x00\x12\r\n\tAUDIO_OFF\x10\x01\x12\x13\n\x0f\x41UDIO_FAST_MODE\x10\x02\x12\x1a\n\x16\x41UDIO_DIRECTIONAL_MODE\x10\x03\x12\x1b\n\x17\x41UDIO_VOICE_DETECT_MODE\x10\x04\x62\x06proto3') , dependencies=[anki__vector_dot_messaging_dot_response__status__pb2.DESCRIPTOR,anki__vector_dot_messaging_dot_extensions__pb2.DESCRIPTOR,]) @@ -107,8 +107,8 @@ ], containing_type=None, options=None, - serialized_start=15131, - serialized_end=15735, + serialized_start=14976, + serialized_end=15580, ) _sym_db.RegisterEnumDescriptor(_ROBOTSTATUS) @@ -150,8 +150,8 @@ ], containing_type=None, options=_descriptor._ParseOptions(descriptor_pb2.EnumOptions(), _b('\020\001')), - serialized_start=15738, - serialized_end=15927, + serialized_start=15583, + serialized_end=15772, ) _sym_db.RegisterEnumDescriptor(_FACIALEXPRESSION) @@ -205,8 +205,8 @@ ], containing_type=None, options=None, - serialized_start=15930, - serialized_end=16134, + serialized_start=15775, + serialized_end=15979, ) _sym_db.RegisterEnumDescriptor(_FACEENROLLMENTRESULT) @@ -232,8 +232,8 @@ ], containing_type=None, options=None, - serialized_start=16136, - serialized_end=16244, + serialized_start=15981, + serialized_end=16089, ) _sym_db.RegisterEnumDescriptor(_BEHAVIORRESULTS) @@ -259,8 +259,8 @@ ], containing_type=None, options=None, - serialized_start=16246, - serialized_end=16329, + serialized_start=16091, + serialized_end=16174, ) _sym_db.RegisterEnumDescriptor(_ACTIONTAGCONSTANTS) @@ -294,8 +294,8 @@ ], containing_type=None, options=None, - serialized_start=16332, - serialized_end=16490, + serialized_start=16177, + serialized_end=16335, ) _sym_db.RegisterEnumDescriptor(_ALIGNMENTTYPE) @@ -325,8 +325,8 @@ ], containing_type=None, options=None, - serialized_start=16492, - serialized_end=16607, + serialized_start=16337, + serialized_end=16452, ) _sym_db.RegisterEnumDescriptor(_BATTERYLEVEL) @@ -364,8 +364,8 @@ ], containing_type=None, options=None, - serialized_start=16610, - serialized_end=16814, + serialized_start=16455, + serialized_end=16659, ) _sym_db.RegisterEnumDescriptor(_AUDIOCONSTANTS) @@ -399,8 +399,8 @@ ], containing_type=None, options=None, - serialized_start=16817, - serialized_end=16950, + serialized_start=16662, + serialized_end=16795, ) _sym_db.RegisterEnumDescriptor(_AUDIOPROCESSINGMODE) @@ -689,8 +689,8 @@ ], containing_type=None, options=None, - serialized_start=7112, - serialized_end=8674, + serialized_start=6957, + serialized_end=8519, ) _sym_db.RegisterEnumDescriptor(_ACTIONRESULT_ACTIONRESULTCODE) @@ -711,8 +711,8 @@ ], containing_type=None, options=None, - serialized_start=11684, - serialized_end=11723, + serialized_start=11529, + serialized_end=11568, ) _sym_db.RegisterEnumDescriptor(_CUBEBATTERY_CUBEBATTERYLEVEL) @@ -745,8 +745,8 @@ ], containing_type=None, options=None, - serialized_start=12309, - serialized_end=12392, + serialized_start=12154, + serialized_end=12237, ) _sym_db.RegisterEnumDescriptor(_SAYTEXTRESPONSE_UTTERANCESTATE) @@ -803,8 +803,8 @@ ], containing_type=None, options=None, - serialized_start=14339, - serialized_end=14550, + serialized_start=14184, + serialized_end=14395, ) _sym_db.RegisterEnumDescriptor(_IMAGECHUNK_IMAGEENCODING) @@ -2127,99 +2127,6 @@ ) -_APPINTENTREQUEST = _descriptor.Descriptor( - name='AppIntentRequest', - full_name='Anki.Vector.external_interface.AppIntentRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='intent', full_name='Anki.Vector.external_interface.AppIntentRequest.intent', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='param', full_name='Anki.Vector.external_interface.AppIntentRequest.param', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3829, - serialized_end=3878, -) - - -_APPDISCONNECTED = _descriptor.Descriptor( - name='AppDisconnected', - full_name='Anki.Vector.external_interface.AppDisconnected', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3880, - serialized_end=3897, -) - - -_APPINTENTRESPONSE = _descriptor.Descriptor( - name='AppIntentResponse', - full_name='Anki.Vector.external_interface.AppIntentResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='Anki.Vector.external_interface.AppIntentResponse.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3899, - serialized_end=3982, -) - - _FACEENROLLMENTCOMPLETED = _descriptor.Descriptor( name='FaceEnrollmentCompleted', full_name='Anki.Vector.external_interface.FaceEnrollmentCompleted', @@ -2260,8 +2167,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3984, - serialized_end=4110, + serialized_start=3829, + serialized_end=3955, ) @@ -2284,8 +2191,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4112, - serialized_end=4141, + serialized_start=3957, + serialized_end=3986, ) @@ -2315,8 +2222,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4143, - serialized_end=4237, + serialized_start=3988, + serialized_end=4082, ) @@ -2339,8 +2246,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4239, - serialized_end=4268, + serialized_start=4084, + serialized_end=4113, ) @@ -2405,8 +2312,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4271, - serialized_end=4465, + serialized_start=4116, + serialized_end=4310, ) @@ -2443,8 +2350,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4467, - serialized_end=4524, + serialized_start=4312, + serialized_end=4369, ) @@ -2481,8 +2388,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4527, - serialized_end=4685, + serialized_start=4372, + serialized_end=4530, ) @@ -2526,8 +2433,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4687, - serialized_end=4771, + serialized_start=4532, + serialized_end=4616, ) @@ -2557,8 +2464,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4773, - serialized_end=4869, + serialized_start=4618, + serialized_end=4714, ) @@ -2588,8 +2495,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4871, - serialized_end=4918, + serialized_start=4716, + serialized_end=4763, ) @@ -2619,8 +2526,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4920, - serialized_end=5015, + serialized_start=4765, + serialized_end=4860, ) @@ -2643,8 +2550,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5017, - serialized_end=5047, + serialized_start=4862, + serialized_end=4892, ) @@ -2674,8 +2581,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5049, - serialized_end=5144, + serialized_start=4894, + serialized_end=4989, ) @@ -2740,8 +2647,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5147, - serialized_end=5283, + serialized_start=4992, + serialized_end=5128, ) @@ -2771,8 +2678,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5285, - serialized_end=5374, + serialized_start=5130, + serialized_end=5219, ) @@ -2795,8 +2702,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5376, - serialized_end=5400, + serialized_start=5221, + serialized_end=5245, ) @@ -2833,8 +2740,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5403, - serialized_end=5557, + serialized_start=5248, + serialized_end=5402, ) @@ -2857,8 +2764,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5559, - serialized_end=5582, + serialized_start=5404, + serialized_end=5427, ) @@ -2895,8 +2802,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5585, - serialized_end=5738, + serialized_start=5430, + serialized_end=5583, ) @@ -2919,8 +2826,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5740, - serialized_end=5755, + serialized_start=5585, + serialized_end=5600, ) @@ -2957,8 +2864,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5757, - serialized_end=5813, + serialized_start=5602, + serialized_end=5658, ) @@ -3009,8 +2916,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5815, - serialized_end=5925, + serialized_start=5660, + serialized_end=5770, ) @@ -3033,8 +2940,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5927, - serialized_end=5946, + serialized_start=5772, + serialized_end=5791, ) @@ -3071,8 +2978,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5949, - serialized_end=6097, + serialized_start=5794, + serialized_end=5942, ) @@ -3102,8 +3009,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6099, - serialized_end=6131, + serialized_start=5944, + serialized_end=5976, ) @@ -3140,8 +3047,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6133, - serialized_end=6187, + serialized_start=5978, + serialized_end=6032, ) @@ -3185,8 +3092,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6189, - serialized_end=6300, + serialized_start=6034, + serialized_end=6145, ) @@ -3216,8 +3123,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6302, - serialized_end=6338, + serialized_start=6147, + serialized_end=6183, ) @@ -3254,8 +3161,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6340, - serialized_end=6398, + serialized_start=6185, + serialized_end=6243, ) @@ -3299,8 +3206,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6400, - serialized_end=6515, + serialized_start=6245, + serialized_end=6360, ) @@ -3330,8 +3237,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6517, - serialized_end=6555, + serialized_start=6362, + serialized_end=6400, ) @@ -3368,8 +3275,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6557, - serialized_end=6659, + serialized_start=6402, + serialized_end=6504, ) @@ -3399,8 +3306,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6661, - serialized_end=6691, + serialized_start=6506, + serialized_end=6536, ) @@ -3500,8 +3407,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6694, - serialized_end=7015, + serialized_start=6539, + serialized_end=6860, ) @@ -3532,8 +3439,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7018, - serialized_end=8674, + serialized_start=6863, + serialized_end=8519, ) @@ -3598,8 +3505,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=8677, - serialized_end=8844, + serialized_start=8522, + serialized_end=8689, ) @@ -3636,8 +3543,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=8847, - serialized_end=8991, + serialized_start=8692, + serialized_end=8836, ) @@ -3723,8 +3630,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=8994, - serialized_end=9330, + serialized_start=8839, + serialized_end=9175, ) @@ -3761,8 +3668,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=9333, - serialized_end=9481, + serialized_start=9178, + serialized_end=9326, ) @@ -3820,8 +3727,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=9483, - serialized_end=9610, + serialized_start=9328, + serialized_end=9455, ) @@ -3858,8 +3765,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=9613, - serialized_end=9762, + serialized_start=9458, + serialized_end=9607, ) @@ -3931,8 +3838,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=9765, - serialized_end=9934, + serialized_start=9610, + serialized_end=9779, ) @@ -3969,8 +3876,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=9937, - serialized_end=10084, + serialized_start=9782, + serialized_end=9929, ) @@ -4035,8 +3942,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=10087, - serialized_end=10245, + serialized_start=9932, + serialized_end=10090, ) @@ -4073,8 +3980,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=10248, - serialized_end=10396, + serialized_start=10093, + serialized_end=10241, ) @@ -4139,8 +4046,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=10399, - serialized_end=10558, + serialized_start=10244, + serialized_end=10403, ) @@ -4177,8 +4084,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=10561, - serialized_end=10710, + serialized_start=10406, + serialized_end=10555, ) @@ -4285,8 +4192,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=10713, - serialized_end=11154, + serialized_start=10558, + serialized_end=10999, ) @@ -4309,8 +4216,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=11156, - serialized_end=11177, + serialized_start=11001, + serialized_end=11022, ) @@ -4382,8 +4289,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=11180, - serialized_end=11509, + serialized_start=11025, + serialized_end=11354, ) @@ -4435,8 +4342,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=11512, - serialized_end=11723, + serialized_start=11357, + serialized_end=11568, ) @@ -4459,8 +4366,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=11725, - serialized_end=11746, + serialized_start=11570, + serialized_end=11591, ) @@ -4504,8 +4411,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=11749, - serialized_end=11880, + serialized_start=11594, + serialized_end=11725, ) @@ -4528,8 +4435,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=11882, - serialized_end=11903, + serialized_start=11727, + serialized_end=11748, ) @@ -4566,8 +4473,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=11906, - serialized_end=12061, + serialized_start=11751, + serialized_end=11906, ) @@ -4611,8 +4518,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=12063, - serialized_end=12144, + serialized_start=11908, + serialized_end=11989, ) @@ -4650,8 +4557,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=12147, - serialized_end=12392, + serialized_start=11992, + serialized_end=12237, ) @@ -4723,8 +4630,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=12395, - serialized_end=12550, + serialized_start=12240, + serialized_end=12395, ) @@ -4754,8 +4661,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=12552, - serialized_end=12641, + serialized_start=12397, + serialized_end=12486, ) @@ -4785,8 +4692,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=12643, - serialized_end=12732, + serialized_start=12488, + serialized_end=12577, ) @@ -4872,8 +4779,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=12735, - serialized_end=12967, + serialized_start=12580, + serialized_end=12812, ) @@ -4896,8 +4803,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=12969, - serialized_end=12987, + serialized_start=12814, + serialized_end=12832, ) @@ -4969,8 +4876,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=12990, - serialized_end=13190, + serialized_start=12835, + serialized_end=13035, ) @@ -5000,8 +4907,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=13192, - serialized_end=13238, + serialized_start=13037, + serialized_end=13083, ) @@ -5031,8 +4938,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=13240, - serialized_end=13335, + serialized_start=13085, + serialized_end=13180, ) @@ -5090,8 +4997,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=13338, - serialized_end=13515, + serialized_start=13183, + serialized_end=13360, ) @@ -5121,8 +5028,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=13517, - serialized_end=13610, + serialized_start=13362, + serialized_end=13455, ) @@ -5152,8 +5059,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=13612, - serialized_end=13658, + serialized_start=13457, + serialized_end=13503, ) @@ -5183,8 +5090,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=13660, - serialized_end=13755, + serialized_start=13505, + serialized_end=13600, ) @@ -5214,8 +5121,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=13757, - serialized_end=13798, + serialized_start=13602, + serialized_end=13643, ) @@ -5245,8 +5152,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=13800, - serialized_end=13890, + serialized_start=13645, + serialized_end=13735, ) @@ -5269,8 +5176,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=13892, - serialized_end=13912, + serialized_start=13737, + serialized_end=13757, ) @@ -5300,8 +5207,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=13914, - serialized_end=13959, + serialized_start=13759, + serialized_end=13804, ) @@ -5331,8 +5238,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=13961, - serialized_end=14055, + serialized_start=13806, + serialized_end=13900, ) @@ -5355,8 +5262,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=14057, - serialized_end=14082, + serialized_start=13902, + serialized_end=13927, ) @@ -5443,8 +5350,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=14085, - serialized_end=14550, + serialized_start=13930, + serialized_end=14395, ) @@ -5467,8 +5374,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=14552, - serialized_end=14571, + serialized_start=14397, + serialized_end=14416, ) @@ -5519,8 +5426,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=14574, - serialized_end=14740, + serialized_start=14419, + serialized_end=14585, ) @@ -5557,8 +5464,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=14742, - serialized_end=14795, + serialized_start=14587, + serialized_end=14640, ) @@ -5588,8 +5495,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=14797, - serialized_end=14882, + serialized_start=14642, + serialized_end=14727, ) @@ -5647,8 +5554,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=14885, - serialized_end=15035, + serialized_start=14730, + serialized_end=14880, ) @@ -5678,8 +5585,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=15037, - serialized_end=15128, + serialized_start=14882, + serialized_end=14973, ) _DRIVEWHEELSRESPONSE.fields_by_name['status'].message_type = anki__vector_dot_messaging_dot_response__status__pb2._RESPONSESTATUS @@ -5724,7 +5631,6 @@ _ROBOTOBSERVEDFACE.fields_by_name['right_eye'].message_type = _CLADPOINT _ROBOTOBSERVEDFACE.fields_by_name['nose'].message_type = _CLADPOINT _ROBOTOBSERVEDFACE.fields_by_name['mouth'].message_type = _CLADPOINT -_APPINTENTRESPONSE.fields_by_name['status'].message_type = anki__vector_dot_messaging_dot_response__status__pb2._RESPONSESTATUS _FACEENROLLMENTCOMPLETED.fields_by_name['result'].enum_type = _FACEENROLLMENTRESULT _CANCELFACEENROLLMENTRESPONSE.fields_by_name['status'].message_type = anki__vector_dot_messaging_dot_response__status__pb2._RESPONSESTATUS _REQUESTENROLLEDNAMESRESPONSE.fields_by_name['status'].message_type = anki__vector_dot_messaging_dot_response__status__pb2._RESPONSESTATUS @@ -5811,9 +5717,6 @@ DESCRIPTOR.message_types_by_name['CladRect'] = _CLADRECT DESCRIPTOR.message_types_by_name['RobotObservedFace'] = _ROBOTOBSERVEDFACE DESCRIPTOR.message_types_by_name['RobotChangedObservedFaceID'] = _ROBOTCHANGEDOBSERVEDFACEID -DESCRIPTOR.message_types_by_name['AppIntentRequest'] = _APPINTENTREQUEST -DESCRIPTOR.message_types_by_name['AppDisconnected'] = _APPDISCONNECTED -DESCRIPTOR.message_types_by_name['AppIntentResponse'] = _APPINTENTRESPONSE DESCRIPTOR.message_types_by_name['FaceEnrollmentCompleted'] = _FACEENROLLMENTCOMPLETED DESCRIPTOR.message_types_by_name['CancelFaceEnrollmentRequest'] = _CANCELFACEENROLLMENTREQUEST DESCRIPTOR.message_types_by_name['CancelFaceEnrollmentResponse'] = _CANCELFACEENROLLMENTRESPONSE @@ -6110,27 +6013,6 @@ )) _sym_db.RegisterMessage(RobotChangedObservedFaceID) -AppIntentRequest = _reflection.GeneratedProtocolMessageType('AppIntentRequest', (_message.Message,), dict( - DESCRIPTOR = _APPINTENTREQUEST, - __module__ = 'anki_vector.messaging.messages_pb2' - # @@protoc_insertion_point(class_scope:Anki.Vector.external_interface.AppIntentRequest) - )) -_sym_db.RegisterMessage(AppIntentRequest) - -AppDisconnected = _reflection.GeneratedProtocolMessageType('AppDisconnected', (_message.Message,), dict( - DESCRIPTOR = _APPDISCONNECTED, - __module__ = 'anki_vector.messaging.messages_pb2' - # @@protoc_insertion_point(class_scope:Anki.Vector.external_interface.AppDisconnected) - )) -_sym_db.RegisterMessage(AppDisconnected) - -AppIntentResponse = _reflection.GeneratedProtocolMessageType('AppIntentResponse', (_message.Message,), dict( - DESCRIPTOR = _APPINTENTRESPONSE, - __module__ = 'anki_vector.messaging.messages_pb2' - # @@protoc_insertion_point(class_scope:Anki.Vector.external_interface.AppIntentResponse) - )) -_sym_db.RegisterMessage(AppIntentResponse) - FaceEnrollmentCompleted = _reflection.GeneratedProtocolMessageType('FaceEnrollmentCompleted', (_message.Message,), dict( DESCRIPTOR = _FACEENROLLMENTCOMPLETED, __module__ = 'anki_vector.messaging.messages_pb2' diff --git a/anki_vector/messaging/response_status.proto b/anki_vector/messaging/response_status.proto index 3ac0fc3..f8a658f 100644 --- a/anki_vector/messaging/response_status.proto +++ b/anki_vector/messaging/response_status.proto @@ -18,15 +18,24 @@ syntax = "proto3"; package Anki.Vector.external_interface; +// A shared response message sent back as part of most requests. +// This will indicate the generic state of the request. message ResponseStatus { enum StatusCode { UNKNOWN = 0; - RESPONSE_RECEIVED = 1; // The message has completed as expected - REQUEST_PROCESSING = 2; // The message has been sent to the robot + // The message has completed as expected. + RESPONSE_RECEIVED = 1; + // The message has been sent to the robot. + REQUEST_PROCESSING = 2; + // The message has been handled successfully at the interface level. OK = 3; - FORBIDDEN = 100; // The user was not authorizied - NOT_FOUND = 101; // The requested attribute was not found - ERROR_UPDATE_IN_PROGRESS = 102; // Currently updating values from another call + // The user was not authorizied. + FORBIDDEN = 100; + // The requested attribute was not found. + NOT_FOUND = 101; + // Currently updating values from another call. + ERROR_UPDATE_IN_PROGRESS = 102; } + // The generic status code to give high-level insight into the progress of a given message. StatusCode code = 1; } diff --git a/anki_vector/messaging/settings.proto b/anki_vector/messaging/settings.proto index d3d35cf..36fc97e 100644 --- a/anki_vector/messaging/settings.proto +++ b/anki_vector/messaging/settings.proto @@ -19,17 +19,3 @@ syntax = "proto3"; package Anki.Vector.external_interface; -enum ApiVersion { - INVALID = 0; - LATEST = 1; -} - -enum Volume { - MUTE = 0; - LOW = 1; - MEDIUM_LOW = 2; - MEDIUM = 3; - MEDIUM_HIGH = 4; - HIGH = 5; -} - diff --git a/anki_vector/messaging/settings_pb2.py b/anki_vector/messaging/settings_pb2.py index f5dff10..b59b818 100644 --- a/anki_vector/messaging/settings_pb2.py +++ b/anki_vector/messaging/settings_pb2.py @@ -3,7 +3,6 @@ import sys _b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf.internal import enum_type_wrapper from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -20,83 +19,11 @@ name='anki_vector/messaging/settings.proto', package='Anki.Vector.external_interface', syntax='proto3', - serialized_pb=_b('\n$anki_vector/messaging/settings.proto\x12\x1e\x41nki.Vector.external_interface*%\n\nApiVersion\x12\x0b\n\x07INVALID\x10\x00\x12\n\n\x06LATEST\x10\x01*R\n\x06Volume\x12\x08\n\x04MUTE\x10\x00\x12\x07\n\x03LOW\x10\x01\x12\x0e\n\nMEDIUM_LOW\x10\x02\x12\n\n\x06MEDIUM\x10\x03\x12\x0f\n\x0bMEDIUM_HIGH\x10\x04\x12\x08\n\x04HIGH\x10\x05\x62\x06proto3') + serialized_pb=_b('\n$anki_vector/messaging/settings.proto\x12\x1e\x41nki.Vector.external_interfaceb\x06proto3') ) -_APIVERSION = _descriptor.EnumDescriptor( - name='ApiVersion', - full_name='Anki.Vector.external_interface.ApiVersion', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='INVALID', index=0, number=0, - options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='LATEST', index=1, number=1, - options=None, - type=None), - ], - containing_type=None, - options=None, - serialized_start=72, - serialized_end=109, -) -_sym_db.RegisterEnumDescriptor(_APIVERSION) - -ApiVersion = enum_type_wrapper.EnumTypeWrapper(_APIVERSION) -_VOLUME = _descriptor.EnumDescriptor( - name='Volume', - full_name='Anki.Vector.external_interface.Volume', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='MUTE', index=0, number=0, - options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='LOW', index=1, number=1, - options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MEDIUM_LOW', index=2, number=2, - options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MEDIUM', index=3, number=3, - options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MEDIUM_HIGH', index=4, number=4, - options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='HIGH', index=5, number=5, - options=None, - type=None), - ], - containing_type=None, - options=None, - serialized_start=111, - serialized_end=193, -) -_sym_db.RegisterEnumDescriptor(_VOLUME) - -Volume = enum_type_wrapper.EnumTypeWrapper(_VOLUME) -INVALID = 0 -LATEST = 1 -MUTE = 0 -LOW = 1 -MEDIUM_LOW = 2 -MEDIUM = 3 -MEDIUM_HIGH = 4 -HIGH = 5 -DESCRIPTOR.enum_types_by_name['ApiVersion'] = _APIVERSION -DESCRIPTOR.enum_types_by_name['Volume'] = _VOLUME _sym_db.RegisterFileDescriptor(DESCRIPTOR) diff --git a/anki_vector/messaging/shared.proto b/anki_vector/messaging/shared.proto index f8e130a..6fe3a60 100644 --- a/anki_vector/messaging/shared.proto +++ b/anki_vector/messaging/shared.proto @@ -56,6 +56,7 @@ message Event { PhotoTaken photo_taken = 9; RobotState robot_state = 10; CubeBattery cube_battery = 11; + // Used by Vector to verify the connection is still alive. KeepAlivePing keep_alive = 12; ConnectionResponse connection_response = 13; MirrorModeDisabled mirror_mode_disabled = 16; diff --git a/docs/source/api.rst b/docs/source/api.rst index eb2c643..37927d5 100644 --- a/docs/source/api.rst +++ b/docs/source/api.rst @@ -17,6 +17,7 @@ The API anki_vector.exceptions anki_vector.faces anki_vector.lights + anki_vector.messaging anki_vector.motors anki_vector.nav_map anki_vector.objects @@ -35,10 +36,10 @@ The API anki_vector.vision anki_vector.world - anki_vector.messaging.client - .. +For documentation about protobuf objects, please see :doc:`the protobuf documentation `. + ---- `Terms and Conditions `_ and `Privacy Policy `_ diff --git a/docs/source/proto.html b/docs/source/proto.html new file mode 100644 index 0000000..03fe3e4 --- /dev/null +++ b/docs/source/proto.html @@ -0,0 +1,8540 @@ + + + + + + + + + + +

Table of Contents

+ +
+ +
+ + + +
+

anki_vector/messaging/behavior.proto

Top +
+

+ + +

BehaviorControlRequest

+ Messages that can be sent to the behavior stream. Explicitly +requesting or releasing control. +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
control_releaseControlRelease

Release control of the behavior system back to Vector.

control_requestControlRequest

Request control of the behavior system for the SDK.

+

+ + + + +

BehaviorControlResponse

+ Responses from the behavior stream. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
control_granted_responseControlGrantedResponse

The SDK user is now free to directly control Vector.

control_lost_eventControlLostResponse

Control of the behavior system has been lost to a higher priority behavior.

keep_aliveKeepAlivePing

Used by Vector to verify the connection is still alive.

+

+ + + + +

ControlGrantedResponse

+ The SDK user is now free to run any actions and behaviors they like. +Until a ControlLostResponse is received, they are directly in control +of Vector's behavior system. +

+ + + + + +

ControlLostResponse

+ This informs the user that they lost control of the behavior system. +All direct actions will be unavailable via the sdk until control is regained. +Regaining control can be either through a call to ControlRequest, or +can be as a result of conditions passed to the original ControlRequest. +

+ + + + + +

ControlRelease

+ Tell the behavior stream to release control from the SDK. +The stream may stay alive, but Vector will be allowed to run +his normal behaviors. +

+ + + + + +

ControlRequest

+ Request control of the behavior system at a given priority. +Currently there is only one priority level. +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
priorityControlRequest.Priority

Where in the behavior tree the SDK code should be executed.

+

+ + + + + + +

ControlRequest.Priority

+ Where in the behavior tree the SDK code should be executed.

+ + + + + + + + + + + + + + + + + + + +
NameNumberDescription
UNKNOWN0

Unknown priority. Used for versions that don't understand old priority levels.

TOP_PRIORITY_AI20

Highest priority level. Directly under mandatory physical reactions.

+

+ + + + + + + +
+

anki_vector/messaging/response_status.proto

Top +
+

+ + +

ResponseStatus

+ A shared response message sent back as part of most requests. +This will indicate the generic state of the request. +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
codeResponseStatus.StatusCode

The generic status code to give high-level insight into the progress of a given message.

+

+ + + + + + +

ResponseStatus.StatusCode

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumberDescription
UNKNOWN0

RESPONSE_RECEIVED1

The message has completed as expected.

REQUEST_PROCESSING2

The message has been sent to the robot.

OK3

The message has been handled successfully at the interface level.

FORBIDDEN100

The user was not authorizied.

NOT_FOUND101

The requested attribute was not found.

ERROR_UPDATE_IN_PROGRESS102

Currently updating values from another call.

+

+ + + + + + + +
+

anki_vector/messaging/messages.proto

Top +
+

+ + +

AccelData

+ All values are in mm/s^2. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
xfloat

yfloat

zfloat

+

+ + + + +

ActionResult

+ The possible results of running an action. +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
codeActionResult.ActionResultCode

+

+ + + + +

Animation

+ An animation object. +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
namestring

The name of a given animation.

+

+ + + + +

AudioChunk

+ One frame of audio data and associated metadata +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
robot_time_stampuint32

robot time at the final chunk of this audio sample group transmission

group_iduint32

the id of this sample transmission group

chunk_iduint32

the current batched chunk id within in this group id

audio_chunk_countuint32

number of chunks batched within this group id

signal_powerbytes

mono audio amplitude samples

direction_strengthsbytes

histogram data of which directions this audio chunk came from

source_directionuint32

0-11, with 12 representing "invalid"

source_confidenceuint32

accuracy of the calculated source_direction

noise_floor_poweruint32

power value, convert to db with log_10(value)

+

+ + + + +

AudioFeedRequest

+ Request the robot to send audio data +

+ + + + + +

AudioFeedResponse

+ Streamed audio data from the robot +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
robot_time_stampuint32

robot time at the transmission of this audio sample group

group_iduint32

the index of this audio feed response

signal_powerbytes

mono audio amplitude samples

direction_strengthsbytes

histogram data of which directions this audio chunk came from

source_directionuint32

0-11, with 12 representing "invalid"

source_confidenceuint32

accuracy of the calculated source_direction

noise_floor_poweruint32

power value, convert to db with log_10(value)

+

+ + + + +

AudioSendModeChanged

+ Event sent when the robot changes the mode it's processing and sending audio +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
modeAudioProcessingMode

+

+ + + + +

AudioSendModeRequest

+ Request how the robot should process and send audio +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
modeAudioProcessingMode

+

+ + + + +

BatteryStateRequest

+ +

+ + + + + +

BatteryStateResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

battery_levelBatteryLevel

battery_voltsfloat

is_chargingbool

is_on_charger_platformbool

suggested_charger_secfloat

cube_batteryCubeBattery

+

+ + + + +

CameraFeedRequest

+ +

+ + + + + +

CameraFeedResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
frame_time_stampuint32

image_iduint32

image_encodingImageChunk.ImageEncoding

databytes

+

+ + + + +

CancelFaceEnrollmentRequest

+ +

+ + + + + +

CancelFaceEnrollmentResponse

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

+

+ + + + +

CladPoint

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
xfloat

yfloat

+

+ + + + +

CladRect

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
x_top_leftfloat

y_top_leftfloat

widthfloat

heightfloat

+

+ + + + +

CubeBattery

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
levelCubeBattery.CubeBatteryLevel

factory_idstring

battery_voltsfloat

time_since_last_reading_secfloat

+

+ + + + +

DeletePhotoRequest

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
photo_iduint32

+

+ + + + +

DeletePhotoResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

successbool

+

+ + + + +

DisplayFaceImageRGBRequest

+ See DisplayFaceImageRGB rpc for more details. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
face_databytes

The image to render.

duration_msuint32

How long to display the image on the face.

interrupt_runningbool

If this image should overwrite any current images on the face.

+

+ + + + +

DisplayFaceImageRGBResponse

+ See DisplayFaceImageRGB rpc for more details. +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

A generic status.

+

+ + + + +

DockWithCubeRequest

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
object_idint32

distance_from_marker_mmfloat

approach_angle_radfloat

alignment_typeAlignmentType

use_approach_anglebool

use_pre_dock_posebool

motion_profPathMotionProfile

id_tagint32

num_retriesint32

+

+ + + + +

DockWithCubeResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

resultActionResult

+

+ + + + +

DriveOffChargerRequest

+ +

+ + + + + +

DriveOffChargerResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

resultBehaviorResults

+

+ + + + +

DriveOnChargerRequest

+ +

+ + + + + +

DriveOnChargerResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

resultBehaviorResults

+

+ + + + +

DriveStraightRequest

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
speed_mmpsfloat

Speed should be positive

dist_mmfloat

Use +ve for forward, -ve for backward

should_play_animationbool

id_tagint32

num_retriesint32

+

+ + + + +

DriveStraightResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

resultActionResult

+

+ + + + +

DriveWheelsRequest

+ See the DriveWheels rpc for more details. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
left_wheel_mmpsfloat

right_wheel_mmpsfloat

left_wheel_mmps2float

right_wheel_mmps2float

+

+ + + + +

DriveWheelsResponse

+ See the DriveWheels rpc for more details. +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

A generic status.

+

+ + + + +

EnableFaceDetectionRequest

+ When enabled, RobotObservedFace messages will be produced +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
enablebool

enable_smile_detectionbool

enable_expression_estimationbool

enable_blink_detectionbool

enable_gaze_detectionbool

+

+ + + + +

EnableFaceDetectionResponse

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

+

+ + + + +

EnableImageStreamingRequest

+ Toggle image streaming at the given resolution +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
enablebool

+

+ + + + +

EnableImageStreamingResponse

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

+

+ + + + +

EnableMarkerDetectionRequest

+ When enabled, RobotObservedObject messages will be produced +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
enablebool

+

+ + + + +

EnableMarkerDetectionResponse

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

+

+ + + + +

EnableMirrorModeRequest

+ When enabled, camera feed will appear on the robot's face, along with any +detections that are enabled from above messages +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
enablebool

+

+ + + + +

EnableMirrorModeResponse

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

+

+ + + + +

EnableMotionDetectionRequest

+ When enabled, RobotObservedMotion messages will be produced +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
enablebool

+

+ + + + +

EnableMotionDetectionResponse

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

+

+ + + + +

EraseAllEnrolledFacesRequest

+ +

+ + + + + +

EraseAllEnrolledFacesResponse

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

+

+ + + + +

EraseEnrolledFaceByIDRequest

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
face_idint32

+

+ + + + +

EraseEnrolledFaceByIDResponse

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

+

+ + + + +

FaceEnrollmentCompleted

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
resultFaceEnrollmentResult

face_idint32

namestring

+

+ + + + +

GoToPoseRequest

+ GotoPose +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
x_mmfloat

y_mmfloat

radfloat

motion_profPathMotionProfile

id_tagint32

num_retriesint32

+

+ + + + +

GoToPoseResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

resultActionResult

+

+ + + + +

GyroData

+ All values are in rad/s. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
xfloat

yfloat

zfloat

+

+ + + + +

ImageChunk

+ One frame of image data and associated metadata +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
frame_time_stampuint32

image_iduint32

widthuint32

heightuint32

image_encodingImageChunk.ImageEncoding

display_indexuint32

image_chunk_countuint32

chunk_iduint32

databytes

+

+ + + + +

KeepAlivePing

+ A null message used by streams to verify that the client is +still connected. +

+ + + + + +

ListAnimationsRequest

+ See ListAnimations rpc for more details. +

+ + + + + +

ListAnimationsResponse

+ See ListAnimations rpc for more details. +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

A generic status.

animation_namesAnimation repeated

The animations that Vector knows.

+

+ + + + +

LoadedKnownFace

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
seconds_since_first_enrolledint64

seconds_since_last_updatedint64

seconds_since_last_seenint64

last_seen_seconds_since_epochint64

face_idint32

namestring

+

+ + + + +

MeetVictorFaceScanComplete

+ +

+ + + + + +

MeetVictorFaceScanStarted

+ +

+ + + + + +

MirrorModeDisabled

+ Sent if MirrorMode (camera feed displayed on face) is currently enabled but is automatically +being disabled +

+ + + + + +

MoveHeadRequest

+ See the MoveHead rpc for more details. +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
speed_rad_per_secfloat

+

+ + + + +

MoveHeadResponse

+ See the MoveHead rpc for more details. +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

A generic status.

+

+ + + + +

MoveLiftRequest

+ See the MoveLift rpc for more details. +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
speed_rad_per_secfloat

+

+ + + + +

MoveLiftResponse

+ See the MoveLift rpc for more details. +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

A generic status.

+

+ + + + +

NetworkStateRequest

+ +

+ + + + + +

NetworkStateResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

network_statsNetworkStats

+

+ + + + +

NetworkStats

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
g_net_stat1_num_connectionsint32

g_net_stat2_latency_avgfloat

g_net_stat3_latency_sdfloat

g_net_stat4_latency_minfloat

g_net_stat5_latency_maxfloat

g_net_stat6_ping_arrived_pcfloat

g_net_stat7_ext_queued_avg_msfloat

g_net_stat8_ext_queued_min_msfloat

g_net_stat9_ext_queued_max_msfloat

g_net_stata_queued_avg_msfloat

g_net_statb_queued_min_msfloat

g_net_statc_queued_max_msfloat

+

+ + + + +

PathMotionProfile

+ Struct containing all the information relevant to how a +path should be modified or traversed. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
speed_mmpsfloat

accel_mmps2float

decel_mmps2float

point_turn_speed_rad_per_secfloat

point_turn_accel_rad_per_sec2float

point_turn_decel_rad_per_sec2float

dock_speed_mmpsfloat

dock_accel_mmps2float

dock_decel_mmps2float

reverse_speed_mmpsfloat

is_custombool

+

+ + + + +

PhotoInfo

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
photo_iduint32

timestamp_utcuint32

photo_copied_to_appbool

thumb_copied_to_appbool

+

+ + + + +

PhotoPathMessage

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
successbool

full_pathstring

+

+ + + + +

PhotoRequest

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
photo_iduint32

+

+ + + + +

PhotoResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

successbool

imagebytes

+

+ + + + +

PhotoTaken

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
photo_iduint32

+

+ + + + +

PhotosInfoRequest

+ +

+ + + + + +

PhotosInfoResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

photo_infosPhotoInfo repeated

+

+ + + + +

PlayAnimationRequest

+ See PlayAnimation rpc for more details. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
animationAnimation

The animation to play.

loopsuint32

The number of times to play the animation in a row.

ignore_body_trackbool

Ignore any movement of Vector's body in the given animation.

ignore_head_trackbool

Ignore any movement of Vector's head in the given animation.

ignore_lift_trackbool

Ignore any movement of Vector's lift in the given animation.

+

+ + + + +

PlayAnimationResponse

+ See PlayAnimation rpc for more details. +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

A generic status.

resultBehaviorResults

Information on whether the animation played successfully.

+

+ + + + +

PoseStruct

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
xfloat

Translation

yfloat

zfloat

q0float

Rotation quaternion

q1float

q2float

q3float

origin_iduint32

Which coordinate frame this pose is in (0 for none or unknown)

+

+ + + + +

ProxData

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
distance_mmuint32

signal_qualityfloat

is_in_valid_rangebool

Distance is within valid range

is_valid_signal_qualitybool

Signal quality is sufficiently strong to trust that something was detected

is_lift_in_fovbool

Lift (or object on lift) is occluding the sensor

is_too_pitchedbool

Robot is too far pitched up or down

+

+ + + + +

RequestEnrolledNamesRequest

+ +

+ + + + + +

RequestEnrolledNamesResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

facesLoadedKnownFace repeated

+

+ + + + +

RobotChangedObservedFaceID

+ RobotChangedObservedFaceID + This generally happens when a tracked face (negative ID) is recognized and + receives a positive ID or when face records get merged +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
old_idint32

new_idint32

+

+ + + + +

RobotObservedFace

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
face_idint32

negative: tracked but not recognized; positive: recognized face

timestampuint32

posePoseStruct

img_rectCladRect

position in image coords

namestring

Empty if none assigned yet

expressionFacialExpression

expression_valuesuint32 repeated

Individual expression values histogram, sums to 100 (Exception: all zero if expression=Unknown)

left_eyeCladPoint repeated

Face landmarks

right_eyeCladPoint repeated

noseCladPoint repeated

mouthCladPoint repeated

+

+ + + + +

RobotRenamedEnrolledFace

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
face_idint32

namestring

+

+ + + + +

RobotState

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
posePoseStruct

pose_angle_radfloat

pose_pitch_radfloat

left_wheel_speed_mmpsfloat

right_wheel_speed_mmpsfloat

head_angle_radfloat

lift_height_mmfloat

accelAccelData

gyroGyroData

carrying_object_idint32

carrying_object_on_top_idint32

Not supported by engine

head_tracking_object_idint32

localized_to_object_idint32

last_image_time_stampuint32

statusuint32

prox_dataProxData

touch_dataTouchData

+

+ + + + +

SDKInitializationRequest

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
sdk_module_versionstring

python_versionstring

python_implementationstring

os_versionstring

cpu_versionstring

+

+ + + + +

SDKInitializationResponse

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

+

+ + + + +

SayTextRequest

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
textstring

use_vector_voicebool

duration_scalarfloat

+

+ + + + +

SayTextResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

stateSayTextResponse.UtteranceState

+

+ + + + +

SetEyeColorRequest

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
huefloat

saturationfloat

+

+ + + + +

SetEyeColorResponse

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

+

+ + + + +

SetFaceToEnrollRequest

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
namestring

observed_idint32

The ID of a specific observed face to enroll (0 for next one we see)

save_idint32

The ID of an existing face to merge final enrollment into (0 for none,

save_to_robotbool

Save to robot's NVStorage when done (NOTE: will (re)save everyone enrolled!)

say_namebool

Play say-name/celebration animations on success before completing

use_musicbool

Starts special music during say-name animations (will leave music playing!)

+

+ + + + +

SetFaceToEnrollResponse

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

+

+ + + + +

SetHeadAngleRequest

+ SetHeadAngle +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
angle_radfloat

max_speed_rad_per_secfloat

accel_rad_per_sec2float

duration_secfloat

id_tagint32

num_retriesint32

+

+ + + + +

SetHeadAngleResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

resultActionResult

+

+ + + + +

SetLiftHeightRequest

+ SetLiftHeight +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
height_mmfloat

max_speed_rad_per_secfloat

accel_rad_per_sec2float

duration_secfloat

id_tagint32

num_retriesint32

+

+ + + + +

SetLiftHeightResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

resultActionResult

+

+ + + + +

Status

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
meet_victor_face_scan_startedMeetVictorFaceScanStarted

meet_victor_face_scan_completeMeetVictorFaceScanComplete

face_enrollment_completedFaceEnrollmentCompleted

+

+ + + + +

StimulationInfo

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
emotion_eventsstring repeated

may be empty

valuefloat

velocityfloat

value per second

accelfloat

value per sec per sec

value_before_eventfloat

matches value if there were no emotion events

min_valuefloat

max_valuefloat

+

+ + + + +

ThumbnailPathMessage

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
successbool

full_pathstring

+

+ + + + +

ThumbnailRequest

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
photo_iduint32

+

+ + + + +

ThumbnailResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

successbool

imagebytes

+

+ + + + +

TimeStampedStatus

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusStatus

timestamp_utcuint32

+

+ + + + +

TouchData

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
raw_touch_valueuint32

Raw input from the touch sensor

is_being_touchedbool

Robot's context aware evaluation of whether it currently is or isn't being touched

+

+ + + + +

TurnInPlaceRequest

+ TurnInPlace +If isAbsolute == 0, turns the specified number of radians, relative to the robot's current heading* +If isAbsolute != 0, turns to the specified absolute orientation. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
angle_radfloat

relative mode: positive turns left negative turns right

speed_rad_per_secfloat

accel_rad_per_sec2float

tol_radfloat

This should be no smaller than POINT_TURN_ANGLE_TOL (DEG_TO_RAD(2.f)).

is_absoluteuint32

Smaller values are ignored except 0 which is interpreted to mean +default tolerance of POINT_TURN_ANGLE_TOL. + +0: angle_rad is relative to current orientation, 1: angle_rad is absolute angle to turn to

id_tagint32

num_retriesint32

+

+ + + + +

TurnInPlaceResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

resultActionResult

+

+ + + + +

UpdateEnrolledFaceByIDRequest

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
face_idint32

old_namestring

new_namestring

+

+ + + + +

UpdateEnrolledFaceByIDResponse

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

+

+ + + + +

VersionStateRequest

+ +

+ + + + + +

VersionStateResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

os_versionstring

engine_build_idstring

+

+ + + + +

VisionModesAutoDisabled

+ Sent when vision modes are automatically disabled due to the SDK no longer having control +of the robot +

+ + + + + +

WakeWord

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
wake_word_beginWakeWordBegin

wake_word_endWakeWordEnd

+

+ + + + +

WakeWordBegin

+ +

+ + + + + +

WakeWordEnd

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
intent_heardbool

intent_jsonstring

+

+ + + + + + +

ActionResult.ActionResultCode

+ The possible results of running an action.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumberDescription
ACTION_RESULT_SUCCESS0

ACTION_RESULT_RUNNING16777216

ACTION_RESULT_CANCELLED_WHILE_RUNNING33554432

NOT_STARTED33554433

ABORT50331648

ANIM_ABORTED50331649

BAD_MARKER50331650

BAD_MESSAGE_TAG50331651

BAD_OBJECT50331652

BAD_POSE50331653

BAD_TAG50331654

CHARGER_UNPLUGGED_ABORT50331655

CLIFF_ALIGN_FAILED_TIMEOUT50331656

CLIFF_ALIGN_FAILED_NO_TURNING50331657

CLIFF_ALIGN_FAILED_OVER_TURNING50331658

CLIFF_ALIGN_FAILED_NO_WHITE50331659

CLIFF_ALIGN_FAILED_STOPPED50331660

FAILED_SETTING_CALIBRATION50331661

FOLLOWING_PATH_BUT_NOT_TRAVERSING50331662

INTERRUPTED50331663

INVALID_OFF_TREADS_STATE50331664

MISMATCHED_UP_AXIS50331665

NO_ANIM_NAME50331666

NO_DISTANCE_SET50331667

NO_FACE50331668

NO_GOAL_SET50331669

NO_PREACTION_POSES50331670

NOT_CARRYING_OBJECT_ABORT50331671

NOT_ON_CHARGER_ABORT50331672

NULL_SUBACTION50331673

PATH_PLANNING_FAILED_ABORT50331674

PICKUP_OBJECT_UNEXPECTEDLY_MOVING50331675

SEND_MESSAGE_TO_ROBOT_FAILED50331676

STILL_CARRYING_OBJECT50331677

TIMEOUT50331678

TRACKS_LOCKED50331679

UNEXPECTED_DOCK_ACTION50331680

UNKNOWN_TOOL_CODE50331681

UPDATE_DERIVED_FAILED50331682

VISUAL_OBSERVATION_FAILED50331683

SHOULDNT_DRIVE_ON_CHARGER50331684

RETRY67108864

DID_NOT_REACH_PREACTION_POSE67108865

FAILED_TRAVERSING_PATH67108866

LAST_PICK_AND_PLACE_FAILED67108867

MOTOR_STOPPED_MAKING_PROGRESS67108868

NOT_CARRYING_OBJECT_RETRY67108869

NOT_ON_CHARGER_RETRY67108870

PATH_PLANNING_FAILED_RETRY67108871

PLACEMENT_GOAL_NOT_FREE67108872

PICKUP_OBJECT_UNEXPECTEDLY_NOT_MOVING67108873

STILL_ON_CHARGER67108874

UNEXPECTED_PITCH_ANGLE67108875

+

+ +

ActionTagConstants

+

+ + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumberDescription
INVALID_SDK_TAG0

FIRST_SDK_TAG2000001

LAST_SDK_TAG3000000

+

+ +

AlignmentType

+ This is a uint8 in CLAD

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumberDescription
ALIGNMENT_TYPE_UNKNOWN0

ALIGNMENT_TYPE_LIFT_FINGER1

Fingers aligned with object

ALIGNMENT_TYPE_LIFT_PLATE2

Lift plate aligned with object

ALIGNMENT_TYPE_BODY3

Front of body aligned with object

ALIGNMENT_TYPE_CUSTOM4

+

+ +

AudioConstants

+ Constants associated with the audio feed

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumberDescription
AUDIO_CONSTANTS_NULL0

error value

MIC_DETECTION_DIRECTIONS12

The number of audio directions the four microphones can isolate

SAMPLE_COUNTS_PER_ENGINE_MESSAGE160

The number of audio samples in each internal audio chunk

SAMPLE_COUNTS_PER_SDK_MESSAGE1600

The number of audio samples delivered in each audio feed response

MICROPHONE_SAMPLE_RATE15625

The sampling rate victor's microphones record at

PROCESSED_SAMPLE_RATE16000

The sampling rate the robot processes audio at

+

+ +

AudioProcessingMode

+ The robot can process audio in a variety of ways

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumberDescription
AUDIO_UNKNOWN0

error value

AUDIO_OFF1

deactivates audio SDK mode

AUDIO_FAST_MODE2

unprocessed single microphone data - most performant on robot

AUDIO_DIRECTIONAL_MODE3

beamforming support for focusing on specific direction - sounds cleanest

AUDIO_VOICE_DETECT_MODE4

multi-microphone non-beamforming - best for voice detection programs

+

+ +

BatteryLevel

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumberDescription
BATTERY_LEVEL_UNKNOWN0

BATTERY_LEVEL_LOW1

BATTERY_LEVEL_NOMINAL2

BATTERY_LEVEL_FULL3

+

+ +

BehaviorResults

+

+ + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumberDescription
BEHAVIOR_INVALID_STATE0

BEHAVIOR_COMPLETE_STATE1

BEHAVIOR_WONT_ACTIVATE_STATE2

+

+ +

CubeBattery.CubeBatteryLevel

+

+ + + + + + + + + + + + + + + + + + + +
NameNumberDescription
Low0

Normal1

+

+ +

FaceEnrollmentResult

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumberDescription
SUCCESS0

SAW_WRONG_FACE1

Failures:

SAW_MULTIPLE_FACES2

TIMED_OUT3

SAVE_FAILED4

INCOMPLETE5

CANCELLED6

NAME_IN_USE7

NAMED_STORAGE_FULL8

UNKNOWN_FAILURE9

+

+ +

FacialExpression

+ This is an int8 on the clad side. +Proto field names are prefixed with "EXPRESSION_"

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumberDescription
EXPRESSION_UNKNOWN0

e.g. expression estimation disabled.

EXPRESSION_NEUTRAL1

EXPRESSION_HAPPINESS2

EXPRESSION_SURPRISE3

EXPRESSION_ANGER4

EXPRESSION_SADNESS5

EXPRESSION_COUNT5

Clad does not account for "Unknown" in the count.

+

+ +

ImageChunk.ImageEncoding

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumberDescription
NONE_IMAGE_ENCODING0

RAW_GRAY1

no compression

RAW_RGB2

no compression, just [RGBRGBRG...]

YUYV3

YUV420SP4

BAYER5

JPEG_GRAY6

JPEG_COLOR7

JPEG_COLOR_HALF_WIDTH8

JPEG_MINIMIZED_GRAY9

Minimized grayscale JPEG - no header, no footer, no byte stuffing

JPEG_MINIMIZED_COLOR10

Minimized grayscale JPEG - no header, no footer, no byte stuffing, with added color data

+

+ +

RobotStatus

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumberDescription
ROBOT_STATUS_NONE0

ROBOT_STATUS_IS_MOVING1

ROBOT_STATUS_IS_CARRYING_BLOCK2

ROBOT_STATUS_IS_PICKING_OR_PLACING4

ROBOT_STATUS_IS_PICKED_UP8

ROBOT_STATUS_IS_BUTTON_PRESSED16

ROBOT_STATUS_IS_FALLING32

ROBOT_STATUS_IS_ANIMATING64

ROBOT_STATUS_IS_PATHING128

ROBOT_STATUS_LIFT_IN_POS256

ROBOT_STATUS_HEAD_IN_POS512

ROBOT_STATUS_CALM_POWER_MODE1024

ROBOT_STATUS_IS_ON_CHARGER4096

ROBOT_STATUS_IS_CHARGING8192

ROBOT_STATUS_CLIFF_DETECTED16384

ROBOT_STATUS_ARE_WHEELS_MOVING32768

ROBOT_STATUS_IS_BEING_HELD65536

ROBOT_STATUS_IS_MOTION_DETECTED131072

+

+ +

SayTextResponse.UtteranceState

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumberDescription
INVALID0

GENERATING1

READY2

PLAYING3

FINISHED4

+

+ + + + + + + +
+

anki_vector/messaging/nav_map.proto

Top +
+

+ + +

NavMapFeedRequest

+ Requests nav map data from the robot at a specified maximum update frequency. +Responses in the nav map stream may be sent less frequently if the robot does +not consider there to be relevant new information. +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
frequencyfloat

+

+ + + + +

NavMapFeedResponse

+ A full nav map sent from the robot. It contains an origin_id that +which can be compared against the robot's current origin_id, general +info about the map, and a collection of quads representing the map's +content. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
origin_iduint32

map_infoNavMapInfo

quad_infosNavMapQuadInfo repeated

+

+ + + + +

NavMapInfo

+ General information about the nav map as a whole. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
root_depthint32

root_size_mmfloat

root_center_xfloat

root_center_yfloat

root_center_zfloat

+

+ + + + +

NavMapQuadInfo

+ An individual sample of vector's nav map. This quad's size will vary and +depends on the resolution the map requires to effectively identify +boundaries in the environment. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
contentNavNodeContentType

depthuint32

color_rgbauint32

+

+ + + + + + +

NavNodeContentType

+ Every tile in the nav map will be tagged with a content key referring to +the different environmental elements that Vector can identify.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumberDescription
NAV_NODE_UNKNOWN0

NAV_NODE_CLEAR_OF_OBSTACLE1

NAV_NODE_CLEAR_OF_CLIFF2

NAV_NODE_OBSTACLE_CUBE3

NAV_NODE_OBSTACLE_PROXIMITY4

NAV_NODE_OBSTACLE_PROXIMITY_EXPLORED5

NAV_NODE_OBSTACLE_UNRECOGNIZED6

NAV_NODE_CLIFF7

NAV_NODE_INTERESTING_EDGE8

NAV_NODE_NON_INTERESTING_EDGE9

+

+ + + + + + + +
+

anki_vector/messaging/external_interface.proto

Top +
+

+ + + + + + + + +

ExternalInterface

+ The grpc-defined connection between the SDK and Anki's Vector robot.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method NameDescription
ProtocolVersion

Checks the supported protocol version by passing in the client version and +minimum host version and receiving a response to see whether the versions are supported.

SDKInitialization

SDK-only message to pass version info for device OS, Python version, etc.

DriveWheels

Sets the speed and acceleration for Vector's wheel motors.

PlayAnimation

Requests that Vector play an animation.

ListAnimations

Constructs and returns a list of animations.

MoveHead

Moves Vector's head.

MoveLift

Moves Vector's lift.

DisplayFaceImageRGB

Sets screen (Vector's face) to a solid color.

EventStream

Streaming events endpoint

BehaviorControl

Integrate with and acquire control of Vector's AI system.

AssumeBehaviorControl

Acquire control of Vector's AI system.

CancelFaceEnrollment

RequestEnrolledNames

Get a list of names and their IDs.

UpdateEnrolledFaceByID

Update the name enrolled for a given face.

EraseEnrolledFaceByID

Erase the enrollment (name) record for the face with this ID.

EraseAllEnrolledFaces

Erase the enrollment (name) records for all faces.

SetFaceToEnroll

EnableMarkerDetection

EnableFaceDetection

EnableMotionDetection

EnableMirrorMode

EnableImageStreaming

GoToPose

Tells Vector to drive to the specified pose and orientation.

DockWithCube

Tells Vector to dock with a light cube with a given approach angle and distance.

DriveOffCharger

Drive Vector off the charger.

DriveOnCharger

Drive Vector onto the charger.

PhotosInfo

Get the photos info.

Photo

Get a photo by ID.

Thumbnail

Get a thumbnail by ID.

DeletePhoto

Delete a photo by ID.

DriveStraight

Tells Vector to drive in a straight line.

TurnInPlace

Turn the robot around its current position.

SetHeadAngle

Tell Vector's head to move to a given angle.

SetLiftHeight

Tell Vector's lift to move to a given height.

UserAuthentication

BatteryState

Check the current state of the battery.

VersionState

Get the versioning information for Vector.

NetworkState

Get the network information for Vector.

SayText

Make Vector speak text.

ConnectCube

Attempt to connect to a cube. If a cube is currently connected, +this will do nothing.

DisconnectCube

Requests a disconnection from the currently connected cube.

CubesAvailable

FlashCubeLights

Signal a connected cube to flash its lights using the default cube +flash animation.

ForgetPreferredCube

Forget the robot's preferred cube. This will cause the robot to +connect to the cube with the highest RSSI (signal strength) next +time a connection is requested. Saves this preference to disk. +The next cube that the robot connects to will become its +preferred cube.

SetPreferredCube

Set the robot's preferred cube and save it to disk. The robot +will always attempt to connect to this cube if it is available. +This is only used in simulation for now.

DeleteCustomObjects

Causes the robot to forget about custom objects it currently knows about.

CreateFixedCustomObject

Creates a permanent custom object instance in the robot's world, with no connection to the vision system.

DefineCustomObject

Creates a custom object with distinct custom marker(s).

SetCubeLights

Set each of the lights on the currently connected cube based on two +rgb values each and timing data for how to transition between them.

AudioFeed

Request an audio feed from the robot.

CameraFeed

Request a camera feed from the robot.

SetEyeColor

Set Vector's eye color.

NavMapFeed

Stream navigation map data.

+

+ + + +
+

anki_vector/messaging/shared.proto

Top +
+

+ + +

ConnectionResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

is_primarybool

+

+ + + + +

Event

+ Messages originating from the engine +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
time_stamped_statusTimeStampedStatus

wake_wordWakeWord

robot_observed_faceRobotObservedFace

robot_changed_observed_face_idRobotChangedObservedFaceID

object_eventObjectEvent

stimulation_infoStimulationInfo

photo_takenPhotoTaken

robot_stateRobotState

cube_batteryCubeBattery

keep_aliveKeepAlivePing

Used by Vector to verify the connection is still alive.

connection_responseConnectionResponse

mirror_mode_disabledMirrorModeDisabled

vision_modes_auto_disabledVisionModesAutoDisabled

+

+ + + + +

EventRequest

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
white_listFilterList

black_listFilterList

connection_idstring

+

+ + + + +

EventResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

eventEvent

+

+ + + + +

FilterList

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
liststring repeated

+

+ + + + +

ProtocolVersionRequest

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
client_versionint64

min_host_versionint64

+

+ + + + +

ProtocolVersionResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
resultProtocolVersionResponse.Result

host_versionint64

+

+ + + + +

UserAuthenticationRequest

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
user_session_idbytes

client_namebytes

+

+ + + + +

UserAuthenticationResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

codeUserAuthenticationResponse.Code

client_token_guidbytes

+

+ + + + + + +

ProtocolVersionResponse.Result

+

+ + + + + + + + + + + + + + + + + + + +
NameNumberDescription
UNSUPPORTED0

SUCCESS1

+

+ +

UserAuthenticationResponse.Code

+

+ + + + + + + + + + + + + + + + + + + +
NameNumberDescription
UNAUTHORIZED0

AUTHORIZED1

+

+ + + + + + + +
+

anki_vector/messaging/extensions.proto

Top +
+

+ + + + + + +

File-level Extensions

+ + + + + + + + + + + + + + + +
ExtensionTypeBaseNumberDescription
streamedbool.google.protobuf.MessageOptions60000

+

+ + + + + +
+

anki_vector/messaging/cube.proto

Top +
+

+ + +

ConnectCubeRequest

+ Attempt to connect to a cube. If a cube is currently connected, +this will do nothing. +

+ + + + + +

ConnectCubeResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

successbool

object_iduint32

factory_idstring

+

+ + + + +

CreateFixedCustomObjectRequest

+ Creates a CustomObject at the specific pose with no markers associated with it +Since this object has no markers with which to be observed, it will remain in the +specified pose as an obstacle forever (or until deleted with a deletion message above) +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
posePoseStruct

x_size_mmfloat

y_size_mmfloat

z_size_mmfloat

+

+ + + + +

CreateFixedCustomObjectResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

object_iduint32

+

+ + + + +

CubeConnectionLost

+ Indicates that a the connection subscribed through ConnectCube has +been lost. +

+ + + + + +

CubesAvailableRequest

+ +

+ + + + + +

CubesAvailableResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

factory_idsstring repeated

+

+ + + + +

CustomBoxDefinition

+ Defines a custom object of the given size with the given markers centered on each side +If isUnique=true, there is guaranteed to be no more than one object of this type present in the world +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
marker_frontCustomObjectMarker

marker_backCustomObjectMarker

marker_topCustomObjectMarker

marker_bottomCustomObjectMarker

marker_leftCustomObjectMarker

marker_rightCustomObjectMarker

x_size_mmfloat

y_size_mmfloat

z_size_mmfloat

marker_width_mmfloat

marker_height_mmfloat

+

+ + + + +

CustomCubeDefinition

+ Defines a custom cube of the given size. The cube will have the same marker centered on all faces. +If isUnique=true, there is guaranteed to be no more than one cube of this type present in the world at a time. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
markerCustomObjectMarker

size_mmfloat

marker_width_mmfloat

marker_height_mmfloat

+

+ + + + +

CustomWallDefinition

+ Defines a custom wall of the given height and width, with the same marker centered on both sides (front and back). +The wall's thickness is assumed to be 1cm (and thus there are no markers on its left, right, top, or bottom) +If isUnique=true, there is guaranteed to be no more than one wall of this type present in the world at a time. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
markerCustomObjectMarker

width_mmfloat

height_mmfloat

marker_width_mmfloat

marker_height_mmfloat

+

+ + + + +

DefineCustomObjectRequest

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
custom_typeCustomType

is_uniquebool

custom_boxCustomBoxDefinition

custom_cubeCustomCubeDefinition

custom_wallCustomWallDefinition

+

+ + + + +

DefineCustomObjectResponse

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

successbool

+

+ + + + +

DeleteCustomObjectsRequest

+ Deletes all custom objects matching a given deletion mode. +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
modeCustomObjectDeletionMode

+

+ + + + +

DeleteCustomObjectsResponse

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

+

+ + + + +

DisconnectCubeRequest

+ Requests a disconnection from the currently connected cube. +

+ + + + + +

DisconnectCubeResponse

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

+

+ + + + +

FlashCubeLightsRequest

+ Plays the default cube connection animation on the currently +connected cube's lights. This is intended for app level user +surfacing of cube connectivity, not for sdk cube light control. +

+ + + + + +

FlashCubeLightsResponse

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

+

+ + + + +

ForgetPreferredCubeRequest

+ Forget the robot's preferred cube. This will cause the robot to +connect to the cube with the highest RSSI (signal strength) next +time a connection is requested. Saves this preference to disk. +The next cube that the robot connects to will become its +preferred cube. +

+ + + + + +

ForgetPreferredCubeResponse

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

+

+ + + + +

ObjectAvailable

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
factory_idstring

+

+ + + + +

ObjectConnectionState

+ Indicates that a cube has connected or disconnected to the robot. +This message will be sent for any connects or disconnects regardless +of whether it originated from us or underlying robot behavior. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
object_iduint32

factory_idstring

object_typeObjectType

connectedbool

+

+ + + + +

ObjectEvent

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
object_availableObjectAvailable

object_connection_stateObjectConnectionState

object_movedObjectMoved

object_stopped_movingObjectStoppedMoving

object_up_axis_changedObjectUpAxisChanged

object_tappedObjectTapped

robot_observed_objectRobotObservedObject

cube_connection_lostCubeConnectionLost

+

+ + + + +

ObjectMoved

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
timestampuint32

object_iduint32

+

+ + + + +

ObjectStoppedMoving

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
timestampuint32

object_iduint32

+

+ + + + +

ObjectTapped

+ +

+ + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
timestampuint32

object_iduint32

+

+ + + + +

ObjectUpAxisChanged

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
timestampuint32

object_iduint32

up_axisUpAxis

+

+ + + + +

RobotObservedObject

+ RobotObservedObject for signaling that an object + with specified ID/Type/Family was seen at a particular location in the image + and the world +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
timestampuint32

object_familyObjectFamily

object_typeObjectType

object_idint32

signed to match U2G::PickAndPlaceObject which has the option to have objectID<0

img_rectCladRect

position in image coords

posePoseStruct

top_face_orientation_radfloat

absolute orienation of top face, iff isActive==true

is_activeuint32

+

+ + + + +

SetCubeLightsRequest

+ Sets each LED on victor's cube. Two states are specified +designated 'on' and 'off', each with a color, duration, +and state transition time +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldTypeDescription
object_iduint32

on_coloruint32 repeated

off_coloruint32 repeated

on_period_msuint32 repeated

off_period_msuint32 repeated

transition_on_period_msuint32 repeated

transition_off_period_msuint32 repeated

offsetint32 repeated

relative_to_xfloat

relative_to_yfloat

rotatebool

make_relativeSetCubeLightsRequest.MakeRelativeMode

+

+ + + + +

SetCubeLightsResponse

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

+

+ + + + +

SetPreferredCubeRequest

+ Set the robot's preferred cube and save it to disk. The robot +will always attempt to connect to this cube if it is available. +This is only used in simulation for now. +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
factory_idstring

+

+ + + + +

SetPreferredCubeResponse

+ +

+ + + + + + + + + + + + + + + +
FieldTypeDescription
statusResponseStatus

+

+ + + + + + +

CustomObjectDeletionMode

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumberDescription
DELETION_MASK_UNKNOWN0

DELETION_MASK_FIXED_CUSTOM_OBJECTS1

DELETION_MASK_CUSTOM_MARKER_OBJECTS2

DELETION_MASK_ARCHETYPES3

+

+ +

CustomObjectMarker

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumberDescription
CUSTOM_MARKER_UNKNOWN0

CUSTOM_MARKER_CIRCLES_21

CUSTOM_MARKER_CIRCLES_32

CUSTOM_MARKER_CIRCLES_43

CUSTOM_MARKER_CIRCLES_54

CUSTOM_MARKER_DIAMONDS_25

CUSTOM_MARKER_DIAMONDS_36

CUSTOM_MARKER_DIAMONDS_47

CUSTOM_MARKER_DIAMONDS_58

CUSTOM_MARKER_HEXAGONS_29

CUSTOM_MARKER_HEXAGONS_310

CUSTOM_MARKER_HEXAGONS_411

CUSTOM_MARKER_HEXAGONS_512

CUSTOM_MARKER_TRIANGLES_213

CUSTOM_MARKER_TRIANGLES_314

CUSTOM_MARKER_TRIANGLES_415

CUSTOM_MARKER_TRIANGLES_516

CUSTOM_MARKER_COUNT16

+

+ +

CustomType

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumberDescription
INVALID_CUSTOM_TYPE0

CUSTOM_TYPE_001

CUSTOM_TYPE_012

CUSTOM_TYPE_023

CUSTOM_TYPE_034

CUSTOM_TYPE_045

CUSTOM_TYPE_056

CUSTOM_TYPE_067

CUSTOM_TYPE_078

CUSTOM_TYPE_089

CUSTOM_TYPE_0910

CUSTOM_TYPE_1011

CUSTOM_TYPE_1112

CUSTOM_TYPE_1213

CUSTOM_TYPE_1314

CUSTOM_TYPE_1415

CUSTOM_TYPE_1516

CUSTOM_TYPE_1617

CUSTOM_TYPE_1718

CUSTOM_TYPE_1819

CUSTOM_TYPE_1920

CUSTOM_TYPE_COUNT20

+

+ +

ObjectConstants

+ Constants associated with the audio feed

+ + + + + + + + + + + + + + + + + + + +
NameNumberDescription
OBJECT_CONSTANTS_NULL0

error value

FIXED_CUSTOM_WALL_THICKNESS_MM10

The depth of custom walls used in the engine

+

+ +

ObjectFamily

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumberDescription
INVALID_FAMILY0

UNKNOWN_FAMILY1

BLOCK2

LIGHT_CUBE3

CHARGER4

CUSTOM_OBJECT7

OBJECT_FAMILY_COUNT7

+

+ +

ObjectType

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumberDescription
INVALID_OBJECT0

UNKNOWN_OBJECT1

BLOCK_LIGHTCUBE12

Light Cube (a.k.a. Active Block)

FIRST_CUSTOM_OBJECT_TYPE15

OBJECT_TYPE_COUNT38

+

+ +

SetCubeLightsRequest.MakeRelativeMode

+ This is a uint_8 internally.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumberDescription
UNKNOWN0

OFF1

BY_CORNER2

BY_SIDE3

+

+ +

UpAxis

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameNumberDescription
INVALID_AXIS0

X_NEGATIVE1

X_POSITIVE2

Y_NEGATIVE3

Y_POSITIVE4

Z_NEGATIVE5

Z_POSITIVE6

NUM_AXES7

+

+ + + + + + + +

Scalar Value Types

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
.proto TypeNotesPython Type
doublefloat
floatfloat
int32Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead.int
int64Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead.int/long
uint32Uses variable-length encoding.int/long
uint64Uses variable-length encoding.int/long
sint32Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s.int
sint64Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s.int/long
fixed32Always four bytes. More efficient than uint32 if values are often greater than 2^28.int
fixed64Always eight bytes. More efficient than uint64 if values are often greater than 2^56.int/long
sfixed32Always four bytes.int
sfixed64Always eight bytes.int/long
boolboolean
stringA string must always contain UTF-8 encoded or 7-bit ASCII text.str/unicode
bytesMay contain any arbitrary sequence of bytes.str
+ + + diff --git a/docs/source/proto.rst b/docs/source/proto.rst new file mode 100644 index 0000000..c492c56 --- /dev/null +++ b/docs/source/proto.rst @@ -0,0 +1,13 @@ +:orphan: + +Protobuf Documentation +====================== + +.. raw:: html + :file: proto.html + +---- + +`Terms and Conditions `_ and `Privacy Policy `_ + +`Click here to return to the Anki Developer website. `_ \ No newline at end of file diff --git a/docs/source/template.tmpl b/docs/source/template.tmpl new file mode 100644 index 0000000..ea3daa4 --- /dev/null +++ b/docs/source/template.tmpl @@ -0,0 +1,310 @@ + + + + + + + + + + +

Table of Contents

+ +
+ +
+ + {{range .Files}} + {{$file_name := .Name}} +
+

{{.Name}}

Top +
+ {{.Description}}

+ + {{range .Messages}} +

{{.LongName}}

+ {{.Description}} +

+ + {{if .HasFields}} + + + + + + {{range .Fields}} + + + + + + {{end}} + +
FieldTypeDescription
{{.Name}}{{.LongType}} {{.Label}}

{{.Description}} {{if .DefaultValue}}Default: {{.DefaultValue}}{{end}}

+

+ {{end}} + + {{if .HasExtensions}} +
+ + + + + + {{range .Extensions}} + + + + + + + + {{end}} + +
ExtensionTypeBaseNumberDescription
{{.Name}}{{.LongType}}{{.ContainingLongType}}{{.Number}}

{{.Description}}{{if .DefaultValue}} Default: {{.DefaultValue}}{{end}}

+ {{end}} + {{end}} + + {{range .Enums}} +

{{.LongName}}

+ {{.Description}}

+ + + + + + {{range .Values}} + + + + + + {{end}} + +
NameNumberDescription
{{.Name}}{{.Number}}

{{.Description}}

+

+ {{end}} + + {{if .HasExtensions}} +

File-level Extensions

+ + + + + + {{range .Extensions}} + + + + + + + + {{end}} + +
ExtensionTypeBaseNumberDescription
{{.Name}}{{.LongType}}{{.ContainingLongType}}{{.Number}}

{{.Description}}{{if .DefaultValue}} Default: {{.DefaultValue}}{{end}}

+

+ {{end}} + + {{range .Services}} +

{{.Name}}

+ {{.Description}}

+ + + + + + {{range .Methods}} + + + + + {{end}} + +
Method NameDescription
{{.Name}}

{{.Description}}

+

+ {{end}} + {{end}} + +

Scalar Value Types

+ + + + + + {{range .Scalars}} + + + + + + {{end}} + +
.proto TypeNotesPython Type
{{.ProtoType}}{{.Notes}}{{.PythonType}}
+ + + From 7dae07c8623f0e1256b4009e40708633f79b4abd Mon Sep 17 00:00:00 2001 From: Michelle Sintov Date: Tue, 18 Dec 2018 07:43:53 -0800 Subject: [PATCH 012/115] VIC-12454 Remove Google Analytics commented-out code #72 --- docs/source/_templates/layout.html | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/docs/source/_templates/layout.html b/docs/source/_templates/layout.html index 7d57882..b4396d2 100644 --- a/docs/source/_templates/layout.html +++ b/docs/source/_templates/layout.html @@ -64,17 +64,6 @@ window.addEventListener("message", receiveMessage, false); })(window); - - /** - * Google Analytics - * @TODO: enable google analytics - */ - // if (window.location.hostname.toLowerCase() == 'cozmosdk.anki.com') { - // window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date; - // ga('create', 'UA-40941061-1', 'auto'); - // ga('send', 'pageview'); - // } -